Sprig boot MSA 과정 수강 중 Hexagonal Architecture가 MSA에 많이 사용된다고 하여 공부해 보았다.
아키텍처란 비즈니스 요구 사항을 만족하는 시스템을 구축하기 위한 체계적인 구조를 정의한 것.
소프트웨어 응용 프로그램을 설계하기 위해 필요한 전반적인 패턴.
Layered architecture의 각 계층에서 하던 일들을 '내부'와 '외부'라는 개념으로 나누어 각각에 맞는 별도의 인터페이스를 정의한다.
내부의 로직은 오직 외부를 통해서만 접근 가능하다.
어댑터의 역할포트의 역할어댑터: 서비스의 입장에서 이 서비스가 사용하는 외부 시스템과의 직접적인 구현 및 상호작용을 처리함.
ex)
1. 외부(UI)로부터 들어온 request가 가장 처음 만나는 Controller는 인바운드 어댑터라고 할 수 있다.
2. 메세지 브로커(kafka)로부터 Consume하는 동작을 처리하는 핸들러는 인바운드 어댑터라고 할 수 있다.
3. DB(MySql)에 직접 접근하여 CRUD를 처리하는 DAO는 아웃바운드 어댑터라고 할 수 있다.
포트: 서비스 입장에서 어댑터와 통신하기 위한 동작을 정의한 인터페이스
ex)
1. Controller로부터 들어온 요청으로부터 특정 비즈니스 로직을 수행하기 위한 동작을 정의한 인터페이스
2. Consume한 메세지를 처리하기 위한 비즈니스 로직의 동작을 정의한 인터페이스
3. 비즈니스 로직에서 DB를 접근하기 위해 정의한 Repository 인터페이스는 아웃바운드 포트
