💡 핵심 인사이트
12 팩터 앱(Twelve-Factor App)은 클라우드 환경(AWS, Heroku 등)에 올렸을 때 **절대 터지지 않고, 에러 없이 무한대로 확장(Scale-out)될 수 있는 '가장 완벽하고 튼튼한 웹 애플리케이션(SaaS)을 만들기 위한 12가지 코딩 규칙 및 방법론(바이블)'**입니다.


Ⅰ. 12 팩터의 탄생 (클라우드의 저주)

개발자가 코드를 대충 짜서 클라우드에 올렸더니, 오토스케일링(서버 2대로 늘어남)이 되는 순간 사용자가 로그인 화면에서 무한히 튕겨 나가는 버그(세션 공유 실패)가 터졌습니다. PaaS(플랫폼 서비스)의 선구자인 헤로쿠(Heroku)의 창립자 애덤 위긴스는 "클라우드 시대에는 코드를 이렇게 짜면 무조건 망한다. 내 서버가 언제든 죽고, 언제든 100대로 복제될 수 있다는 전제하에 지켜야 할 12가지 십계명을 만들자!"라며 이 선언문을 발표했습니다.


Ⅱ. 핵심 12가지 팩터 (주요 항목 위주 요약)

시험에 자주 나오는 핵심 팩터들입니다. 모든 항목은 **"어떤 환경(개발, 테스트, 운영)에서도 코드를 안 고치고 똑같이 돌아가게 만들 것"**에 초점을 둡니다.

  1. 코드베이스 (Codebase): 앱 하나당 무조건 Git 저장소(Repository)는 딱 1개만 있어야 합니다. (여러 앱이 한 저장소를 쓰면 안 됨).
  2. 종속성 (Dependencies): pip install이나 npm install처럼, 내 코드가 돌아가기 위해 필요한 외부 라이브러 목록을 명시적으로 파일(requirements.txt)에 다 적어놔야 합니다. (아무 컴퓨터에서나 똑같이 다운받아 실행되게).
  3. 설정 (Config) ★매우 중요: DB 비밀번호나 AWS 인증키 같은 설정값을 절대 소스 코드 안에 박아두지 마라(하드코딩 금지). 무조건 환경 변수(Environment Variables)로 빼서 관리해야, 코드가 유출돼도 해킹당하지 않고 서버 환경마다 설정을 쉽게 바꿀 수 있습니다.
  4. 백엔드 서비스 (Backing Services): DB, 캐시(Redis), 이메일 발송 서버 등은 모두 "언제든 뗐다 붙일 수 있는 교체 가능한 부품(Attached Resource)"으로 취급하여 코드를 짜야 합니다.
  5. 빌드, 릴리스, 실행 (Build, Release, Run) 분리: 코드를 합치는 단계(빌드)와, 설정을 입히는 단계(릴리스), 실제 서버에 띄우는 단계(실행)를 엄격하게 쪼개서 자동화(CI/CD)해야 합니다.
  6. 프로세스 (Processes) ★가장 중요 (무상태성): 앱은 절대 자신의 내장 메모리에 사용자 데이터(세션 등)를 영구 저장해선 안 됩니다 (Stateless). 서버가 1초 뒤에 벼락을 맞아 죽어도 아무 데이터가 날아가지 않게, 모든 중요한 데이터는 외부 DB나 Redis 같은 곳에 저장해야 무한 확장이 가능합니다.
  7. 포트 바인딩 (Port Binding): 톰캣(Tomcat) 같은 무거운 외부 웹서버에 의존하지 말고, 앱 자신이 스스로 포트(예: 8080)를 열고 직접 통신할 수 있게 내장형 서버(Spring Boot 등)를 써야 합니다.
  8. 동시성 (Concurrency): 트래픽이 몰리면 거대한 프로세스 1개를 뚱뚱하게 키우지 말고, 작고 똑같은 프로세스 여러 개로 수평 확장(Scale-out)할 수 있게 짜야 합니다.
  9. 폐기 가능성 (Disposability): 컨테이너(서버)가 켜질 때 1초 만에 팟! 켜져야 하고, 끄라는 명령을 받으면 처리하던 작업만 우아하게 마무리하고 1초 만에 바로 죽을 수 있어야 합니다. (빠른 확장과 축소의 필수 조건).
  10. 개발/운영 환경 일치 (Dev/Prod Parity): 개발자의 로컬 환경과 실제 운영 서버 환경의 차이를 0%로 만들어야 "내 컴퓨터에선 되는데 서버에선 왜 안 되지?"라는 변명이 사라집니다. (도커의 탄생 이유).

📢 섹션 요약 비유: 12 팩터 앱은 **'우주정거장(클라우드)에서 먹을 수 있게 개조된 완벽한 전투 식량 레시피'**입니다. 중력이 없고 물이 부족한 우주(오토스케일링, 무상태성 환경)에서도 아무 문제 없이 렌지에 1초 만에 데워 먹을 수 있도록, 포장재(컨테이너), 보관법(환경변수 설정), 유통기한(폐기 가능성)에 대한 12가지 엄격한 우주 식량 제조 지침서입니다.