레이어드 아키텍처(Layered Architecture)는 소프트웨어를 관심사에 따라 계층(Layer)으로 나누는 아키텍처 스타일이다. 각 계층은 특정한 역할을 맡고, 상위 계층은 하위 계층에만 의존한다. 이 방식은 유지보수성, 테스트 용이성, 재사용성을 높이는 데 목적이 있다.
🧱 대표적인 4계층 구조
1. Presentation Layer (프레젠테이션/뷰/웹 계층)
- 사용자와 상호작용하는 계층 (웹 화면, API, 모바일 UI 등)
- 요청을 받아 컨트롤러가 처리
- 사용자 입력을 처리하고 결과를 표시
✅ 예: Controller, HTML/Thymeleaf, REST API
2. Application Layer (애플리케이션/서비스 계층)
- 비즈니스 로직을 조합하여 기능을 구현하는 계층
- 트랜잭션 관리, 흐름 제어 담당
- 도메인 로직은 호출만 하고 직접 구현하지 않음
✅ 예: Service, UseCase 클래스
3. Domain Layer (도메인/비즈니스 계층)
- 핵심 비즈니스 규칙과 도메인 모델을 포함
- 순수한 자바 객체 (POJO)로 구성됨
- 외부 기술에 의존하지 않음
✅ 예: Order, Member, Payment, DomainService, Entity, ValueObject
4. Infrastructure Layer (인프라/데이터 계층)
- 외부 시스템과의 연동 담당 (DB, 파일 시스템, 메시지큐, 이메일 등)
- Repository 구현, 외부 API 호출
- 도메인/애플리케이션 계층에 기술적 세부사항을 숨김
✅ 예: JPA Repository, RestTemplate, KafkaConsumer, EmailSender
🔄 계층 간 의존 관계
- 위 → 아래 방향으로만 의존해야 합니다.
- 예를 들어, Presentation → Application → Domain → Infrastructure 순입니다.
- 의존 역전 원칙(DIP)을 적용하면 더 유연하게 구현할 수 있음
✅ 장점
- 관심사 분리 (SoC)
- 유지보수와 테스트가 용이함
- 재사용 가능성이 높음
⚠️ 단점
- 계층이 깊어질수록 호출이 복잡해짐
- 단순한 애플리케이션에 오버엔지니어링이 될 수 있음
- 성능상 병목이 될 수도 있음
📌 Spring Boot에서의 예시
@Controller // Presentation Layer
public class OrderController { }
@Service // Application Layer
public class OrderService { }
@Entity // Domain Layer
public class Order { }
@Repository // Infrastructure Layer
public interface OrderRepository extends JpaRepository<Order, Long> { }
'개발 > Java & Kotlin' 카테고리의 다른 글
[JPA] Spring Data JPA에서 새로운 Entity인지 판단하는 방법 (2) (73) | 2025.07.01 |
---|---|
[Spring] OSIV(Open Session In View) 옵션 (67) | 2025.06.30 |
[Gradle] Gradle을 알아보자! (78) | 2025.05.16 |
[Spring] 트랜잭션 롤백하는 예외 (76) | 2025.05.12 |
[Java] Null Object Pattern 공부 (29) | 2025.05.04 |