프로그래밍/JAVA Spring

[Spring 스프링] Layered Architecture

hectick 2023. 4. 23. 18:03

 

관심사를 분리하기 위해선 계층형 아키텍처가 쓰일 수 있다. 비슷한 책임들을 가진 것들은 하나의 계층으로 묶이게 되고, 각 계층은 자신의 책임에만 집중하며, 다른 계층과 상호작용한다. 계층형 아키텍처는 프로그램의 규모에 따라 3계층이 될수도 있고, 4계층이 될 수도 있고, 더 많아질 수도 있다.

 

 

4계층 아키텍처를 한번 적용해보자.

 

Presentation Layer 

사용자와 시스템간의 인터페이스를 담당하며, 사용자로부터 요청을 받아서 처리하고 응답을 반환한다.

controller가 해당한다.

 

Business Layer

핵심 비즈니스 로직을 담당하는 계층이다.

service가 해당한다.

 

Persistence Layer

데이터베이스와 상호작용을 하며, 데이터에 대한 영속성을 유지하는 계층이다.

repository, dao가 해당한다.

*영속성: 프로그램이 종료되거나 메모리가 해제되더라도 데이터가 유지되는 것

 

Database Layer

데이터베이스를 의미한다. 

 


 

일반적으로 계층형 아키텍처는 상위계층이 하위계층에 의존하는 구조를 가진다. 반대로 하위계층은 상위계층을 사용할 수 없고, 단순히 상위계층을 지원한다. 각 계층은 그 하위 계층에 대해서만 의존하므로, 특정 계층에 대해 유지보수하거나 확장하기에 좋아진다. 그리고 각 계층에 대해 모듈을 갈아 끼우기도 편해진다.

 

 

계층형 아키텍처에서 각 계층은 닫혀있다. 여기서 '닫혀있다'라는 말의 의미는 요청이 특정 계층에서 다른 계층으로 이동할 때, 그 두 계층 사이에 있는 다른 계층들도 통과해야 함을 의미한다. 물론 사이에 있는 다른 계층을 통과하지 않는 게 더 빠를수도 있다. 하지만 그렇게 된다면 계층간의 결합도가 높아지며 코드를 유지보수하기 불편해진다.

 

예를 들어 Presentation Layer에서 바로  Persistence Layer로 요청이 이동한다고 해보자. 그렇다면 Persistence Layer가 수정되었을 때, PersistenceLayer를 알고 있는 계층들도 영향을 받게 된다. 즉 Business Layer는 당연하고, Presentation Layer도 변경의 영향을 받게 된다. 변경의 영향을 줄이기 위해서 각 계층은 닫혀있어야 하는 것이다. 

 

하지만 때에 따라 특정 계층을 건너뛰고 내려가는게 절실할 수도 있다. 이를 `열려있다`고 한다. 아직은 왜 열려있는 상황이 필요한지 못느끼고 있으므로 생략하겠다.

 

 


 

현재 계층형 아키텍처가 많이 사용되고 있긴 하지만, 애플리케이션이 점점 커지면 불편한점이 생길수도 있다고 한다. 차차 경험하면서 알아가기로 하자~