📘 Node.js 실무 백엔드 개발

 

📖 5장. 서비스 계층 설계 (Service Layer)


5.1 서비스 계층의 필요성

초기 프로젝트에서는 비즈니스 로직이 Controller에 직접 작성되는 경우가 많다.
하지만 프로젝트가 커질수록 다음과 같은 문제가 발생한다:

  • Controller가 비대해짐
  • 코드 재사용 어려움
  • 테스트 어려움
  • 로직 분리가 되지 않음

이 문제를 해결하기 위해 서비스 계층(Service Layer)을 도입한다.


5.2 서비스 계층의 역할

서비스 계층은 애플리케이션의 핵심 로직을 담당한다.

주요 역할:

  • 비즈니스 규칙 처리
  • 데이터 가공
  • 여러 데이터 소스 조합
  • 트랜잭션 관리

5.3 계층 구조에서의 위치

서비스 계층은 다음 위치에 존재한다:

Controller → Service → Model → Database

Controller는 요청을 전달하고, Service는 실제 로직을 수행한다.


5.4 Controller와 Service의 책임 분리

Controller

  • 요청 데이터 수신
  • 입력 검증
  • 응답 반환

Service

  • 비즈니스 로직 처리
  • 데이터 처리 흐름 제어

5.5 서비스 계층 설계 원칙

1) 단일 책임 원칙

하나의 서비스는 하나의 책임만 가진다.


2) 재사용성

여러 Controller에서 사용할 수 있어야 한다.


3) 독립성

특정 프레임워크에 의존하지 않도록 설계한다.


5.6 사용자 서비스 설계

사용자 관련 로직은 다음과 같이 구성된다:

UserService
- registerUser
- loginUser
- getUser

각 기능은 명확한 역할을 가진다.


5.7 인증 로직의 위치

로그인과 인증 처리 로직은 Service 계층에 위치해야 한다.

이유:

  • 보안 로직 집중 관리
  • 재사용 가능
  • 테스트 용이

5.8 데이터 처리 흐름

사용자 로그인 흐름:

Controller
  ↓
Service (비밀번호 검증, 토큰 생성)
  ↓
Model (DB 조회)

5.9 예외 처리 전략

Service 계층에서는 오류 발생 시 직접 응답을 반환하지 않는다.
대신 에러를 상위 계층으로 전달한다.

Service → throw Error → Controller → Error Handler

5.10 서비스 계층의 장점

  • 코드 구조 명확화
  • 유지보수 용이
  • 테스트 가능
  • 로직 재사용 가능

5.11 서비스 분리 기준

서비스는 기능 단위로 분리한다:

AuthService
PostService
UserService

각 서비스는 독립적으로 관리된다.


5.12 정리

이 장에서는 서비스 계층의 역할과 설계 방법을 학습하였다.

핵심 내용:

  • Controller와 로직 분리
  • Service 중심 구조 설계
  • 비즈니스 로직 집중 관리

다음 장에서는 데이터베이스 접근을 담당하는 Repository 계층을 설계한다.

📘 Node.js 실무 백엔드 개발

+ Recent posts