• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

23.12.03 17:04 작성 조회수 330

0

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

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

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.05

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

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

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

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