MSA환경에서 소프트웨어 아키텍처가 왜 중요?
MSA
: 모놀리스방식에서 분리/분해 된 Micro Service 들의 모음!
당장 요청에 다한 응답 필요 없지만 높은 성능 요구
당장 응답 필요하지만 낮은 성능 요구
호출하던 외부 서비스의 스펙 변화
통신 방식의 변화
Layered
여러개의 계층
-> 각 계층 책임 한정됨독립적
-> 개발, 배포, 확장 가능코드의 유지보수 EZ
계층별 접근 자유로움
Hexagonal
내부 / 외부
-> 각각에 맞는 별도의 인터페이스
정의접근 방식
: 외부(인터페이스) -> 내부로직
경계간 이동 제한
모든 비즈니스 로직
: 외부 -> 내부 호출
Layered Architecture
계층별 접근 자유로움
다른 계층 메소드 Call (단점)
하위계층(의존) / 상위하위계층(접근) (단점)
각 Layer -> 하위 계층 의존(down)
단점
: 역방향 의존성
1개의 DB로 부터오는 역방향 의존성
Layered Architecture
: 모놀리스 or 계층별 변화가 적은 아키텍처에 적합
Hexagonal Architecture
내부 / 외부 -> 인터페이스
내부의 로직
: 외부를 통해서만 접근
어댑터
: 외부시스템과 상호작용
포트
: 각 서비스 비즈니스 로직에 맞게 정의된 인터페이스
모든 비즈니스 로직(호출)
: 외부 -> 내부 / 내부 -> 외부 인바운드 어댑터 -> 인바운드 포트 -> 비즈니스 로직
비즈니스 로직 -> 아웃바운드 포트 -> 아웃바운드 어댑터
어댑터와 포트
어댑터
: 서비스 입장
, 해당 서비스가 사용하는 외부 시스템과의 직접적인 구현 및 상호작용
포트
: 비즈니스로직 입장
, 어댑터와 통신하기 위한 인터페이스
(구현체 필요)어댑터
: 외부 서비스의 의존성을 분리
하는 것포트
: 내부 비즈니스 로직과 인터페이스 분리
하는 것