인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김태수님의 프로필 이미지
김태수

작성한 질문수

스프링 부트 개념과 활용

Service와 Repository의 관계에 대한 질문입니다!

해결된 질문

작성

·

4K

0

좋은 강의 정말 감사합니다. 스프링 학습에 있어 너무 좋은 기회가 되었습니다.

강의를 듣고 예제 연습을 할때는 대부분 1개의 Service는 1개의  Repository와 연동? 매핑? 되어있습니다!

질문을 요약하자면 

1. 1개의 Request의 기능에서 2개 이상의 DTO에 대한 query를 실행해야 할때

  - 현재 제가 작성한 코드에는 1개의 Service 객체에서 2개의 Repository를 @Autowired하여 사용하고 있습니다. 지금 사용하고 있는 방법이 올바른지(보안, 효율성 측면) 궁금합니다. 

  - 제가 추가적으로 생각한 방법은 2개 이상의 DTO를 사용하려고 추가적인 Repository를 사용하니 Request를 받을 때 Body에서 2개 이상의 DTO를 묶어주는 객체를 받아오고 Controller에서 묶음으로 받은 객체를 사용할 각각의 DTO로 묶음해제하여 Controller객체에서 각 DTO 객체에 맞는 Service 메소드를 실행하는 방법인데 이방법이 맞는지 궁금합니다.

  - 만약 위 2개의 방법이 올바르지 않다면 어떤 방법으로 하면 효율적인지 궁금합니다.

2. 1개의 Service객체를 이용하여 Service를 처리하는데 다른 Service 객체를 사용해야 하는 경우, 다른 Service 객체를 @Autowired하여 사용하는 것이 효율적인지 궁금합니다.

질문이 너무 길고 장황하여 죄송합니다.

질문에 답변을 해주시면 정말 감사하겠습니다. 혹시 해당 질문에 대한 관련 사이트를 알려주시면 참고하여 찾아보겠습니다.

감사합니다.

답변 2

3

백기선님의 프로필 이미지
백기선
지식공유자

어떤게 맞고 틀리고 그런건 없습니다. 본인이 또는 팀내에서 쓰기 편하면 그걸로도 괜찮은 겁니다. 저는 서비스 객체 하나에서 여러 리파지토리를 쓰기도 하고, 컨트롤러에서 서비스와 리파지토리를 모두 쓰기도 합니다. 

서비스에서 다른 서비스를 주입받아 사용하는것도 당연히 가능한 일이고 중복 코드를 제거한다는 관점에선 효율적이죠.

애플리케이션 아키텍처는 다양한 형태가 있습니다.

양파형: https://www.codeguru.com/csharp/csharp/cs_misc/designtechniques/understanding-onion-architecture.html
계층형: https://dzone.com/articles/layered-architecture-is-good

이건 약간 다르지만 DDD도 한번쯤 봐두시면 좋겠네요.

https://medium.com/modern-software-architecture/modern-software-architecture-1-domain-driven-design-f06fad8695f9

감사합니다.

0

김태수님의 프로필 이미지
김태수
질문자

빠르고 좋은 답변 감사합니다 :)

김태수님의 프로필 이미지
김태수

작성한 질문수

질문하기