🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

서비스와 컨트롤러의 역할 분담.

24.05.23 11:24 작성 조회수 65

0

강의 수강 후 개인 프로젝트를 진행중입니다.

코드 리팩토링에 관한 문제인데요.

validation강의할 때 강사님께서 web과 domain 계층을 분리해서

domain은 web을 모르지만 web은 domain을 알아야 하는? 알아야 되는? 것이라고 설명하셔서

그것에 맞게 코드를 작성중입니다.

 

domain계층엔 직접 데이터베이스와 연동하는 엔티티와 레포지토리, 서비스를 저장했습니다.

그리고 web계층엔 컨트롤러와 컨트롤러에서 주고받는 폼들(엔티티에 저장하기 위한)을 저장했구요

 

컨트롤러는 최대한 기능만 보이게 깔끔하게 유지하려고 하는데

폼 객체->엔티티, 엔티티->폼 객체를 작성하는 코드가 지저분해지더라구요. 무심코 리포지토리에 이 메서드를

넣었다가 domian은 web을 몰라야 한다는 말씀이 생각나서 이 코드들을 컨트롤러에 옮기려고 하는데

실무에서도 보통 폼->엔티티로 바꾸는 작업 혹은 엔티티->폼으로 바꾸는 작업은 컨트롤러 단에서

하는지 궁금합니다.

답변 2

·

답변을 작성해보세요.

0

안녕하세요. 김기홍님

여기서 핵심은 폼이라는 것이 주로 웹에서 사용자의 요청을 받는다는 것에 있습니다. 따라서 폼은 web 계층에 있게 되는 것이지요.

계층간 의존관계를 설계할 때 가급적 단방향으로 흐르는 것이 좋습니다.

그런데 리포지토리가 web 계층의 폼을 사용하게 되면 의존관계가 양방향으로 흐르는 문제가 발생합니다.

예를 들어 web 계층의 컨트롤러가 리포지토리를 호출하는데, 반대로 리포지토리도 web 계층의 폼을 호출하면서 양방향 의존관계가 발생하는 것이지요.

따라서 이 경우 web 계층의 폼은 컨트롤러에서 변경하는 것이 더 나은 선택입니다.

AI 답변도 참고해주세요.

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.23

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

김기홍님의 질문에 관해, 서비스와 컨트롤러의 역할 분담에 대한 내용을 찾아보았습니다. 당신이 언급한 폼 객체와 엔티티 간의 변환 작업 위치에 대한 질문은 실제 개발 환경에서 자주 등장하는 고민 중 하나입니다.

실무에서 폼 객체(form object)와 엔티티(entity) 변환의 책임을 어디에 두어야 할지는 설계 철학이나 프로젝트의 구조에 따라 다를 수 있으나, 일반적으로는 컨트롤러(controller) 혹은 서비스(service) 단에서 처리하는 경우가 많습니다. 이와 관련해서 두 가지 주요 접근 방식을 소개하겠습니다:

  1. 컨트롤러에서 변환 처리: 컨트롤러에서 폼 객체를 엔티티로 변환하거나 그 반대의 경우를 처리하는 방식입니다. 이 접근법은 웹 계층에 종속적인 변환 로직을 컨트롤러에 포함시켜, 서비스 계층을 좀 더 순수한 비즈니스 로직 처리에 집중시킬 수 있습니다. 다만, 컨트롤러의 코드가 복잡해질 수 있는 단점이 있습니다.

  2. 서비스에서 변환 처리: 서비스 계층에서 폼 객체와 엔티티 간의 변환 로직을 처리하는 방식입니다. 이 방식은 변환 로직이 여러 컨트롤러에서 공통적으로 사용될 경우 중복 코드를 줄일 수 있는 장점이 있습니다. 그러나 서비스 계층이 웹 계층의 존재를 알아야 하므로 계층 간의 분리가 약해지는 단점이 있을 수 있습니다.

현재 설명드린 내용은 다음 강의 질문&답변에서도 이와 관련된 토론이 있습니다. 아래 링크에서는 폼 객체와 엔티티 관련 변환 작업의 책임을 어떻게 분배할지에 대한 논의가 있으니 참고하시면 도움이 될 것입니다.

이 질문에서는 한 측면으로 컨트롤러와 서비스 계층 간의 역할 분담과 관련된 고민이 다뤄졌으며, DTO와 엔티티의 관리에 대한 실무적인 접근 방식에 대한 논의가 있었습니다. 가장 중요한 것은 프로젝트의 구조와 유지보수성, 그리고 팀 내의 합의된 설계 철학을 따르는 것입니다.

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

채널톡 아이콘