ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Twelve-Factor
    Architecture/Infrastructure 2025. 2. 15. 00:31

     

    Twelve-Factor

    클라우드 환경에서 애플리케이션을 개발하고 운영하는 데 필요한 모범적인 개발 방식을 제시
    클라우드 네이티브 애플리케이션의 특성을 잘 반영한 방법론으로, 현대적인 애플리케이션 개발에 많은 도움을 준다
    애플리케이션의 확장성, 유지보수성, 배포 효율성을 높이는 데 초점

     

    • 개발과 운영의 일관성 유지: 환경에 상관없이 애플리케이션이 일관되게 동작하도록 함
    • 확장성: 애플리케이션이 쉽게 수평 확장(horizontal scaling)될 수 있도록 함
    • 효율적인 배포: 배포 과정이 일관되고 자동화, 빠르고 안정적
    • 유지보수 용이성: 애플리케이션을 운영하면서 적은 비용으로 확장하고 유지보수할 수 있도록 도움.

     


     

    Twelve-Factor의 12가지 원칙

     

    1. Codebase (하나의 코드베이스, 여러 배포)

    • 애플리케이션은 하나의 코드베이스로 관리되며, 이 코드베이스는 여러 배포에 의해 사용된다.
    • ex. 개발, 스테이징, 프로덕션 환경은 모두 동일한 코드를 사용하되 환경에 따라 설정이 달라지도록 구성

     

     

    2. Dependencies (명시적 의존성 선언)

    • 애플리케이션은 모든 외부 라이브러리나 패키지를 명시적으로 manifest 파일(예: requirements.txt, package.json)에 기록하여 관리해야 한다.
    • 애플리케이션이 환경에 독립적이고, 모든 의존성을 쉽게 추적

     

     

    3. Config (애플리케이션 설정은 환경 변수로)

    • 애플리케이션의 설정 값(예: 데이터베이스 비밀번호, API 키 등)은 소스 코드가 아니라 환경 변수를 통해 관리해야 한다.
    • 다양한 배포 환경에서 설정을 분리하고, 보안을 강화

     

     

    4. Backing Services (백엔드 서비스는 애플리케이션 외부에 두기)

    • 데이터베이스, 캐시, 메일 서버 등과 같은 백엔드 서비스는 애플리케이션 외부에서 제공되고 관리되어야 한다. (ex. AWS의 RDS, S3와 같은 서비스를 사용하여 독립적인 시스템으로 관리)

     

     

    5. Build, Release, Run (빌드, 릴리스, 실행의 분리)

    • 애플리케이션의 빌드, 릴리스, 실행 단계는 분리되어야 한다.
    • 배포 프로세스의 일관성과 안정성을 보장
      • 빌드 : 소스 코드에서 실행 파일을 만듬
      • 릴리스 : 환경 설정과 함께 빌드 준비
      • 실행 : 실제 환경에서 애플리케이션을 실행 분리

     

     

    6. Processes (무상태 프로세스)

    • 애플리케이션은 무상태 (stateless) 프로세스로 설계되어야 하며, 각 프로세스는 독립적으로 실행될 수 있어야 한다.
    • 서버가 중단되거나 재시작되더라도 다시 시작될 수 있도록 해야 한다.
    • 세션 정보나 애플리케이션 상태는 외부 저장소(ex. 데이터베이스, 캐시)에 저장

     

     

    7. Port Binding (포트 바인딩)

    • 애플리케이션은 내장된 서버를 통해 HTTP 요청을 처리하고, 포트 번호로 외부에서 접근할 수 있어야 한다
    • 애플리케이션은 외부 서버와 독립적이며, 환경에 따라 자유롭게 배포될 수 있어야 한다.

     

     

    8. Concurrency (동시성 처리)

    • 애플리케이션은 프로세스와 스레드를 사용하여 동시성을 처리해야 한다.
    • 애플리케이션이 수평적으로 확장될 수 있도록 설계되며, 각 프로세스는 독립적이고 독립적으로 확장 가능한 단위다.

     

     

    9. Disposability (한 번에 하나씩 종료 가능한 프로세스)

    • 애플리케이션은 빠르게 시작하고 종료할 수 있어야 하며, 종료될 때 자원을 정리할 수 있어야 한다.
    • 이렇게 하면 시스템이 불안정해져도 빠르게 복구할 수 있으며, 장애 대응에 유리하다.

     

     

    10. Dev/Prod Parity (개발과 운영 환경의 유사성 유지)

    • 개발 환경, 스테이징 환경, 프로덕션 환경의 차이를 최소화해야 한다.
    • 운영 환경에서의 코드와 개발 환경에서의 코드가 동일한 조건을 갖추도록 하여 환경에 따른 예기치 않은 문제를 방지한다.

     

     

    11. Logs (애플리케이션 로그는 이벤트 스트림으로 처리)

    • 애플리케이션은 로그를 파일에 저장하지 않고 이벤트 스트림의 형태로 처리한다.
    • 모든 로그는 표준 출력(stdout)으로 보내며, 이를 외부 로깅 서비스에서 집합적으로 처리하고 분석할 수 있다.

     

     

    12. Admin Processes (관리 프로세스는 일시적이고 독립적으로 실행)

    • 애플리케이션의 관리 작업 (ex. Data Migration)은 단발성 작업으로 처리해야 한다.
    • 애플리케이션의 일관성을 유지하면서 배포 후에도 별도로 실행될 수 있어야 한다

     

    'Architecture > Infrastructure' 카테고리의 다른 글

    OSI Model  (0) 2025.02.15
    Linux  (0) 2023.03.18

    댓글

Designed by Tistory.