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

gotjd9773님의 프로필 이미지

작성한 질문수

서버개발자 과제전형 완벽가이드 - 1편

API 서버 구현 - 1

클린한 아키텍쳐에 관하여

해결된 질문

24.09.22 15:07 작성

·

42

·

수정됨

1

안녕하세요.

API 서버 구현 - 1 의 내용에 대해서 질문 드립니다.

 

package com.library.service;

import com.library.controller.response.PageResult;
import com.library.controller.response.SearchResponse;

import문을 보면 BookQueryService 와 BookRepository 가 controller 패키지의 DTO들을 의존하고 있습니다.

 

3-tier architecture 에서는 한 방향으로 의존 관계가 흘러야 한다고 알고 있는데, 아키텍쳐 부분에 대해서 의견을 듣고 싶습니다.

 

감사합니다.

답변 2

1

J Tech님의 프로필 이미지
J Tech
지식공유자

2024. 09. 22. 15:41

안녕하세요 gotjd9773님 질문 남겨주셔서 감사합니다

넵 말씀하신 것처럼 하위 계층에서 controller의 dto를 참조하는 것은 지양하는 것이 맞습니다.

이는 계층 간 의존성을 높여 코드의 결합도를 증가시키기 때문에, 저 역시 실무에서는 이러한 접근을 피하고 있습니다. 다만, 강의에서 언급드렸듯이 과제 특성상 제한된 시간 내에 구현해야 하기 때문에, 재사용성을 통해 구현 속도를 높인 부분이라고 이해해주시면 될 것 같아요!

시간적 여유가 있다면 mapper등을 통해 각 계층에서 데이터를 변환하여 전달하여, 계층 간 의존성을 더욱 깔끔하게 분리할 수 있습니다.

만약 면접에서 이 부분에 대한 질문을 받으신다면, 당시 선택의 이유와 판단 근거를 잘 설명해주시면 충분합니다 😄

0

인프런 AI 인턴님의 프로필 이미지

2024. 09. 22. 15:11

안녕하세요, 인프런 AI 인턴입니다. gotjd9773님,

질문해 주신 내용에 대해 답변 드리겠습니다.
3-tier architecture에서는 일반적으로 Presentation Layer(Controller) -> Business Logic Layer(Service) -> Data Access Layer(Repository) 순으로 의존 관계가 형성되는 것이 바람직합니다. 하지만 질문에서 예시로 주신 코드에서는 Service 계층이 Controller 계층의 DTO를 직접 참조하는 모습이 보입니다. 이는 의존성 역전 원칙에 반하는 구조입니다.

이와 관련된 기존 답변들을 확인해보시면 도움이 될 것 같습니다. 아래 링크들을 참고해 주세요.

  1. 멀티모듈 구성에서 하위 모듈은 java 모듈로 하는 이유가 궁금합니다.

    • 특히, 모듈 간의 의존성 및 프로젝트 구조에 대한 설명이 나와 있으니 도움이 될 것입니다.
  2. 포트폴리오 질문

    • 다양한 기술의 적용 시 고려해야 할 사항에 대한 내용이 포함되어 있으며, 클린 아키텍처에 대한 견해가 도움이 될 수 있습니다.
  3. Readme 파일 작성방법

    • README 파일 작성과 관련된 내용이지만, 프로젝트 구조와 관련된 참고 사항이 포함되어 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.