inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

32강. 반납 기능 개발하기

강의 내용을 따라가던 도중에 의문이 생겨서 질문드립니다.

해결된 질문

332

wisehero

작성한 질문수 33

1

안녕하세요. 태현님, 좋은 강의 감사합니다. 오늘 BookService 코드를 같이 타이핑하던 도중 의문이 생겼습니다. 뭔가 점점 BookService에서 의존을 주입받는 레포지토리가 점점 늘어나고 있음이 그 원인이었는데요.

 

보통 커머스 서비스의 앱에서 주문 상세 버튼을 누르면 다음과 같은 정보들이 나오는데요.

등등.. 물론 내부적으론 어떻게 해결이 되어있겠지만 벌써 주문 상세를 보여주는 기능을 처리하기 위한 서비스에서 엄~청 많은 레포지토리를 가져와야할 것 같은? 느낌이 듭니다. 이런 경우엔

 

  1. 의존 주입을 받는 객체의 갯수의 상한선을 따로 두고 개발하실까요?

  2. 아니면 이런 문제를 해결하는 방법론 같은 것이 이미 있나요?

  3. 혹은 제 생각엔 짤막하게 배운 디비 지식으로 주문과 같은 것은 반정규화로 테이블을 합쳐서 그 테이블과 대응되는 하나의 레포지토리로만 가져오나요?

감사합니다.

java spring aws mysql spring-boot jpa

답변 1

0

최태현

안녕하세요! wisehero님! 🙂 정말 좋은 질문이십니다. 👍

결론부터 말씀드리면,

  • 상황에 따라 다르지만 크게 repository 개수에 대한 제한을 두지는 않는다

  • 시스템 디자인 관점에서 풀어나가는 경우가 많다.

     

    로 요약드릴 수 있을 것 같습니다.

 

그 이유는 너무나도 case by case 이기 때문입니다. 예를 들어, 우리가 앱에서 보는 화면에

  • 가게 정보

  • 메뉴 정보,

  • 주문 자체의 정보(주문 일시, 주문번호)

  • 메뉴와 옵션 선택 정보

  • 쿠폰 적용

  • 주문자의 개인정보(주소 및 연락처)

가 있다고 할 때, 이 기능들이 모두 하나의 API에서 반환하고 있다는 보장은 없습니다.

클라이언트가 가게 API / 메뉴 정보 API / 주문 세부 정보 API ... 등등을 각각 호출해서 정보를 조합하고 있을 수도 있고 (클라이언트 <-> 서버 통신이 여러번), 아니면 비슷한 영역끼리 API를 묶어두고 그 API 들을 다시 하나로 묶어 주는 서버가 있을 수도 있습니다. (클라이언트 <-> 서버 <-> 여러 서버 인 셈이죠!)

 

또한 말씀해주신 "주문과 같은 것은 반정규화로 테이블을 합쳐서 그 테이블과 대응되는 하나의 레포지토리로만 가져오나요?" 방법을 사용할 수도 있습니다. 👍(일종의 CQRS 같은 구조를 적용하는거죠) 다만 이 경우, 코드의 의존성을 개선하기 보다는 너무 많은 정보를 여러 테이블에 가져오려 하다보니 성능상의 문제가 발생해, 성능을 개선하기 위해서 적용하는 경우가 다수입니다.

획일화된 해결책을 말씀드리지 못해 아쉽지만 상황에 따라 적절한 방법을 고민하고 적용하는게 개발의 재미인 것 같기도 하네요! 😁 답변이 도움이 되었으면 좋겠습니다. 감사합니다! 🙇

1

wisehero

아! 그러네요...!! 좀 단순하게 생각했군요. '하나의 API에서 반환하고 있다는 보장이 없다' 이 부분은 전혀 생각을 못했습니다. 감사합니다!!

1

최태현

도움이 되었다니 다행입니다~~ 😊 궁금한 점이 생기시면 언제든 또 편하게 질문 주세요! 감사합니다~ 🙏

패키지 구분에 대해 궁금한게 있습니다

0

25

2

리액트 관련 질문이 있습니다.

0

65

2

스프링부트 버전

0

76

2

7강 강의를 들으려고 했는데 오류가 나서 서버가 안 켜지는거 같아요.

0

59

2

33강. UserLoanHistory의 관계성에 대한 질문

1

56

2

Java JDK 버전 문의의 건

0

135

2

ec2 에서 Linux버전이 달라져서 설치가 안되는것 같은데 자료 최신화좀 해주세요.

0

90

3

h2 console 접속했을 테이블 질문

1

67

1

ec2 서버에서 스프링 실행도 되고 인바운드 설정까지 했는데 index.html 안됨

0

79

2

15강. updateUser() 질문

0

56

2

깃허브 질

0

84

2

여기까지 다 끝냈다고 하셨는데

0

79

2

왜안될까요

0

72

2

MySQL 창이안ㄴ뜹니다

0

59

2

포스트맨

0

52

1

spring 개념적인 질문

0

71

2

인텔리제이 샘플코드 실행 안됨 오류

0

142

2

aws 배포할때 .env 파일에 저장한 환경변수에 관하여 여쭤볼게 있습니다

0

86

1

마이그레이션 오류입니다.

0

175

3

Whitelabel Error Page 오류가 났습니다.

0

166

2

안녕하십니까! 오류가 났습니다.. 도와주세요 ㅜㅜ

1

94

3

궁금한게 있습니다.

0

60

2

DTO 관련

0

70

2

궁금한게 있습니다!

0

69

2