레이어드 아키텍처란 무엇인가요?

레이어드 아키텍처(Layered Architecture) 란 소프트웨어를 관심사별로 여러 계층으로 나누어 수직적으로 배열한 것을 의미합니다.

시스템을 서로 다른 역할을 하는 층(Layer)으로 쪼개서 바로 아래층에만 의존하게 만드는 구조

Presentation Layer(표현계층)
- 사용자 인터페이스(UI)
- 사용자의 요청을 받고 응답을 보여주는 곳
- 웹 화면, REST API 컨트롤러
  |
  v
Business Layer(비즈니스 계층 / 서비스 계층)
- 애플리케이션 핵심 로직(비즈니스 로직) 수행
  |
  v
Persistence Layer(영속성 계층)
- 데이터베이스에 접근
- 데이터를 저장하고 불러오는 로직만 존재
- DAO, Repository
  |
  v
Database Layer(데이터베이스 계층)
- 실제 데이터가 저장되는 DBMS
- 데이터 보관

장점

  • 관심사의 분리
  • 유지보수 용이성
  • 교체 가능성

특정 레이어만 독립적으로 확장하거나 변경할 수 있으며, 특정 레이어만 별도로 테스트 환경을 구축하여 테스트 할 수 있음

싱크홀 안티패턴(Architecture Sinkhole Anti-pattern)

요청이 한 레이어에서 다른 레이어로 이동할 때, 각 레이어가 아무 로직도 처리하지 않고 그대로 다음 레이어로 넘겨버리는 안티패턴

불필요하게 요청을 전달받고 다시 전달만 하는 중간코드로 인해 CPU 및 메모리 낭비