아키텍처 Architecture?
- 사전적 의미 : 컴퓨터 시스템의 설계 및 구조
시스템 구성 및 동작 원리를 나타내는 것
구성 요소 간의 관계 및 시스템 외부 환경과의 관계를 묘사하는 것
시스템 구성 요소에 대한 설계 및 구현을 지원하는 수준을 기술하는 것
요구 사양 및 시스템 수명 주기를 고려하는 것
시스템의 전체적인 최적화를 목표로 하는 것
→ 하나의, 서비스가 어떻게 구성되며 어떻게 동작이 된다 를 표현하는 것
https://www.osckorea.com/post/bigaebaljado-swibge-ihaehaneun-akitegceoyi-gaenyeom
레이어드 아키텍처?
시스템을 여러 계층으로 나누어 각 계층이 특정 역할을 담당하도록 만든 구조
애플리케이션의 경우
- 프레젠테이션(constroller), 비즈니스(serviec), 퍼시스턴스(repository) 계층으로 나눠서 관리하는 방법
- 레이어드 아키텍처 패턴에서는 각 계층 간의 의존성이 중요한 규칙으로 작용
레이어드 아키텍처 패턴의 의존성 규칙
▶ 단방향 의존성 규칙 = 상위 계층은 하위 계층에만 의존할 수 있고, 하위 계층은 상위 계층에 의존해서는 안 된다는 원칙
의존성 관계
[상위 계층] (constroller) ▶▶ (serviec) ▶▶ (repository) [ 하위 계층]
- Constroller 는 serviec 에만 의존한다.
- constroller 는 serviec를 호출 할 수 있다.
- constroller 는 repository 를 호출 할 수 없다.
- serviec 계층의 변화는 constroller 계층에 영향을 미칠 수도 있다.
- Serviec 는 repository 에만 의존한다.
- Serviec 는 Repository 를 호출 할 수 있다.
- Serviec 는 Constroller 를 호출 할 수 없다.
각 계층의 역할
Controller
- Client 로 부터의 요청을 서비스에 전달하는 역할
- 서비스로부터 받은 요청에 대한 응답을 client 에게 전달하는 역할
- Client 의 요청을 이해하고 그에 대한 응답을 하는 계층
Serviec
- 컨틀롤러에서 받은 요청의 유효성을 검증하는 역할
- 검증된 요청을 수행하기 위한 비즈니스 로직을 수행하는 역할
- 받은 요청을 수행하기 위한 데이터를 Repository 에 요청 및 데이터 검증
- 검증된 데이터를 이용하여 요청에 맞게 데이터를 가공
- 요청을 수행하기 위한 모든 메세드가 모인 계층
Repository
- 데이터베이스에 대한 접근을 추상화를 제공하는 역할
- 사용자 어제 구매한 식품 목록을 조회하기 위해 sql 문을 작성하는대신 productRepository.findPrdoductByDate() 와 같은 코드를 제공하는 것이 추상화를 제공하는 것
- 데이터베이스와의 데이터 CRUD(Create, Read, Update, Delete) 작업을 담당하는 계층
레이어드 아키텍처 패턴을 사용하는 이유
- 코드의 유지 보수성과 확장성이 크게 향상한다.
- 코드의 재사용성이 커진다.
- 각 레이어가 독립적으로 변경될 수 있다.