12 Factors

2020. 11. 6. 14:46topic

SaaS(Software as a Service) -12원칙

 

1. 단일 코드베이스

- 하나의 어플리케이션은 버전 관리되는 하나의 코드베이스와 다양한 배포

- 분산 시스템에서는 각각의 시스템 단위로 하나의 코드베이스여야 한다.

 

2. 의존성 관리 단일화

- 모든 어플리케이션은 필요한 모든 의존성을 하나의 꾸러미에 담아야 한다.

- maven project: pom.xml 에 모든 의존성 관리

 

3. 환경 설정 외부화

- 어플리케이션의 설정은 배포(개발/스테이징/Production)마다 달라질 수 있는 모든 것 (데이터베이스 리소스 핸들, 아마존과 같은 외부 서비스 인증 등)

- 설정은 코드에서 엄격히 분리

- 여기에서는 어플리케이션 내부 설정을 포함하지 않는다. 어떻게 코드 모듈이 연결되는가 등등

- spring cloud config server

 

4. 백엔드 지원 서비스 접근성

- 모든 백엔드 지원 서비스는 URL을 통해 접근 가능해야 한다. REST API등

- 백엔드서비스 : 네트워크를 통해 이용하는 모든 서비스(데이터 저장소, 메시지 큐잉, SMTP, 캐시 시스템 등)

- 리소스는 자유롭게 어플리케이션에 연결되거나 분리될 수 있어야 함

- 환경에 저장된 설정을 통한 변경(어플리케이션의 수정 X)

 

5. 빌드, 배포, 실행의 격리

- 각 단계별 프로세스 분리로 인해, 런타임에 application 코드를 변경할 수 없다. 빌드 단계부터 시작하거나, 롤백만이 가능하다.

 

· 빌드 : application 소스코드를 하나의 패키지로 컴파일.

· 배포 : 빌드 + 환경설정 정보 조합. 시맨틱 버저닝(semantic versioning) 또는 타임스탬프를 통한 유일한 식별자 부여.

· 실행 : 배포 버전중 하나를 운영 환경에서 구동.

 

6. 무상태, 비공유 프로세스

- Sticky Session은 12원칙에 위배.

- 세션 상태 데이터는 Memcached나 Redis처럼 유효기간을 제공하는 데이터에 저장하라.

 

7. 포트바인딩을 사용해서 서비스를 공개함

- application은 웹서버에 의존하지 않는다. Http리스너는 서비스에 내장된다.

- 라우팅 계층은, 해당 포트를 바인딩하여 http 서비스로 공개.

- 하나의 어플리케이션이 다른 어플리케이션을 위한 백엔드 서비스가 될 수 있음.

- spring boot application jar package

 

8. 확장을 위한 동시성

- 어플리케이션은 여러개의 물리적 머신에서 돌아가는 여러개의 프로세스로 넓게 퍼질 수 있어야 한다.

- 수평적 확장

 

9. 폐기 영향 최소화

- 어플리케이션의 시동과 종료에 필요한 시간을 최소화 : 견고함을 극대화.

- 항상 서비스를 작게 유지하는 것이 포인트

- 프로세스는 Graceful shutdown을 할 수 있다(서비스포트 수신 중지 > 현재 처리중인 요청 마무리 > 종료)

- 프로세스는 갑작스런 종료에도 견고해야 한다.

 

10. 개발과 운영의 짝 맞춤

- Development, staging, production 환경을 최대한 비슷하게 유지

- 배포 간격은 짧게

- 개발환경과 production 환경을 최대한 유사하게

- 코드 작성자와 코드 배포자는 동일하게

- 아마존, 넷플릭스 : "You make it, You run it." > DevOps.

 

11. 로그 외부화

- 로그를 이벤트 스트림으로 처리 (to 로그 적재자 > 중앙 로그 서비스)

- 로그 파일을 절대로 자기 자신 안에 담지 않는다

- 어플리케이션은 로그 파일을 저장하거나 관리하려고 해선 안된다.

- 하나 이상의 최종 목적지는 실행 환경에 의해서 관리 되어야 한다.

- 분당 오류수 임계치등에 대한 알림등 활용 가능

 

12. 패키지 관리자 프로세스

- 어플리케이션 서비스와 관리자 태스크 모두에 대해 동일한 환경 뿐 아니라, 동일한 출시버전의 꾸러미 사용

- 관리자 태스크를 위한 코드도 어플리케이션 코드와 함께 패키징 > 실행 환경간 일관성 유지.

 

 

The Twelve-Factor App

Background The contributors to this document have been directly involved in the development and deployment of hundreds of apps, and indirectly witnessed the development, operation, and scaling of hundreds of thousands of apps via our work on the Heroku pla

12factor.net

 

'topic' 카테고리의 다른 글

[2020.12.17] NAVER Cloud AI SUMMIT - Online  (0) 2020.11.26
Coupang Reveal 2020  (0) 2020.11.26
Naver DEVIEW 2020  (0) 2020.11.14
if(kakao) 2020  (0) 2020.11.14
구글이 10년간 연구한 '최고의 보스'  (0) 2020.09.09