-
클라우드 마이크로 서비스 - 12 FactorsInfra/클라우드 2023. 12. 8. 16:38
12 Factors
12팩터스는 클라우드 서비스 중 플래폼 Azure 서비스 즉 PaaS라는 형태의 서비스를 제공하는 Heroku라는 개발 회사에서 제시한 12가지 항목으로서 클라우드 네이티브 어플리케이션을 개발하거나 서비스 운영할 때 고려해야 될 항목을 정리한 것이다.
Heroku라는 회사에서는 자사의 고객들을 상대로 클라우드 서비스 시에 발생했던 문제점과 개선점, 시행착오 등을 바탕으로 이러한 가이드라인을 만들어서 배포하였다. 12팩터스에는 1)코드 통합, 2)종속성의 배제, 3)환경 설정의 외부관리, 4)백업 서비스의 분리, 5)개발환경과 테스트·운영 환경의 분리, 6)상태 관리, 7)포트 바인딩, 8)동시성, 9)서비스의 올바른 상태 유지, 10)개발과 운영 환경의 통일, 11)로그의 분리, 12)관리 프로세스에 대해서 소개하고 있다.
1.CodeBase
코드베이스라는 것은 자체 레퍼지토리에 저장된 각 마이크로 서비스에 대한 단일 코드베이스를 의미한다. 단일 코드 베이스는 버전을 제어하기 위한 목적으로 이전에도 게시글에도 언급했던것과 같이 형상관리를 위해서 코드를 한곳에서 배포하는 것이 주 목적이다. 개발, 스테이징, 프로덕션과 같은 여러 환경에 코드를 배포하기 위해서 코드 통일적인 관리가 필요하기 때문에 가장 중요한 항목으로 꼽히고 있다.
2.Dependency Isolation
종속성이라는 것은 각 마이크로 서비스는 자체 종속성을 가지고 패키지 되어서 전체 시스템에 영향을 주지 않은 상태에서 변경되고 내용을 수정할 수 있어야 한다는 의미이다.
3.Configurations
구성설정 정보가 코드 내부에서 하드코드되어 있는 것이 아니라 코드 외부에서 구성관리 도구를 통해서 마이크로 서비스에 필요한 어떤 작업들을 제어하는 것을 얘기하고 있다. 그렇게 하므로써 각각의 목적으로 구축된 여러 환경에 모두 의도 대로 동일한 구성 환경을 구축할 수 있다.
4.Linkable Backing Service
서비스 지원은 데이터베이스, 캐시, 메시징 서비스, 브로커와 같은 보조 서비스를 이용을 해서 마이크로 서비스가 가져야 될 어떤 기능들을 추가로 지원 할 수 있는 것을 얘기한다. 이렇게 응용 프로그램 자체에서 필요한 백킹 시스템 리소스를 분리하게 되므로써 서로 상호관계에 있는 서비스를 코드를 dependency(의존성)을 갖지 않은 상태에서 작업할 수 있게 된다.
5.Build,Release and Run
빌드·릴리즈·실행 환경을 각각 분리할 것을 얘기하고 있다. 이 세가지 주요 단계(stages)는 반드시 완벽하게 수행 계획이 정의 되어 있어야 한다. 이 세가지는 고유한 아이디 태그를 가지고 있어야 되고 이전 상태로 돌아가는 롤백 기능을 지원해야되며, 코드를 합치는 과정은 CI/CD 시스템을 이용해서 자동화되어 있는 것이 좋다.
6.Stateless Processes
각각 마이크로 서비스는 실행 중인 다른 서비스와 분리된 채 자체 프로세스에서 운영될 수 있어야 된다. 이것은 Dependency Isolation과도 일치하는 항목이다. 하나의 마이크로 서비스는 다른 쪽에 있는 마이크로 서비스와 분리되어 독립적으로 실행할 수 있는 상태여야 한다. 필요한 자원이 있다고 하면 캐시 혹은 데이터 저장소와 같은 형태를 이용해서 외부와 데이터 교환 즉 데이터 동기화를 하면 된다.
7.Port Binding
마이크로 서비스는 포트 바인딩을 사용해서 컨테이너 외부로 서비스를 공개한다. 이렇게 하므로써 다른 서비스와 구별이 가능해 진다.
8.Concurrency
마이크로 서비스는 사용가능한 컴퓨터에서 가장 큰 인스턴스로 확장해 나가는 것이 아니라 많은 수의 서비스를 동일한 프로세스를 복사하는 방식으로 확장해 나가게 된다. 동일한 형태의 하나의 서비스가 여러개의 인스턴스로 복사가 되서 운영되므로써 부하 분산을 이뤄낼 수 있다. 따라서 이렇게 동일한 그 서비스가 여러 pc,여러 인스턴스에 나눠서 서비스 되고 있
기 때문에 동시성을 가지고 있어야 된다고 보는 것이다.
9.Disposability
서비스 인스턴스 자체가 삭제가 가능해야 한다. 그리고 확장성 기회를 높여야 되고 정상적으로 종료를 할 수 있는 상태가 되어야 한다. 만약에 컨테이너 가상화 기술로서 도커라든가 컨테이너D라든가 크리오라든가 이러 제품을 사용하면 서비스스의 인스턴스를 등록하고 실행하고 삭제하는 작업을 쉽게 할 수 있다.
10.Dev/Prod Parity
개발 단계와 프로덕션 단계를 구분해 줄수 있어야 한다. 운영 프로그램 수명 주기 전반에 걸쳐서 최대한으로 많은 서비스를 직접 액세스하는 기능을 방지한다. 환경 자체를 최대한 다른 쪽에 있는 작업과 중복되지 않고, 종속되지 않은 상태로 서비스를 유지 할 수 있어야 한다.
11.Logs
로깅 시스템은 마이크로 서비스에 의해서 생성된 어떤 로그를 이벤트 스트림으로 처리해야 한다. 즉, 하나의 시스템 안에서 구성되고 있는 로그를 출력하는 로직은 기존에 있던 어플리케이션 로직과 분리과 돼서 어플리케이션 자체가 실행되지 않는 상태라고 하더라도 로그만은 정상적으로 작동할 수 있는 상태여야 한다. 이러한 로그 또는 이벤트 집계를 사용하기 위해서는 별도의 추가적인 서비스 아니면 모니터링 도구를 사용할 수도 있다.
예를 들어 마이크로소프트에 있는 Azure 모니터링 도구라든가 스프렁크라는 회사에 있는 데이터 마이닝 로그 관리를 위한 ELK라는 도구를 이용해서 장기적으로 보관되어있는 로그를 분석하는 용도로 사용할 수도 있다.
12.Administrative/Processes
현재 운영되고 있는 모든 마이크로 서비스들이 어떤 상태로 사용되고 있으며 리소스가 어떻게 쓰이고 있느지에 대해 파악하기 위한 적절한 관리 도구가 있어야된다. 이런 작업에는 리포팅할 수 있는 기술이 포함되어 있어야 하고 데이터 정리 및 데이터를 분석하는 기능이 포함될 수 있다.
12Factors + 3
최근에는 피보탈이라는 클라우드 회사에서 Heroku가 제시한 12Factors에다가 3가지 항목을 더해서 발표를 했다.
- API first
- Telemetry
- Authentication and authorization
API first
마이크로 서비스는 API 형태로 서비스 되는 것이 권장되고, API를 구축함에 있어서 사용자 측에서 어떤 형태로 쓸 것인가를 먼저 고민해서 개발해야 된다는 것이다.
Telemetry
개발 관리자 항목과 유사한 항목이지만 모든 지표는 수치화 시각와 되서 관리할 수 있어야 한다는 의미다.
Authentication and authorization
마이크로 서비스 간에 분리되어 있는 형태로 개발이 된다 하더라도 각각의 마이크로 서비스는 적절한 인증을 가지고 있는 외부의 리소스 혹은 서비스에 데이터를 전달하고 교환하는 작업이 가능해져야 된다는 이야기로도 볼 수 있다.
[출처 - Spring Cloud로 개발하는 마이크로 서비스 애플리케이션, 저 Dowon Lee]
'Infra > 클라우드' 카테고리의 다른 글
클라우드 마이크로 서비스 - Microservice Architecture (1) 2023.12.11 클라우드 마이크로 서비스 - Monolithic vs MSA (0) 2023.12.11 클라우드 마이크로 서비스 - Cloud Native Application (1) 2023.12.08 클라우드 마이크로 서비스 - 소프트웨어 아키텍쳐,Cloud Native Architecture (2) 2023.12.08 AWS - AMI(Amazon Machine Image) 생성하기 (0) 2023.08.26