Spring

[Spring] 스프링의 3계층 구조 : Controller, Service, Repository

leevigong 2025. 12. 11. 18:00
반응형

Spring의 설계 철학

Spring Framework 공식 문서는 설계 원칙을 이렇게 명시합니다:

"모든 단계에서 선택권을 제공합니다. Spring을 사용하면 설계 결정을 최대한 늦게 연기할 수 있습니다. 예를 들어, 코드를 변경하지 않고도 구성을 통해 지속성 공급자를 전환할 수 있습니다."

"다양한 관점을 수용합니다. Spring은 유연성을 중시하며, 작업 방식에 대해 고정관념을 갖지 않습니다."

"코드 품질에 대한 높은 기준을 설정하세요. Spring Framework는 패키지 간 순환 종속성 없이 깔끔한 코드 구조를 자랑하는 극소수 프로젝트 중 하나입니다.”

 

이 철학이 구체적으로 구현된 것이 3계층 구조(Three-Layer Architecture)입니다.

각 계층이 독립적이라서, 한 계층을 수정해도 다른 계층에 영향을 최소화할 수 있습니다.

 

이러한 문제를 해결하고자 Spring은 요청을 처리하기 위한 계층을 3가지로 나누었습니다.

 

계층형 아키텍처(Layer Architecture)란?

핵심: 관심사의 분리(Separation of Concerns)

  • 각 요소의 응집도가 높아지고
  • 각 요소의 결합도는 낮아진다

만약 서로 다른 모듈을 분리하지 않으면? → 1가지 변경사항이 다른 모든 요소에 영향을 미친다

이러한 문제를 해결하고자 Spring은 요청을 처리하기 위한 계층을 3가지로 나누었습니다

Presentation Layer (프레젠테이션 계층, Controller)

역할

  • 클라이언트로부터 HTTP 요청을 수신하고 응답을 반환한다
  • "어떤 요청을 받고, 어떤 응답을 돌려줄지”를 담당한다

주요 어노테이션

 

  • 클래스 레벨: @Controller, @RestController
  • 메서드 레벨: @GetMapping, @PostMapping, @PutMapping, @DeleteMapping

포인트

  • 가능한 한 비즈니스 로직은 여기에 두지 않는다
  • 요청 파라미터 검증, 응답 포맷 결정, 상태 코드 설정 등 "입출력"에 집중하는 계층이다

Service Layer (서비스 계층, Service)

역할

  • 요구사항에 맞게 비즈니스 로직을 구현하며 서비스의 핵심 로직이 담겨있다
  • 여러 Repository를 조합해서 하나의 유스케이스를 완성한다
  • 트랜잭션 관리를 한다

사용 어노테이션: @Service

Data Access Layer (데이터 접근 계층, Repository)

  • 데이터를 저장하거나 조회하기 위해 DB에 접근한다
  • CRUD 작업 처리한다

사용 어노테이션: @Repository

 

장점

  1. 유지보수성: 각 계층의 역할이 명확해서 수정이 쉽다
  2. 테스트 용이성: 각 계층을 독립적으로 테스트 가능하다
  3. 확장성: 새로운 기능 추가 시 기존 코드 영향 최소화할 수 있다

 

🔗 참고 자료

반응형