아키텍처 여정
- 아키텍처를 결정하는것은 목적지가 없는 여정
- 진화적 아키텍처
- API 우선설계
- API 주도 아키텍처
API에 대한 간략한 소개
- API의 의미
- 기반 구현에 대한 추상화
- 타입을 정의하는 명세로 표현
- 정보 교환을 효과적으로 모델링하기 위한 의미 또는 행위
- 호출 방식에 따라 두 가지로 구분가능
- 인 프로세스
- 하나의 프로세스내 호출, 자바 애플리케이션에서 클래스간 호출
- 아웃 오브 프로세스
- 외부 프로세스에 의한 호출, REST 등 외부 API를 호출
- 여기서는 아웃 오브 프로세스에 집중
- 인프로세스 API -> 아웃 오브 프로세스 API 재구성은 흔한일, 이 책 전반에 걸쳐 이러한 진화를 실직적인 사례 연구를 통해 만들어봄
실전예제: 컨퍼런스 시스템 사례 연구
- 책 각 챕터의 내용을 컨퍼런스 시스템 예시에 적용해봄
- 고객 -> 웹 애플리케이션(사용자 인터페이스) -> 컨퍼런스 애플리케이션 -> 데이터베이스
- 웹 애플리케이션은 컨퍼런스 애플리케이션을 HTTP를 통해 API 호출
- 컨퍼런스 애플리케이션은 다음과 같은 컴포넌트들로 구성
- API 컨틀로러
- 요청에 대한 라우팅을 담당, 라우팅 목적지는 아래 컴포넌트들
- 컨퍼런스 애클리케이션 내에 있으므로 인 프로세스
- 객체 마셜링(marshaling)
- 참석자 컴포넌트
- 예약 컴포넌트
- 세션 컴포넌트
- 참석자, 예약, 세션 컴포넌트는 아웃프로세스로 데이터베이스와 통신
- 현재는 컨퍼런스 애플리케이션 내부 호출은 한 프로세스 내에 있음, 컴파일 타임에 안전
- 다음과 같은 요구사항으로 앞으로 변화할 예정
- 모바일 애플리케이션 추가
- 외부 논문 공모(Call for Papers, CFP)시스템과 통합해서 세션 발표자 및 발표 신청서 관리
- 시스템을 클라우드 플랫폼으로 이전
- 우리의 목적은 재개발없이 위와 같은 요구사항을 지원할수 있도록 컨퍼런스 시스템을 마이그레이션 하는것
- 사례연구: 진화적 단계
- 참석자 컴포넌트를 기존 레거시(컨퍼런스 애플리케이션) 시스템에서 분리
- 레거시 시스템 -> 참석자 컴포넌트의 흐름이 생김
- 두 가지의 트래픽 종류
- 수직 트래픽
- 수평 트래픽
- 레거시 시스템 -> 참석자 컴포넌트 호출 처럼 시스템간 통신
- API 인프라스트럭처와 트래픽 패턴
- 컨퍼런스 사례 연구 로드맵
C4 다이어그램의 활용
ADR 사용
- ADR(Archiecture Decision Record) 사용법 및 가이드라인 소개