레이어드 아키텍처

황인우·2024년 11월 26일

앱, 컨트롤러, 서비스, 리포지터리의 계층을 가진 레이어드 아키텍처에 대해 공부하였다.


전체 소프트웨어를 의미한다.

식당으로 예시를 들면 고객, 주문의 역할이라고 할 수 있다.

컨트롤러

앱 아래에서 요청과 응답을 담당한다. 서비스에 요청을 보내고 응답을 받는다.

식당에서 웨이터에 해당한다. 요리 레시피를 알 필요가 없고 알 수 없다.

서비스

컨트롤러에서 넘어온 요청을 비즈니스 로직에 따라 처리하고 응답한다. 비즈니스 로직에 필요한 데이터들을 리포지터리에게서 받는다.

식당에서 요리사에 해당한다. 재료 담당이 재료를 어느 창고에서 가져오는지 알 필요가 없고 알 수도 없다.

리포지터리

서비스가 비즈니스 로직을 처리하는데 필요한 데이터들을 데이터베이스와 상호작용하며 넘겨준다.

식당에서 재료 담당 직원에 해당한다.


결합도와 응집도

계층 간의 관계는 밀접해야 한다. 같은 기능을 가진 모듈끼리 연결되어야 하고 다른 기능을 가진 모듈은 따로 떨어져야 하는데 이를 응집도라고 하고 높아야 한다. 하지만 상호작용은 최소로 해야 한다. 한 모듈이 변화하면 연관된 다른 모듈들도 수정해야 하기에 모듈간의 결합도는 낮게 유지해야한다.


상속과 인터페이스

식당의 예시에서 웨이터, 요리사나 재료 담당 직원이 바뀌더라도 전체 흐름과 상호작용에 많은 수정이 있으면 안된다. 그렇기 위해 각 역할별로 특정 약속들이 필요한데 이를 상속과 인터페이스로 처리할 수 있다.

메소드들을 abstract로 만들어서 상속과 인터페이스를 만들면, 예를 들어 재료 담당이 재료를 가지고 오는 재료 창고가 우리 식당에서 옆 식당으로 바뀌더라도 쉽게 바뀔 수 있는 것이다.

창고 리포지토리 = new 우리식당창고;
// 변경
창고 리포지토리 = new 옆식당창고;

0개의 댓글