풀스택 개발자를 위한 CI/CD 13강 — 측정과 개선: DORA 지표, 그리고 마무리
"그래서 우리 팀의 전달 능력이 실제로 좋아졌는가"에 답하기 위한 DORA 네 지표의 정의와 수집 방법, 지표를 잘못 쓰는 방식, 파이프라인 자체의 건강 지표, 성숙도 로드맵과 최종 체크리스트로 시리즈를 마무리합니다.
210 posts · 10 categories · 2026
"그래서 우리 팀의 전달 능력이 실제로 좋아졌는가"에 답하기 위한 DORA 네 지표의 정의와 수집 방법, 지표를 잘못 쓰는 방식, 파이프라인 자체의 건강 지표, 성숙도 로드맵과 최종 체크리스트로 시리즈를 마무리합니다.
배포에 필요한 Kubernetes 리소스만 추린 뒤, Git을 운영 상태의 원천으로 삼는 GitOps를 다룹니다. Push와 Pull 배포의 차이, 앱 저장소와 설정 저장소 분리, Argo CD Application, GitOps에서의 비밀값과 마이그레이션 순서를 정리합니다.
인터넷과 분리된 폐쇄망에서는 hosted runner도 npm 레지스트리도 Docker Hub도 없습니다. 반입 횟수와 크기를 줄이는 것을 목표로 내부망 구성 요소, 이미지·의존성 반입, 폐쇄망용 Dockerfile, 내부 CI와 배포 번들 방식을 설계합니다.
"README 하나 고쳤는데 왜 전체가 빌드되지?"와 "같은 워크플로를 복사해 붙여 넣는 문제"를 함께 풉니다. 변경 영향 분석과 paths-filter, Composite Action과 Reusable Workflow의 차이, 조직 단위 표준화를 다룹니다.
의존성·베이스 이미지·서드파티 액션까지 모두 공급망입니다. 액션 고정과 의존성 관리 자동화, 코드·비밀값 스캔, 컨테이너 이미지 스캔, SBOM 생성, 이미지 서명과 검증, SLSA 프레임워크를 파이프라인에 심습니다.
Recreate·Rolling·Blue-Green·Canary·기능 플래그를 비교하고 단일 서버 Blue-Green을 직접 구현합니다. 롤백의 세 가지 방식과, 구·신 버전이 공존하는 시간을 전제로 한 Expand-Contract DB 마이그레이션까지 설계합니다.
파이프라인은 조직에서 가장 강력한 자동화 주체입니다. 비밀값의 올바른 위치, GitHub 시크릿과 변수, Environments 승인, GITHUB_TOKEN 최소 권한, 스크립트 인젝션과 포크 PR, 그리고 장기 자격 증명을 없애는 OIDC를 다룹니다.
레지스트리에 올린 이미지를 서버에서 실행시키는 CD 단계를 만듭니다. Push와 Pull 방식을 비교하고, SSH + Docker Compose 배포 스크립트와 워크플로, 플랫폼 배포, PR 미리보기 환경, 릴리스 자동화를 구성합니다.
Build Once Deploy Many를 컨테이너 이미지로 구현합니다. Next.js standalone 멀티스테이지 빌드, 빌드 시점 환경변수 문제, 태깅 전략과 digest, 레지스트리 선택, 멀티 플랫폼 빌드를 다룹니다.
느린 CI는 결국 무시당합니다. 어디서 시간이 새는지 측정하고 캐시의 원리, job 병렬화, 매트릭스 빌드, concurrency 동시성 제어, 실행 자체를 건너뛰는 기법까지 적용합니다.
정적 분석부터 E2E까지 테스트를 파이프라인 어디에 둘지 설계하고, 서비스 컨테이너로 실제 DB 통합 테스트를 돌리고, 불안정한 테스트를 다루며 브랜치 보호 규칙으로 머지 게이트를 만듭니다.
Workflow·Event·Job·Step·Action의 구성 요소부터 트리거와 표현식·컨텍스트, Next.js 첫 CI 워크플로 작성, job 분리와 아티팩트 전달, Runner 이해와 디버깅까지 다룹니다.
통합 지옥과 "내 PC에서는 되는데요"에서 출발해 CI·Continuous Delivery·Deployment를 구분하고, 파이프라인의 해부와 Build Once Deploy Many 같은 핵심 원칙, 도구 지형도까지 정리합니다.
시리즈 전체를 개념·설계·운영 세 묶음의 점검 목록으로 압축했다. 각 항목이 낯설다면 해당 장으로 돌아가면 된다. 다음 단계 학습 제안도 함께 담았다.
이름 해석부터 애플리케이션 로직까지 아래에서 위로 올라가는 진단 순서와, 각 단계에서 쓰는 명령어(nc·ss·curl -w·tcpdump·mtr·openssl), 브라우저 DevTools 활용법, 증상별 원인 사전을 담았다.
풀스택 개발자가 만들기 쉬운 SSRF를 포함한 주요 공격과 방어, 방화벽 정책 요청서에 적어야 할 것, DMZ·Bastion·제로 트러스트, 그리고 폐쇄망이 깨뜨리는 "인터넷이 된다"는 가정들을 정리한다.
RTT로 계산하는 새 연결의 최소 비용, HTTP 클라이언트와 DB 커넥션 풀의 재사용, 바깥이 안쪽보다 길어야 하는 타임아웃 정렬, 백오프와 지터, 서킷 브레이커와 격벽, 프론트엔드 최적화까지.
Docker 네트워크 드라이버와 컨테이너 안의 localhost 함정, 포트 매핑 방향과 ufw로 막히지 않는 publish, depends_on과 healthcheck, Kubernetes Service·DNS, VPC 서브넷과 보안 그룹·NACL의 차이를 다룬다.
포워드·리버스 프록시의 역할 구분, 프록시 뒤에서 클라이언트 IP와 프로토콜을 되찾는 법, L4와 L7 로드밸런서, 헬스체크와 Graceful Shutdown, CDN과 API Gateway까지 인프라 구성요소를 정리한다.
Polling·SSE·WebSocket·WebRTC를 요구사항 기준으로 비교하고, Nginx 버퍼링과 Upgrade 헤더, "정확히 60초마다 끊김"의 원인, WebRTC 시그널링과 STUN/TURN/SFU의 네트워크 포인트를 다룬다.
blog92@web:~$ exit