T_era

Layered Architecture (계층형 아키텍처) 본문

Programing/Spring

Layered Architecture (계층형 아키텍처)

블스뜸 2025. 5. 8. 12:08

Layered Architecture (계층형 아키텍처)

Layered Architecture는 애플리케이션을 Presentation Layer, Business Layer (Service Layer), Data Access Layer (Repository Layer) 세 가지 주요 계층으로 분리하여 구조화하는 방식이다. 각 계층은 특정 책임을 가지며, 계층 간 명확한 역할 분담을 통해 코드 재사용성, 유지보수성, 확장성을 확보한다.

MVC 패턴의 한계

기존 MVC 패턴에서 Controller는 요청 처리, 예외 처리, View Template 또는 Data 응답, 비즈니스 로직 처리, DB 상호작용 등 다양한 역할을 수행하여 책임이 과중해진다. 이는 유지보수 어려움, 코드 재사용성 저하 등의 문제점을 야기한다.

Layered Architecture 구조

  1. Presentation Layer (표현 계층)
    • 사용자의 요청을 수신하고 응답을 반환하는 역할을 수행한다.
    • 화면 응답 또는 API 데이터 응답을 처리한다.
    • Spring MVC의 Controller가 해당된다.
  2. Business Layer (Service Layer, 비즈니스 계층)
    • 비즈니스 로직을 수행한다.
    • Presentation Layer로부터 요청을 해석하여 Data Access Layer에 데이터 요청을 전달한다.
    • 통상적으로 하나의 비즈니스 로직 처리는 하나의 트랜잭션으로 관리된다.
    • Spring의 Service 컴포넌트 (@Service 어노테이션 사용)가 해당된다.
  3. Data Access Layer (Repository Layer, 데이터 접근 계층)
    • 데이터베이스와 연동되어 실제 데이터를 관리한다.
    • 데이터베이스 연결 관리 및 CRUD 작업을 처리한다.
    • Spring Data JPA의 Repository 인터페이스 또는 @Repository 어노테이션 적용 컴포넌트가 해당된다. 과거 DAO (Data Access Object) 용어 사용 이력이 있다.

용어 설명

  • DTO (Data Transfer Object): 계층 간 데이터 전달을 위해 사용되는 객체이다. 불변성을 지향하며, 단순 데이터 운반 역할을 수행한다.
  • Model:
    • Entity: JPA에서 데이터베이스 테이블과 매핑되는 객체로서, 데이터베이스 Row 정보를 담고 영속성을 관리한다. (JPA 관련 학습에서 상세히 다룬다.)
    • View 전달 Model: Spring MVC에서 Controller가 View에 데이터 전달 시 사용하는 Map 형태 객체를 의미한다. (DTO, Entity와 구분 필요)
  • DAO (Data Access Object): 과거 데이터베이스 접근 로직 담당 객체를 지칭하는 용어이다. 현재 Spring Data JPA Repository 또는 @Repository 적용 구현체가 해당 역할을 수행하는 경우가 많다.

Layered Architecture 적용

  • Controller (Presentation Layer)
    • 클라이언트 요청 수신 역할을 수행한다.
    • 요청 처리를 Service Layer에 전달한다.
    • Service Layer 처리 결과를 클라이언트에 응답한다.
    • 사용 어노테이션: @Controller, @RestController
  • Service (Business Layer)
    • 사용자 요청 사항에 대한 핵심 비즈니스 로직을 처리한다.
    • DB 상호작용 필요 시 Repository Layer에 데이터 접근을 요청한다.
    • 사용 어노테이션: @Service
  • Repository (Data Access Layer)
    • 실제 데이터베이스와 상호작용하여 데이터를 관리한다.
    • 데이터베이스 Connection 연결 및 해제 작업을 처리한다.
    • CRUD 작업을 수행한다.
    • 사용 어노테이션: @Repository (Spring Data JPA Repository 사용 시 별도 어노테이션 없을 수 있다.)
  • DTO (Data Transfer Object)
    • 각 계층 간 데이터 전달에 사용된다.
    • 요청 데이터 담는 객체는 통상 RequestDto로 명명한다.
    • 응답 데이터 담는 객체는 통상 ResponseDto로 명명한다.

Layered Architecture 적용을 통해 각 계층은 자신의 책임에 집중하고, 다른 계층과는 인터페이스를 통해 느슨하게 결합된다. 이는 코드 가독성, 유지보수성, 테스트 용이성을 향상시키고, 변화에 유연하게 대처 가능한 구조를 구축한다.