혹시 서비스에서 관련 레포지토리말고 다른 레포지토리를 의존해서는 안되는 이유가 뭘까요???
462
작성한 질문수 2
[질문 내용]
안녕하세요 강사님!!
MemberService에 MemberRepository와 LogRepository를 의존하는 걸 보면서 궁금증이 생겨서 질문 드립니다!
회사에서 일 할 때,
하나의 서비스에는 관련 레포지토리만 의존하고
필요하다면 다른 레포지토리는 직접 의존하지 말고 서비스를 통해서 해결하라는 말을 들어서 그렇게 코드를 짜왔습니다.
만약 다른 레포지토리를 의존해야 한다면 컨트롤러에서 하라고 들었던 것 같습니다.
예를 들면
MemberService에서는 MemberRepository만 의존하고
LogRepository의 메소드가 필요하다면 LogService를 의존해서 LogServerce.메소드 이런식으로 불러왔습니다.
혹시 이런 식으로 다른 레포지토리를 의존하지 말고 서비스를 의존해야 하는 이유가 무엇인지 이유를 알 수 있을까요???
단순히 계층구조를 지키기 위해서 인가요???
답변 1
0
안녕하세요 dd1122님, 인프런 AI 인턴이에요.
다른 레포지토리를 의존하는 대신 서비스를 통해 해결하는 것은, 코드의 유지보수 및 확장성을 고려한 설계 원칙 중 하나입니다. 이러한 설계 원칙은 “의존성 역전 원칙(Dependency Inversion Principle)“라고도 불리며, 소프트웨어의 유지보수성과 테스트 용이성을 개선하기 위해 사용됩니다.
서비스 계층은 다양한 비즈니스 로직을 처리하고, 해당 로직이 필요로 하는 데이터는 주로 데이터 액세스 계층(Repository)에서 가져옵니다. 이렇게 구성함으로써, 두 계층 간의 결합도를 낮출 수 있고, 코드의 재사용성과 테스트 용이성을 높일 수 있습니다. 또한, 서비스 계층에는 비즈니스 로직을 몰아 넣을 수 있어 관리와 유지보수가 용이해집니다.
단순히 계층 구조를 지키기 위해서만이 아니라, 유연한 구조를 유지하고 확장하기 위해 이러한 설계 원칙을 따르는 것이 좋습니다. 감사합니다!
RepositoryTest의 패키지 위치가 domain인 이유
0
30
2
REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!
0
30
1
update()에 사용하는 setter 질문드립니다.
0
48
1
SQL 중심적 개발의 문제점에 대한 질문
0
72
1
혹시 Containing 을 안쓰신 이유가 있을까요?
0
84
2
[공유] 스프링부트 4.x 버전 mybatis 연동
0
176
1
@repository 어노테이션
0
89
3
ItemService
0
58
1
논리 커밋, 물리 커밋 질문드립니다.
0
54
1
내부 트랜잭션 커밋은 필수인가요?
0
57
1
프록시 커넥션 객체를 반환할 때 생성하는건가요?
0
54
1
Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)
2
178
2
JPQL 대신 네이티브 쿼리를 사용해야 하는 경우
0
79
1
@EventListener(ApplicationReadyEvent.class) 관련
0
88
1
트랜잭션 동기화 매니저와 데이터 소스
0
76
1
DB 관련 강의 개설 계획은 없으신건가요?
0
133
2
물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요
0
94
1
스프링 3 버전 이상 rollbackFor 변경된듯요
1
112
1
트랜잭션 전파 질문.
0
87
1
프로젝트 오픈 에러
0
126
1
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
0
84
2
같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환
0
73
1
h2 인메모리 테스트중 예약어 충돌날 경우 대처방법
0
102
1
커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문
0
98
2





