The Twelve-Factor App
서론
코드를 '클라우드 네이티브'로 만든다는 것은 12-factor의 configuration, statelessness, logging, and connecting to backing services 등을 다루는것을 의미합니다.
소개
현대 시대에 소프트웨어는 일반적으로 웹 앱 또는 SaaS(Software-as-a-Service)로써 제공 됩니다. Twelve-Factor App은 다음과 같은 SaaS앱을 구축하기 위한 방법론입니다.
- 설정 자동화에 선언적 형식을 사용 하여 프로젝트에 참여하는 신규 개발자의 시간과 비용을 최소화합니다.
- 실행 환경 간의 최대 이식성 을 제공 하는 기본 운영 체제와 깨끗한 계약 을 맺습니다.
- 서버 및 시스템 관리가 필요 없는 최신 클라우드 플랫폼 에 배포 하는 데 적합합니다.
- 개발과 생산 간의 차이를 최소화 하여 민첩성을 극대화하기 위해 지속적으로 배포 할 수 있습니다.
- 도구, 아키텍처 또는 개발 방식을 크게 변경하지 않고도 확장할 수 있습니다.
12단계 방법론은 모든 프로그래밍 언어로 작성되고 지원 서비스(데이터베이스, 큐, 메모리 캐시 등)의 조합을 사용하는 앱에 적용할 수 있습니다.
12개의 요소
- 코드베이스(Codebase) :
개정 관리에서 추적되는 하나의 코드베이스, 많은 배포- 종속성(Dependencies) :
종속성을 명시적으로 선언 및 격리- 구성(Config) :
환경에 구성 저장- 지원 서비스(Backing services) :
지원 서비스를 연결된 리소스로 취급- 빌드, 릴리스, 실행(Build, release, run) :
빌드 및 실행 단계를 엄격하게 분리- 프로세스(Processes) :
하나 이상의 상태 비저장 프로세스로 앱 실행- 포트 바인딩(Port binding) :
포트 바인딩을 통해 서비스 내보내기- 동시성(Concurrency) :
프로세스 모델을 통한 확장- 일회용(Disposability) :
빠른 시작 및 정상 종료로 견고성 극대화- 개발/프로덕트 패리티(Dev/prod parity) :
개발, 스테이징 및 프로덕션을 최대한 유사하게 유지- 로그(Logs) :
로그를 이벤트 스트림으로 처리- 관리 프로세스(Admin processes) :
관리/관리 작업을 일회성 프로세스로 실행
Saas : 클라우드 애플리케이션과 기본 IT 인프라 및 플랫폼을 인터넷 브라우저를 통해 최종 사용자에게 제공하는 클라우드 컴퓨팅 형태입니다.
스프링 클라우드 아키텍처
API GATEWAY
API Gateway는 API 서버 앞단에서 모든 API 서버들의 엔드포인트를 단일화 해주는 또 다른 서버입니다. API에 대한 인증과 인가 기능을 가지고 있으며, 메세지의 내용에 따라 어플리케이션 내부에 있는 마이크로서비스로 라우팅하는 역할을 담당합니다.
ex) Zuul, Zuul2 , Spring Cloud Gateway
Zuul 1과 2의 차이점은 Zuul 2에서는 Netty를 사용하여 asynchronous, non-blocking을 활용하고 있다는 것이다.
Service Registry
그러면 서비스를 등록하는 가장 쉬운 방법으로는 DNS 레코드에 하나의 호스트명에 여러개의 IP를 등록하는 방식으로 구현이 가능하다. 그러나 DNS는 레코드 삭제시 업데이트 되는 시간등이 소요되기 때문에, 그다지 적절한 방법은 아니기 때문에, 솔루션을 사용하는 방법이 있는데, ZooKeeper나 etcd 와 같은 서비스를 이용할 수 있고 또는 Service discovery에 전문화된 솔루션으로는 Netflix의 Eureka나 Hashcorp의 Consul과 같은 서비스가 있다.
Discovery pattern
Api Gateway로 들어온 요청에 맞게 Api Server에 할당
,Eureka나 zookeeper 에 등록하여 사용
Config server
스프링 Config Server는 각 애플리케이션에의 Config 설정을 중앙 서버에서 관리를 하는 서비스입니다. 중앙 저장소로 Github Repository뿐만 아니라 아래와 같은 저장소 환경을 제공해 주고 있습니다.
Distributed Tracing
클라우드 환경이 대세가 되면서 자연스럽게 MSA 의 사용량 역시 증가하게 되었고 증가한 만큼 수많은 마이크로 서비스들의 트랜잭션에 대해 추적을 할 필요가 생겼습니다.
기존의 모노리틱 아키텍쳐에서는 하나의 애플리케이션 안에서 모든 동작이 이루어졌기 때문에 트랜잭션의 추적이 아주 쉬웠지만 MSA 아키텍쳐의 사용으로 수많은 트랜잭션을 로깅한다는것은 매우 어려운일이었습니다. 이때 등장한 개념이 분산추적 (Distributed Tracing) 입니다.
분산추적이란 하나의 애플리케이션을 구성하는 모든 MSA 사이에서 발생하는 트랜잭션을 추적하고 분석하는 것입니다.
분산 추적을 사용하는 이유
데브옵스 환경에서 프로젝트를 진행하는 팀이라면 분산추적을 이용하여 애플리케이션을 모니터링 할수있습니다. MSA 개발환경에서의 최적화된 기술이라고 할수있습니다.
ex) Spring Cloud Sleuth, zipkin
출처 : https://spring.io/cloud
https://12factor.net/
https://bit.ly/3suiCw4
Zuul에 대한 내용
Service Registry에 대한 내용
Distributed Traicing
'스프링 > cloud' 카테고리의 다른 글
[스프링 클라우드] Ch03. API 게이트웨이 (0) | 2022.05.15 |
---|---|
[스프링클라우드] ch01. 웹 서비스 확장 전략 (0) | 2022.05.12 |