오늘의 키워드
아키텍처, 클린아키텍처, 핵사고날 아키텍처, 어댑터, 포트
아키텍처는 우리가 코드를 작성할 때, 그 코드 구조를 어떻게 할지를 의미한다.
클린 아키텍처
아키텍처 중 유명한 것이 클린 아키텍처가 있다.
클린 아키텍처의 핵심 중 하나는 엔티티, 유스 케이스라고 하는 웹 애플리케이션 통해서 실현하고자 하는 비즈니스의 로직이 담겨 있는 부분이 애플리케이션의 실제 핵심이고, 그 밖을 감싸고 있는 controller나, gateway, presenter, 그 밖에 있는 디바이스들은 기술일뿐, 우리 비즈니스의 로직을 담고 있는 건 아니기 때문에 개발할 때 use cases에 주안점을 두고, 외부의 구체적인 기술로부터 영향을 받는 것을 최소화해야 한다라는 철학 안에 설계된 아키텍처다.
핵사고날 아키텍처
핵사고날 아키텍처는 포트라는 개념, 그리고 어댑터, 유스케이스, 엔티티 부분은 비즈니스 핵심이고,
그 외부 기술들이 핵사고날 육각형 밖에 존재하는 구체 기술들은 나중에 언제라도 갈아 끼울 수 있는 방식을 유지해야 한다라는 게 이제 기본 틀이다.
애플리케이션 코어를 작성하는데 집중하고 이것을 우선적으로 생각해서 개발을 해야 된다는 게 핵사고날아키텍처가 지향하는 바다.
도메인이라고 하는 가장 핵심적인 우리 비즈니스의 가장 핵심적인 로직이 있고, 도메인을 사용해서 요구 사항들을 처리할 수 있도록 도와주는 애플리케이션이라고 하는 영역이 있다.
애플리케이션과 도메인이 비즈니스 핵심 로직이고, 이들이 어떤 포트를 통해서 외부 기술과 소통하는 식이다.
📌 어댑터: 여러 가지 DB, 입력을 받기 위해 활용되는 HTTP 기술들, 외부 기술들이 구체 기술이다.
📌 Driving Adapter(=프리머리 어댑터): Incoming Port 를 통해 비즈니스 로직을 실행하는 기술의 주체(ex HttpController)
📌 Driven Adapter: 외부 DB, 외부 큐에 메시지를 전송, 다른 서버에 통신으로 새로운 어떤 사항을 알린다는지 등의 방향이 반대 방향인 어떤 동작을 실행하는 구체 기술들의 영역(ex. UserRepositoryMySQL)
포트
📌 Incoming Port: 비즈니스 핵심 로직을 실행하는 주체가 되는 것들이 인커밍 포트의 규약에 맞게 로직을 실행하게 된다.(ex. (Interface) SignUpService)
📌 Outgoing Port: 드라이븐 어뎁터들을 실행 (ex. (Interface)UserRepository)
가져다 쓰는 구체 기술들이 바뀌었다고 해서 핵심 로직들이 변경되는 것을 최소화 해야한다는 철학이다.
- 헥사고날 아키텍처는 Domain Driven Design에 친화적인 아키텍처로, 적용하게 되면, 사용할 기술(프레임워크, DB 등) 선택 이전에 애플리케이션 코어부터 먼저 개발하는 것이 자연스러워진다.
- 아키텍처를 적용할지에 대한 팀 내 합의가 없거나 이미 아키텍처를 정했는데 자꾸 아키텍처를 위반하게 되면 코드의 가독성, 유지보수성이 급감한다.(아키텍처를 위반하는 지름길을 만들거라면 그 필요성을 공유 및 기록해야 함)
'TIL' 카테고리의 다른 글
[TIL] 2025.03.05 B트리 (0) | 2025.03.05 |
---|---|
[TIL] 2025.03.04 옵저버(Observer) 패턴 (0) | 2025.03.04 |
[TIL] 2025.02.27 DDD (0) | 2025.02.27 |
[TIL] 2025.02.26 프로젝트 회고 (0) | 2025.02.26 |
[TIL] 2025.02.25 controller 분기처리 (0) | 2025.02.26 |