====== 마이크로 서비스 아키텍처 (MSA) ====== ===== 12-Factor App 방법론 ===== 최근 소프트웨어를 서비스 형태로 제공하는게 일반화 되면서, 웹앱 또는 SaaS(Software As A Service)라고 부르게 되었다.\\ 12-Factor App은 아래 특징을 가진 SaaS앱을 만들기 위한 방법론이다. * 선언적 형식으로 설정 자동화하여 새로운 개발자가 프로젝트에 참여하는데 드는 시간과 비용을 최소화한다. * OS에 따라 달라지는 부분을 명확하게 하고, 실행환경 사이의 이식성을 극대화한다. * 클라우드 플랫폼 배포에 적합하고, 서버와 시스템의 관리 부담을 없앤다. * 개발환경과 운영환경의 차이를 최소화하여 민첩성을 극대화하고 지속적인 배포가 가능하다. * 툴, 아키텍처, 개발방식을 크게 바꾸지 않고 서비스를 확장(scale-up)할 수 있다. 12-Factor방법론은 어떤 프로그래밍 언어로 작성된 앱에도 적용할 수 있고 백엔드 서비스(데이터베이스, 큐, 메모리 캐쉬 등)와 다양한 조합으로 사용할 수 있다. - 코드베이스 (Codebase) * 버전 관리되는 하나의 코드베이스로 여러 곳에 배포 - 종속성 (Dependencies) * 의존 관계를 명시적으로 선언하고 분리 * 환경에 의존하지 않도록 함 - 설정 (Config) * 설정 정보는 애플리케이션 코드와 분리하고 환경 변수에 저장 - 백엔드 서비스 (Backing services) * 백엔드 서비스를 연결된 리소스로 취급 - 빌드, 릴리스, 실행 (Build, Release, Run) * 빌드, 릴리스, 실행의 3단계를 엄격하게 분리 - 프로세스 (Processes) * 응용 프로그램을 하나 또는 여러 개의 독립적인 프로세스로 실행 - 포트 바인딩 (Port binding) * 포트 바인딩을 통해 서비스를 공개 - 동시성 (Concurrency) * 프로세스 모델에 따라 수평적 확장 - 폐기 용이성 (Disposability) * 빠른 시작이 가능하며, Graceful Shutdown시 서비스에 영향을 미치지 않도록 하여 안정성 극대화 * Graceful Shutdown : 정상적인 종료로써 소프트웨어 기능으로 컴퓨터를 끄거나 OS가 프로세스를 안전하게 종료하고 연결을 해제하는 작업을 수행할 수 있는 경우이다. - 개발/운영 일치 (Dev/prod parity) * 개발 환경과 운영 환경을 최대한 동일하게 유지 * CI/CD (Continuous Integration/Continuous Delivery)환경이 갖춰져 있어야 함 - 로그 (Logs) * 로그를 이벤트 스트림으로 취급함 * 중앙 집권적인 서비스를 통해 로그 이벤트를 수집하고, 인덱싱하여 분석하는 환경이 가능해야 함 - 관리 프로세스 (Admin processes) * 관리 작업(admin/maintenance)을 일회성 프로세스로 실행 ===== 참고자료 ===== * [[https://12factor.net/ko/|12-factor App 한국어 번역 자료]]