API 아키텍처 설계 여정을 시작하며

아키텍처 여정

  • 아키텍처를 결정하는것은 목적지가 없는 여정
  • 진화적 아키텍처
  • API 우선설계
  • API 주도 아키텍처

API에 대한 간략한 소개

  • API의 의미
    • 기반 구현에 대한 추상화
    • 타입을 정의하는 명세로 표현
    • 정보 교환을 효과적으로 모델링하기 위한 의미 또는 행위
  • 호출 방식에 따라 두 가지로 구분가능
    • 인 프로세스
      • 하나의 프로세스내 호출, 자바 애플리케이션에서 클래스간 호출
    • 아웃 오브 프로세스
      • 외부 프로세스에 의한 호출, REST 등 외부 API를 호출
  • 여기서는 아웃 오브 프로세스에 집중
    • 인프로세스 API -> 아웃 오브 프로세스 API 재구성은 흔한일, 이 책 전반에 걸쳐 이러한 진화를 실직적인 사례 연구를 통해 만들어봄

실전예제: 컨퍼런스 시스템 사례 연구

  • 책 각 챕터의 내용을 컨퍼런스 시스템 예시에 적용해봄
    • 진화적 아키텍처를 모델링
  • 고객 -> 웹 애플리케이션(사용자 인터페이스) -> 컨퍼런스 애플리케이션 -> 데이터베이스
    • 웹 애플리케이션은 컨퍼런스 애플리케이션을 HTTP를 통해 API 호출
    • 컨퍼런스 애플리케이션은 다음과 같은 컴포넌트들로 구성
      • API 컨틀로러
        • 요청에 대한 라우팅을 담당, 라우팅 목적지는 아래 컴포넌트들
        • 컨퍼런스 애클리케이션 내에 있으므로 인 프로세스
        • 객체 마셜링(marshaling)
      • 참석자 컴포넌트
      • 예약 컴포넌트
      • 세션 컴포넌트
      • 참석자, 예약, 세션 컴포넌트는 아웃프로세스로 데이터베이스와 통신
  • 현재는 컨퍼런스 애플리케이션 내부 호출은 한 프로세스 내에 있음, 컴파일 타임에 안전
  • 다음과 같은 요구사항으로 앞으로 변화할 예정
    • 모바일 애플리케이션 추가
    • 외부 논문 공모(Call for Papers, CFP)시스템과 통합해서 세션 발표자 및 발표 신청서 관리
    • 시스템을 클라우드 플랫폼으로 이전
    • 우리의 목적은 재개발없이 위와 같은 요구사항을 지원할수 있도록 컨퍼런스 시스템을 마이그레이션 하는것
  • 사례연구: 진화적 단계
    • 참석자 컴포넌트를 기존 레거시(컨퍼런스 애플리케이션) 시스템에서 분리
      • 레거시 시스템 -> 참석자 컴포넌트의 흐름이 생김
    • 두 가지의 트래픽 종류
      • 수직 트래픽
        • UI에서 시스템 호출
      • 수평 트래픽
        • 레거시 시스템 -> 참석자 컴포넌트 호출 처럼 시스템간 통신
  • API 인프라스트럭처와 트래픽 패턴
  • 컨퍼런스 사례 연구 로드맵
    • 각 장별로 기술의 변화 또는 적용

C4 다이어그램의 활용

ADR 사용

  • ADR(Archiecture Decision Record) 사용법 및 가이드라인 소개