개발을 잘하는 방법은 다양하겠지만, 개발을 체계적으로 하는 방법중 하나는 아키텍처를 학습하고 적용해보는 것이 있습니다. 다음에 소개해드릴 글에서는 N레이어, DDD, 육각형, 오니언, 클린 아키텍처같은 인기있는 아키텍처를 소개하고 역사와 사용법, 차이점을 이해할 수 있도록 도와줍니다.
✅ 2002년 - N레이어드 아키텍처
N레이어드아키텍처는 마틴파울러가 "Patterns of Enterprise Application Architecture"에서 설명한 아키텍처입니다. 코드를 레이어별로 격리하여 코드의 중복을 제거하고 구조화하는데 도움을 주었습니다. 대부분은 UI, 비즈니스로직, 데이터액세스 3가지 레이어로 구성됩니다.
✅ 2003년 - 도메인 주도 설계(DDD)
흔히 DDD로 불리는 도메인 주도 설계는 에릭에반스가 자신의 책 "도메인 주도 설계 소프트웨어의 복잡성을 다루는 지혜"라는 책에서 다루었습니다. DDD에서는 기존 레이어드 아키텍처의 컨트롤러에 너무 많은 로직이 있다고 보고 이를 Application이라는 새로운 레이어로 이동시켰습니다. N레이어드 아키텍처와 많이 구분되는 차별점은 없었습니다. N레이어드 아키텍처에 비해서는 이름 변경 + 추가적인 레이어하나가 전부입니다. DDD에서는 4단계의 레이어(프리젠테이션레이어, 어플리케이션 레이어, 도메인 레이어, 인프라스트럭처 레이어)를 정의하였고 엔티티와 UI를 명확하게 구분하였습니다.
✅ 2005년 - 육각형 아키텍처 ( Hexagon -Ports and Adapters)
DI(의존성 주입)의 발견으로 개발자는 의존성의 방향을 원하는대로 지정할 수 있게 되었습니다. 이는 비즈니스로직이 데이터 액세스 레이어를 참조하지 않도록 할 수 있다는 얘기입니다. 육각형 아키텍처에서 인프라스트럭처 모듈은 추상화(인터페이스)와 구현으로 나뉘어졌습니다. 추상화는 포트라고 불리게 되었습니다. 구현은 인프라스트럭쳐 레이어에 있으며 어댑터라고 부릅니다. 육각형 아키텍처에 이르러서야 의존성을 많이 끊어낼 수 있게 되었습니다. DB를 변경하고 싶으면 어댑터를 구현하면 됩니다. 비즈니스로직이 시스템의 중심에 있는 아키텍처입니다.
✅ 2006년 - 클린 아키텍처
언클밥(로버트 C. 마틴)이 2006년에 "Clean Architecture"라는 논문을 발표했습니다. 이 논문은 DDD와 육각형 아키텍처의 확장으로 보입니다. 기존의 레이어들을 더욱 더 작은 단위로 나누었습니다. 그래서 기존의 레이어보다 더 많은 레이어를 가집니다. 두번째로는 DI를 더 적극적으로 적용했습니다. 의존성은 항상 내부로만 향하고 외부 기술이나 구현 세부사항에 의존하는 것을 피해야 합니다. 이를 통해 시스템을 보다 유연하고 테스트하기 쉽게 만들 수 있습니다. 클린 아키텍처는 다음과 같은 구조를 가집니다.
- Frameworks & Drivers: 프레임워크나 외부 인터페이스와 상호작용합니다.
- Interface Adapters: 외부 인터페이스를 애플리케이션 내부에 맞게 변환합니다.
- Use Cases: 비즈니스 규칙을 실행합니다.
- Entities: 비즈니스 규칙과 데이터를 포함하는 도메인 개체입니다.
본문에 나온 아키텍처에 대해 간략하게 설명드렸습니다. 자세한 내용은 링크를 확인해보세요. 저자분이 굉장히 재미있게 글을 적어 두셨습니다.
에릭에반스와 언클밥의 책은 한국어로도 번역되어 있으니 관심있으신분은 확인해보세요.
📕 도메인 주도 설계 ( https://www.yes24.com/Product/Goods/5312881 )
📗 클린 아키텍처 ( https://www.yes24.com/Product/Goods/77283734 )
https://medium.com/@iamprovidence/backend-side-architecture-evolution-n-layered-ddd-hexagon-onion-clean-architecture-643d72444ce4