📌 레이어드 아키텍처
프로젝트를 패키지별로 구성할 때 Client -> Controller -> Service -> Repository -> DB 방식으로 구조화할 수 있다.
각각을 계층별로 분리했다고 하여 레이어드 아키텍처라고 불린다.
이렇게 계층별로 나눈 구조를 사용하는 이유는, 각각의 계층별로 핵식점인 역할을 담당하도록 해서, 자신이 담당한 역할에 집중할 수 있도록 하기 위함이다.
그렇다면 클라이언트와 DB 사이의 3계층에서는 어떠한 기능과 역할을 수행하는지 알아보자.
Controller
컨트롤러 계층에 있는 클래스들은 Client(사용자)의 요청을 받고 응답해주는 역할을 수행한다.
사용자가 "나 핸드폰을 구매하고 싶어"라고 요청을 보냈다면, 컨트롤러 계층은 서비스 계층에 구현되어 있는 '핸드폰 구매하기'로직을 사용만 하면 된다. 그리고 사용자에게 구매가 완료된 정보를 응답해 준다.
Service
서비스 계층에 있는 클래스들은 프로젝트의 핵심적인 기능을 구현한다.
핸드폰 판매 프로젝트라고 생각해 보면, '핸드폰을 고객에게 판매' 하거나, '고객이 핸드폰을 구입' 하거나, '고객이 핸드폰 전원을 켠다' 거나 하는 모든 핵심적인 동작은 서비스 계층에서 구현된다.
이 과정에서 필요한 데이터는 모두 레포지토리의 힘을 빌려서 조작할 수 있다. 레포지토리에서 데이터베이스의 조작을 담당하는 기능을 구현했다면, 서비스는 레포지토리의 기능을 사용만 하면 되는 것이다.
Repository
서비스 계층에서 언급했던 것처럼 레포지토리 계층에 있는 클래스들은 데이터베이스에 접근해서 데이터를 조작하는 기능을 구현한다. 데이터베이스에 있는 데이터를 조회하거나, 수정, 삭제등의 작업은 모두 레포지토리에 있는 클래스들이 담당한다.
3계층을 보면 Client가 요청을 했을 때 Controller 계층은 Service 계층을 이용하고 있고, Service 계층은 Repository 계층을 이용하고있고, Repository는 DB를 이용한다. 그래서 레이어드 아키텍처는 단방향 참조를 가진다 라는 특징이 있다.
레이어드 아키텍처를 알아보았는데, 아키텍처는 아키텍처일 뿐이지 반드시 이렇게 해야하는 것은 아니다. 필요한 구조에 맞춰서 적절한 구조를 선택하고 사용하면 된다!
'Spring' 카테고리의 다른 글
[Spring] HTTP method (0) | 2023.11.06 |
---|---|
[Spring] 스프링 빈과 의존성 주입 해보기 (0) | 2023.11.03 |
[Spring] Controller 구현하기 (0) | 2023.11.02 |
[Spring] 의존성 주입과 제어의 역전 (0) | 2023.10.30 |
[네트워크] API와 REST API (0) | 2023.10.27 |