Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- kafka connect #debizium #transform
- 큐
- 새로운 방
- 토마토(고)
- 오류교정
- Floyd
- 암스트롱 수
- 코드그라운드
- kafka #consumer #autoStartup
- kafka #ackmode #manual #acknowledge
- 알고리즘
- 새로운방
- 1045
- 2613
- sql #오라클 #oracle #sequence #foreach #insert #mybatis
- 1037
- 태그를 입력해 주세요.
- 스택
- hexagonal architecture #layer architecture #아키텍쳐 #헥사고날
- 페이지 전환
- Queue
- 1108
- JAVA #필수값
- vue
- maven #메이븐 #빌드 #build #lifecycle
- Floyd 알고리즘
- 최단거리
- 페이지전환
- 정올
- 김씨만행복한세상
Archives
- Today
- Total
별집사의 IT세상
Hexagonal / Layered Architecture 본문
반응형
헥사고날 아키텍처라는 구조를 기존의 계층형 아키텍처와 비교하여 이해해보자.
Layered Architecture(계층형 아키텍쳐)
전통적으로 많이 사용되고 있는 아키텍처이고, 소스코드의 역할에 따라 계층으로 분리한 아키텍처이다. 분리된 계층의 숫자에 따라서 N-Tier-Architecture라고도 하며 일반적으로는 4개의 레이더(Presentation, Business, Persistence, Database)로 구성되어 있다.
- Presentation Layer
- 사용자 인터페이스와 브라우저 통신을 담당
- Business Layer
- 비즈니스 로직 수행 및 애플리케이션의 핵심 기능 구현
- Persistence Layer
- 데이터의 영속성을 관리하고, 데이터베이스와의 상호작용을 담당
- Database Layer
- 실제 데이터베이스가 위치하는 계층
장점
- 모듈성과 재사용성 향상 - 각 계층이 특정 기능에 집중하므로, 재사용성이 용이하다.
- 테스트와 디버깅에 용이 - 각 모듈이 분리되므로 단위 테스트 수행에 용이하다.
- 관심사의 분리로 인해 유지보수성이 향상 - 변경 필요 시 특정 계층만 수정할 수 있다.
- 구현이 비교적 간단하고 대중적으로 알려져있는 패턴 - 직관적이고 이해하기 쉬워 쉽게 적응이 가능하다.
단점
- 성능 오버헤드의 가능성 - 계층 간 통신으로 이해 데이터가 전송되면서 성능 저하 가능성이 존재한다.
- 대규모 애플리케이션 확장성 제한 - 애플리케이션이 커질수록 계층이 비해져 시스템의 복잡성이 증가 할 수 있다.
- 계층 간 의존성으로 인해 변경의 어려움 - 수직적인 의존관계로 인해 계층의 변경이 타 계층에 영향을 미칠 수 있다.
Hexagonal Architecture(헥사고날 아키텍쳐)
애플리케이션의 핵심 비즈니스 로직을 외부 요소로부터 격리시키는 것을 목표로 한다. 주요 특징은 다음과 같다.
- 포트와 어댑터
- 포트 : 애플리케이션 코어와 외부 세계 사이의 인터페이스이다.
- 어댑터 : 포트를 구현하여 실제 외부 시스템과의 통신을 담당한다.
- 애플리케이션 코어
- 비즈니스 로직이 위치하며, 외부 의존성 없이 독립적으로 동작이 가능하다.
- 내부 포트 / 외부 포트
- 내부 포트 : 애플리케이션 외부 요청에 의해 동작하는 포트
- 외부 포트 : 애플리케이션이 외부 시스템에 의해 요청을 보내는 포트
장점
- 유연성과 확장성 - 시스템 변경 시 핵심 비즈니스 로직에 영향을 주지 않는다. 실제 계층형에 비해 제일 좋다고 생각되는 점이다.
- 테스트 용이성 - 각 로직을 독립적으로 테스트 할 수 있어 품질 향상에 도움이 된다.
- 유지보수성 - 책임이 명확하게 분리되어있어, 코드 이해 및 수정이 용이하다.
- 도메인 중심 설계 - 도메인 주도 설계(DDD)와 같은 접근 방식을 쉽게 적용 할 수 있다.
단점
- 구현 복잡성 - 일반적으로 계층형에 익숙해져있는 사람이 많아, 포트와 어댑터를 구성하고 관리하는데 복잡성이 발생할수 있다.
- 초기 개발 시간 - 마찬가지로 초기에 아키텍처 구축하는데 많은 시간과 노력이 필요할 수 있다. 실제로 프로젝트를 진행해보니 어느순간 계층형을 따라가고 있는 경우가 많아, 초기 아키텍처 확립에 많은 회의와 공수가 들어갔고, 변경이 일어났다.
- 코드량 증가 - 인터페이스와 어댑터로 인해 전체 코드량이 증가할 수 있다.
결론
Hexagonal architecture는 이해하기 엄청 어렵지만, 잘 사용하면 굉장히 효율적인 개발이 가능하다고 느꼈다. 하지만 개발 진행 도중 계층형에 익숙해져있어 진행이 막힌 경우가 많아, 좀 더 사용해보며 익숙해질 필요가 있고, 계층형과 적절하게 섞어서 사용할 수 있으면 좀 더 좋은 프로젝트를 개발 할 수 있을 것 같다.
반응형
Comments