인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

조희제님의 프로필 이미지

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

Controller / Service 분리

작성

·

47

0

안녕하세요 선생님 강의 잘들었습니다.! 강의 이후 복습 하며 사이드 프로젝트를 하며 성장 하고 있습니다.

프로젝트를 하던중 궁금증이 생겨서 블로그 글을 찾아 보았지만 관련된 글을 찾지 못하여 질문을 드립니다.

회원 관련된 API = UserController -> UserService의 흐름으로 사용 하였습니다.

하지만 User API가 너무 많아져 특정 API를 수정할 때 찾기 어려워졌습니다.

그레서 이걸 분리 할수 없을까에 대한 고민이 생겼고 행위에 따라 분리 했습니다.

 

[ Controller 분리 ]

검증 관련한 API를 VerficationController으로 모았습니다.

VerficationController에서 필요한 자원에 따라 UserService, EventService를 사용 하였습니다.

 

[ 질문 ]

1. Controller를 행위에 따라 부분적으로 분리 하여도 괜찮나요?

  • UserController / EventController / VerificationController

  • 분리 했을때 통일성이 없다는 느낌이 들어서 고민 입니다.

 

  1. Controller / Service 책임을 어떻게 설정 하시나요?

     

    • 회원 관련된 요청이면 UserController 회원 로직이면 UserService를 사용 했습니다.

    • 하지만 API가 너무 많아 분리를 할때 어떤 기준으로 분리를 해야 할지 모르겠습니다.

답변 2

1

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, 조희제 님!

 

1. Controller를 행위에 따라 부분적으로 분리 하여도 괜찮나요?

 UserController / EventController / VerificationController

이렇게 분리하는 것보다는, 도메인이 우선되도록 나누는 것이 좋을 것 같아요.

UserController 내에서 유저 관련 검증 API가 너무 많아지면 UserVerificationController 로 나누는 것을 고민해 보는 것이죠.

말씀주신대로 나누면, 반대로 다루는 서브도메인의 종류가 많아질수록 각 Controller는 비대해질 수밖에 없습니다.

 

2. Controller / Service 책임을 어떻게 설정 하시나요?

이것도 마찬가지입니다. 가장 먼저 도메인을 중심으로 나누고, 그 안에서 책임이 많아졌다고 느낄 때 세부 클래스로 나눠보세요. ex. UserCreateService

즉, 핵심은 항상 도메인입니다.


도움이 되셨기를 바랍니다.
감사합니다 🙂

조희제님의 프로필 이미지
조희제
질문자

그렇군요!
선생님 말씀대로 도메인 중심으로 수정하면 어떤역할인지 명확히 알듯 합니다!
오늘도 많이 배웠습니다 감사합니다!

0

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

안녕하세요, 인프런 AI 인턴입니다. 조희제님!

먼저 사이드 프로젝트를 통해 성장하고 계신다니 정말 축하드립니다. 프로젝트를 진행하며 생기는 질문은 좋은 학습의 기회가 됩니다. 이제 질문에 대해 답변드리겠습니다.

  1. Controller를 행위에 따라 분리하는 것:

    • Controller를 행위에 따라 분리하는 것은 좋은 방법입니다. 이렇게 하면 각 컨트롤러의 역할과 책임이 명확해지고 유지보수가 용이해집니다. ‘UserController’, ‘EventController’, ‘VerificationController’처럼 기능 또는 행위에 기반해서 분리하는 것은 여러 대규모 프로젝트에서 흔히 사용하는 패턴입니다.
    • 다만, 분리된 컨트롤러 간의 통일성과 코드 일관성을 유지하려는 노력도 중요합니다. 각 컨트롤러의 응답 방식, 예외 처리, 로깅 등에서는 동일한 스타일과 규칙을 적용하는 것이 유지보수성과 협업에 더 유리합니다.
  2. Controller / Service의 책임 설정:

    • 일반적으로 Controller는 요청을 받아 서비스 계층에 위임하며, 결과를 적절한 응답 형태로 변환하는 역할을 합니다. 반면 Service 계층은 비즈니스 로직과 데이터 처리를 담당합니다. 따라서 요청 처리는 Controller, 비즈니스 로직은 Service로 각자의 책임을 나누는 것이 중요합니다.
    • API가 많아져서 분리가 필요할 때, 비슷한 기능이나 주제를 공유하는 API를 그룹화하여 컨트롤러를 분리할 수 있습니다. 예를 들어 사용자 관리와 관련된 기능들만 모아서 관리하는 등 기능별로 컨트롤러를 조직화하면 됩니다. 이 경우 도메인 모델에 맞추어 분리하는 것이 가장 일반적입니다.

아래와 같은 추가 사례를 참고해 보세요:
- https://www.inflearn.com/questions/944019 - 컨트롤러와 서비스 DTO 분리하기에 대한 좋은 설명이 있습니다.

위의 링크들은 더 많은 인사이트를 제공할 수 있으며, 각 상황에 따라 컨트롤러와 서비스를 어떻게 분리하고 관리할 수 있는지 참고하시기 바랍니다.

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