SW 아키텍처 패턴 알아보기 #2 - 레이어드 아키텍처

강모민·2023년 8월 9일
1

아키텍처

목록 보기
2/3
post-thumbnail

레이어드 아키텍처와 MVC 패턴을 공부하면서 진짜 머리가 너무 아팠어서 정리해봤다.

레이어드 아키텍처란?

레이어드 아키텍처, Multi Tier architecture 라고도 불린다.

레이어드 아키텍처의 핵심은 관심사 분리이다.
즉, 각 레이어가 독립적으로 존재하여 레이어 서로에게 영향을 줄 일이 없는 것이다.

레이어드 아키텍처의 특징

  • 일반적으로 프레젠테이션, 비즈니스, 퍼시스턴스, 데이터베이스의 4개 표준 레이어로 구성한다.
  • 내부 컴포넌트는 논리적으로 수평한 레이어들로 구성된다.

layered architecture


레이어드 아키텍처 장점 - 독립적 레이어

레이어드 아키텍처의 장점은 서로의 영역에 침범할 일이 없다는 것이다.
각 레이어끼리의 접근이 불가능하기 때문에 하위 레이어에만 접근하게 된다.
즉 Service에서 Service를, Controller에서 Controller를 접근할 수 없는 것이다.


레이어드 아키텍처 단점 - 도메인 변경 어려움

도메인끼리 묶이기 때문에 도메인의 변경이 힘들다.
만약 User라는 도메인을 변경하면 Presentation 레이어, Persistence 레이어, Business 레이어들을 전부 바꿔야한다.

언제 써야할까?

레이어드 아키텍처는 작고 간단한 애플리케이션에 적합하다.
복잡하지 않으며 초반 설계의 난이도가 쉬운편에 속하기 때문이다.

다만 규모가 커질 수록 유지 보수성, 민첩성, 시험성, 배포성 같은 특성이 점점 나빠진다.

또 DDD(도메인 주도 설계)를 할 땐 적합하다 할 수 없다.
도메인의 변경 자체가 어렵기 때문에 도메인을 위주로 설계를 해야하는 DDD와는 상성이 좋지 않다.

레이어드 아키텍처의 파일 구조는 아래와 같이 구성될 수 있다.

├── Main.java
├── model
│   ├── ModelA.java
│   └── ModelB.java
├── router
│   ├── RouterA.java
│   └── RouterB.java
└── services
    ├── ServiceA.java
    └── ServiceB.java

싱크홀 안티 패턴 - 주의

싱크홀 패턴이란 각 레이어를 통과할 때 아무 비즈니스 로직도 없이 통과하는 것을 말한다.
비즈니스 로직 없이 통과하는 레이어는 그저 메모리를 잡아먹을 뿐인 작업이기 때문이다.


MVC 패턴과의 차이가 뭐야?

파일 구조를 보면 MVC 패턴이 보일 것이다.
model은 Domain(Entity), router는 controller, service는 service로 MVC 패턴과 레이어드 아키텍처의 차이점을 이해하기 힘들 수 있다.

핵심만 말하자면 디자인 패턴과 아키텍처의 차이이다.

  • 아키텍처는 파일 트리나 패턴을 통해 각각의 파일들을 관리하기 편하게 나눠준다.
  • 디자인 패턴은 각 파일 내에서 일관성 있고 좋은 코드를 짤 수 있게 해준다.

말 드대로 코드파일 트리의 차이점이라고 생각하면 좋을 것 같다.

보통 Spring을 배울 때 MVC 패턴으로 배우는데 이 때 폴더를 나누는 작업에 알게 모르게 레이어드 아키텍처가 적용되어있는 경우도 많다.

또한 레이어드 아키텍처라고 무조건 위와 같이 Controller, Service, Domain 으로 나눠야 하는게 아니다. 아키텍처 설계자의 스타일에 따라 구조는 언제나 바뀔 수 있다.

profile
spring을 메인으로 express, go언어로 개발하는 백엔드 강모민입니다.

0개의 댓글