inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 DB 2편 - 데이터 접근 활용 기술

프로젝트 구조 설명1 - 기본

controller의 dto를 repository에서 사용할 수 없는 이유

734

정지호

작성한 질문수 3

0

보통 흐름이 controller -> service -> repository 로 흐르기 때문에 service에서 repository를 의존하는 것은 상관이 없지만 반대로 repository에서 service를 의존하는 것은 문제가 됩니다.(예를들면 service단의 dto를 참조한다던지 등)

이렇게 순환 관계가 생길때의 문제가 무엇일까요?

spring mvc jpa querydsl spring-data-mybatis spring-jpa

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
service와 repository의 순환 관계가 생길 때의 문제는 여러 가지가 있습니다. 먼저, 순환 참조는 시스템의 각 구성 요소 간에 명확한 의존성 경계를 모호하게 만듭니다. 이는 코드를 이해하고 유지 보수하는 데 불필요한 복잡성을 추가합니다. 또한, repository가 service 레이어의 DTO를 참조하면 계층 간의 역할이 뒤섞이게 되어 구조적인 문제를 야기합니다.

repository는 단순히 데이터 저장소의 역할을 하며, 데이터에 접근하고 조작하는 기능을 제공하는 것이 목적입니다. 반면, service 레이어는 비즈니스 로직을 처리하고, 여러 repository를 조합하거나, DTO를 사용하여 다른 레이어와 데이터를 교환하는 역할을 합니다. service 레이어의 DTO는 presentation 레이어(대개 controller)와 소통하기 위한 목적으로 사용되며, 이를 repository에서 직접 사용하면 계층 간의 역할 분리 원칙(Separation of Concerns)을 위배하게 됩니다.

순환이 발생하면 애플리케이션의 시작 시점에 Bean 생성 순서 문제로 인해 올바르게 구성되지 못하는 상황이 발생할 수 있습니다. 또한 테스트의 난이도가 증가하고, 한 부분의 변경이 다른 부분에 예상치 못한 부작용을 가져오는 등의 문제점이 생길 수 있습니다.

따라서 각 레이어는 독립적이고 단일 책임을 가져야 하며, 레이어 간의 의존성은 통제된 방식으로 주고받아야 합니다. 이러한 구조는 코드의 가독성, 확장성 및 유지 보수성에 긍정적인 영향을 미칩니다.

RepositoryTest의 패키지 위치가 domain인 이유

0

35

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

31

1

update()에 사용하는 setter 질문드립니다.

0

49

1

SQL 중심적 개발의 문제점에 대한 질문

0

72

1

혹시 Containing 을 안쓰신 이유가 있을까요?

0

86

2

[공유] 스프링부트 4.x 버전 mybatis 연동

0

180

1

@repository 어노테이션

0

89

3

ItemService

0

59

1

논리 커밋, 물리 커밋 질문드립니다.

0

54

1

내부 트랜잭션 커밋은 필수인가요?

0

57

1

프록시 커넥션 객체를 반환할 때 생성하는건가요?

0

55

1

Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)

2

179

2

JPQL 대신 네이티브 쿼리를 사용해야 하는 경우

0

80

1

@EventListener(ApplicationReadyEvent.class) 관련

0

88

1

트랜잭션 동기화 매니저와 데이터 소스

0

77

1

DB 관련 강의 개설 계획은 없으신건가요?

0

133

2

물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요

0

94

1

스프링 3 버전 이상 rollbackFor 변경된듯요

1

113

1

트랜잭션 전파 질문.

0

87

1

프로젝트 오픈 에러

0

126

1

외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다

0

84

2

같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환

0

73

1

h2 인메모리 테스트중 예약어 충돌날 경우 대처방법

0

104

1

커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문

0

98

2