Spring 입문 (3-Layer Architecture)

KimGwangmin·2026년 9월 7일

3-Layer Architecture

소프트웨어 시스템을 세 개의 논리적 계층으로 분리

분리 설계의 목적은 다음과 같다. 꼭 3-Layer Architecture만의 이야기는 아니고, 디자인패턴의 일반적인 목적과 일맥상통하는 면이 있다.

  1. 관심사의 분리
  2. 유지 보수성 향상
  3. 재사용성 증대
  4. 확장성 개선

3-Tier Architecture라고도 부른다.
각 계층의 명칭도 아래처럼 여러 가지로 불리지만, 근본적으로는 같은 의미이다.

  • Controller-Service-Repository
  • Presentation-Business-Data
  • UI-Application-Persistence

Controller Layer

  • @RestController(혹은 @Controller) 사용
  • 사용자가 애플리케이션과 상호작용하는 UI, 커뮤니케이션
    • HTTP 요청 매핑
    • 요청 파라미터 검증
    • 응답 데이터 변환
    • 예외 처리, 에러 응답

Service Layer

  • @Service 사용
  • 백엔드의 모든 핵심 로직 운영
    • 비즈니스 규칙 구현
    • 데이터 유효성 검증
    • 여러 데이터 소스 조합
    • 트랜잭션 경계 설정

Repository Layer

  • @Repository 사용, 그러나 부모인 JpaRepository가 이미 해당 기능을 갖고 있어 붙이지 않아도 됨
    public interface UserRepository extends JpaRepository<User, Long> {
    			// ...
    }
  • DB와의 상호작용: 실제 데이터를 저장, 가져오는 계층
    • CRUD 연산 구현
    • 쿼리 최적화
    • 데이터 매핑

레이어 간 통신 규칙

  • ✅ 같은 계층 내 컴포넌트 간 통신 가능
  • ✅ 상위->하위 계층으로의 호출 가능
    • 클라이언트에 가까운 쪽이 상위, DB에 가까운 쪽이 하위
  • ❌ 하위->상위 호출이나 계층 건너뛰는 호출 금지
    • Service는 Controller를 호출할 수 없음
    • Controller는 Repository를 직접 호출할 수 없음

DTO (Data Transfer Object)

데이터 전달을 위한 '순수 데이터' 객체
  • JSON 형식의 요청을 코드에서 다루기 위해, Controller에서는 DTO(자바 클래스)로 받음

요청 데이터

{
	"title": "범죄도시11"
}

DTO

@Getter
public class CreateMovieRequest {
    private String title;
}

컨트롤러

@RestController
public class MovieController {
    @PostMapping("/movies")
    public void createMovie(@RequestBody CreateMovieRequest request) {
        // ...
    }
}

0개의 댓글