-
[ Hexagonal Architecture ] 헥사고날 아키텍처 이해하기공부하기/아키텍처 2023. 2. 16. 19:35
헥사고날(Hexagonal) 아키텍처는 소프트웨어 디자인 패턴 중 하나로, 소프트웨어 시스템을 구성하는 다양한 컴포넌트들을 격리시키는 것을 목적으로 합니다. 이 아키텍처는 포트와 어댑터(Port and Adapter) 아키텍처로도 알려져 있습니다.
헥사고날 아키텍처의 핵심 개념은 "포트(Port)"와 "어댑터(Adapter)"입니다.
- 포트: 시스템 외부와의 인터페이스를 정의
- 어댑터: 포트를 구현
포트는 시스템의 기능을 외부에 노출하고, 어댑터는 그 기능을 구현합니다.
헥사고날 아키텍처는 이러한 포트와 어댑터를 중심으로, 비즈니스 로직과 외부 시스템을 분리합니다. 이로 인해 시스템은 더욱
모듈화되고, 유연성과 유지보수성이 높아집니다. 또한, 외부 시스템의 변경에 대한 영향을 최소화할 수 있습니다.
아키텍처 그림으로 보기
간단하게 그린 아키텍처 - in bound port : 외부 영역이 내부 영역을 사용하기 위해 노출된 포트
- out bound port : 내부 영역이 외부 영역을 사용하기 위한 포트
유저 로그인 유스케이스 예제
- 컨트롤러는 AuthService를 의존하지 않고 AuthService의 인터페이스( in bound port )를 의존합니다.
- AuthServiceImpl는 Users 인터페이스를 의존하여 구현체인 UserRepository에 접근합니다.
헥사고날 아키텍처의 장점
- 유연성: 외부 시스템과의 결합을 낮추고 비즈니스 로직을 중심으로 구현하기 때문에, 시스템 구조가 유연해집니다. 새로운 기능을 추가하거나 변경할 때, 다른 부분에 영향을 덜 주며, 확장성이 높아집니다.
- 테스트 용이성: 포트와 어댑터가 분리되어 있어서, 테스트하기 쉽습니다. 단위 테스트, 통합 테스트, 시스템 테스트 등을 쉽게 수행할 수 있습니다.
- 유지보수성: 비즈니스 로직과 외부 시스템이 분리되어 있으므로, 시스템의 유지보수가 용이합니다. 예를 들어, 외부 시스템의 변경에 따른 영향을 최소화하고, 유지보수 비용을 낮출 수 있습니다.
- 모듈화: 포트와 어댑터로 시스템을 모듈화하여, 코드의 재사용성을 높일 수 있습니다.
헥사고날 아키텍처 단점
- 복잡성: 포트와 어댑터로 시스템을 분리하는 것은 설계 복잡성을 증가시킬 수 있습니다.
- 개발 시간: 기능을 구현하기 위해 포트와 어댑터를 설계하고 구현해야 하므로, 개발 시간이 늘어날 수 있습니다.
- 러닝 커브: 개발자들이 포트와 어댑터의 개념을 익혀야 하므로, 러닝 커브가 존재할 수 있습니다.
- 오버 엔지니어링: 일부 경우에는 헥사고날 아키텍처를 적용하기에 오버 엔지니어링일 수 있습니다. 따라서, 프로젝트의 규모와 복잡도에 따라 적절하게 적용할 필요가 있습니다.
'공부하기 > 아키텍처' 카테고리의 다른 글
[ Layered Architecture ] 레이어드 아키텍처 이해하기 (0) 2023.02.16