개발자

node.js controller service 분리 상태코드반환 책임 질문..

2024년 01월 14일조회 444

제가 node.js 로 토이프로젝트 진행중에 있는데 코드를 controller와 service 를 분리해서 진행하고있습니다. 예를 들면 예매 기능을 구현한다고하면 예매 성공까지 검증해야하는 로직이 3개라고 치면 1. 컨트롤러에서 해당 서비스코드의 3개의 함수를 각각 실행해서 해당 상태코드와 에러메세지를 작성해 반환할지 아니면 2. 컨트롤러에서 하나의 서비스코드 함수를 실행해 서비스코드에서 해당 상태코드와 에러메세지를 컨트롤러에 전달해 반환할지 고민입니다. 상태코드를 서비스계층 부분에서 담아도 될지 의문이듭니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

인기 답변

장성호님의 프로필 사진

요구사항과 기능이 더 세세히 주어져야 1번 2번을 판단할 수 있을 것 같습니다. 근데 예매 기능이면 1번으로 할 것 같습니다. 예를 들어 예매 기능에 다음과 같은 요구사항이 있다고 생각해보겠습니다. 1. A 항공권 예매 선택 2. 금액 결제 3. 결제 완료시 예매 성공 이렇게 되어있다면 1. 항공권 서비스(표 매물 관련) 2. 결제 서비스 3. 사용자가 보유한 항공권 서비스 이렇게 서비스를 나눈 뒤, 각 서비스의 함수를 호출할 것 같네요. 그리고 앞서 말씀드린 요구사항 각각에 대해 에러를 정의하고, 서비스의 함수 별로 에러를 관리할 것 같습니다. JOIN 같은 걸 활용해서 아예 이런 프로세스 자체를 쿼리 하나로 묶는 방법도 있긴 합니다. 근데 그러면 나중에 기능 분리도 어렵고, 단일 책임이라고 보기도 어려워서… 그냥 서비스 함수 별로 쿼리 짜고 호출한 뒤, 함수 결과들을 잘 조합해서 활용하는 게 나을 것 같네요. 지금은 서버가 1개라고 가정한다면 나중엔 항공권 서버랑 결제 서버를 분리한 뒤, 항공권 서버 내의 결제 서비스는 디비 직접 접근에서 결제 서버 API 호출하는 방식으로 유연하게 변경하는 것도 가능하구요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 01월 14일

컨트롤러와 서비스 계층 간의 책임을 분배하는 것은 주로 프로젝트 규모나 개인 또는 팀간의 코딩 스타일에 따라 다릅니다. 일반적으로, Node.js나 기타 MVC 패턴에서, 컨트롤러(Controller)는 클라이언트의 요청을 처리하고 응답(request/response cycle)을 관리하는 책임이 있습니다. 반대로 서비스 계층(Service layer)은 실제 로직과 데이터 처리를 수행하는 역할을 합니다. 상태 코드(Status code)를 반환하는 것은 HTTP 응답의 일부분이므로, 이 역할은 대체로 컨트롤러가 담당합니다. 모든 비즈니스 로직이 완료된 후에 컨트롤러가 최종적으로 상태 코드와 결과를 결정하여 클라이언트에게 반환하는 방식입니다. 서비스 계층에서 상태 코드를 직접 반환하도록 만들면 서비스 계층이 HTTP 프로토콜을 알아야 하므로, 추상화가 약화되고 코드 재사용성이 떨어질 수 있습니다. 그러나 이것은 절대적인 규칙은 아닙니다. 어떤 경우에는 에러 종류 별로 고유한 예외를 정의하고, 서비스 계층에서 이러한 예외를 던지고, 컨트롤러에서는 이러한 예외를 캐치하여 각각에 해당하는 HTTP 상태 코드를 설정할 수 있습니다. 결과적으로, 어느 방법을 선택하든 재사용성과 추상화, 그리고 코드 유지 관리의 편의성을 고려하면서 선택하는 것이 중요합니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!