// cicd

CI/CD & DevOps

// cicd

CI/CD & DevOps

CI/CD & DevOps

롤아웃 전략: 점진적 트래픽 전환 자동화

왜 한 번에 전환하면 위험한가 새 버전을 배포할 때 모든 트래픽을 즉시 신규 파드로 넘기면, 문제가 있어도 100% 사용자가 즉시 영향을 받는다. 헬스체크는 통과하지만 특정 요청 패턴에서만 터지는 …

3 min read
CI/CD & DevOps

배포 전 카오스 실험 게이트 자동화하기

왜 배포 전에 카오스 실험이 필요한가 스테이징에서 통합 테스트가 모두 통과해도, 실제 장애는 네트워크 지연·의존 서비스 타임아웃·파드 강제 종료 같은 비정상 조건 에서 발생한다. 이런 조건은 일반 …

3 min read
CI/CD & DevOps

브랜치 보호 규칙과 필수 상태 체크 자동화

왜 브랜치 보호가 필요한가 main 브랜치에 검증되지 않은 코드가 직접 병합되면 배포 파이프라인이 언제든 깨질 수 있다. "PR에서 리뷰했으니 괜찮겠지"라는 암묵적 신뢰는 사람이 실수하는 순간 무너…

3 min read
CI/CD & DevOps

Docker 이미지 zstd 압축으로 전송 가속하기

왜 gzip이 병목이 되는가 Docker 이미지 레이어는 기본적으로 gzip으로 압축되어 레지스트리에 저장·전송된다. gzip은 단일 스레드에 압축률과 속도의 균형도 오래된 알고리즘이라, 수 GB짜…

3 min read
CI/CD & DevOps

Git LFS로 모노레포 대용량 파일 관리하기

왜 대용량 파일이 문제가 되는가 Git은 파일의 모든 버전을 히스토리에 그대로 저장한다. 100MB짜리 모델 가중치나 디자인 원본을 몇 번만 커밋해도 .git 디렉터리는 수 GB로 부풀고, 이 히스…

3 min read
CI/CD & DevOps

빌드 재현성: 결정론적 빌드 만들기

왜 재현성이 문제가 되는가 같은 소스 코드를 같은 커밋에서 빌드했는데 바이너리 해시가 매번 달라진다면, "지금 배포된 이 아티팩트가 정말 그 커밋에서 나온 것인가"를 증명할 수 없다. 공급망 보안(…

3 min read
CI/CD & DevOps

Nix로 재현 가능한 빌드 환경 구성하기

왜 "내 머신에서는 됩니다"가 반복되는가 빌드가 깨지는 대부분의 원인은 코드가 아니라 환경이다. 개발자마다 Node 18과 20이 섞여 있고, CI 러너에는 시스템 OpenSSL 버전이 다르며, a…

3 min read
CI/CD & DevOps

Pulumi vs Terraform: 언어 기반 IaC 비교

왜 IaC 도구 선택이 문제가 되는가 인프라 규모가 커지면 반복되는 리소스 정의, 조건 분기, 환경별 값 주입이 늘어난다. Terraform의 HCL은 선언형에 최적화되어 있지만 반복·조건·추상화가…

3 min read
CI/CD & DevOps

CI에 SAST·DAST 보안 스캔 통합하기

왜 CI에 보안 스캔이 필요한가 배포 직전이나 운영 중에 발견되는 취약점은 수정 비용이 기하급수적으로 커진다. 코드 리뷰만으로는 SQL 인젝션, 하드코딩된 시크릿, 취약한 의존성을 일관되게 걸러내기…

3 min read
CI/CD & DevOps

Flux vs ArgoCD: GitOps 도구 선택 기준

왜 도구 선택이 문제가 되는가 GitOps를 도입하면 클러스터 상태를 Git으로 선언하고, 컨트롤러가 지속적으로 실제 상태를 원하는 상태로 수렴시킨다. 문제는 Flux와 ArgoCD가 이 목표를 서…

3 min read
CI/CD & DevOps

Skaffold로 개발 이너루프 가속화하기

이너루프가 느려지는 이유 쿠버네티스 위에서 서비스를 개발할 때, 코드 한 줄을 고치고 실제 클러스터에서 확인하기까지의 반복 주기를 이너루프(inner loop)라고 부른다. 문제는 이 주기가 doc…

4 min read
CI/CD & DevOps

배포 파이프라인 승인 게이트와 감사 로그 설계

배포 자동화를 도입하면 코드가 병합되는 순간부터 프로덕션까지 사람 손을 거치지 않고 흘러갑니다. 대부분의 변경에는 이것이 바람직하지만, 결제 로직이나 데이터 마이그레이션처럼 실수의 대가가 큰 배포에…

8 min read
CI/CD & DevOps

컨테이너 이미지 취약점 스캔을 CI에 통합하기

왜 이미지 스캔이 필요한가 컨테이너 이미지는 애플리케이션 코드뿐 아니라 베이스 이미지의 OS 패키지, 언어 런타임, 설치된 라이브러리까지 통째로 배포된다. 문제는 이 계층 대부분을 개발자가 직접 관…

3 min read
CI/CD & DevOps

CI 실패 자동 분류와 원인 알림 봇 구성하기

왜 CI 실패 분류가 필요한가 파이프라인이 커질수록 실패의 원인은 다양해진다. 코드 버그, 플래키 테스트, 인프라 타임아웃, 의존성 설치 실패, 시크릿 만료 등이 한데 섞여 "빨간 X"로만 표시된다…

4 min read
CI/CD & DevOps

성능 회귀 벤치마크를 CI 게이트로 세우기

왜 성능 회귀는 늦게 발견되는가 기능 버그는 테스트가 빨간불로 잡아준다. 하지만 응답 지연이 20% 늘거나 메모리 할당이 두 배가 되는 회귀는 대부분 통과한다. 단위 테스트는 "맞는가"만 검증하지 …

3 min read
CI/CD & DevOps

섀도 트래픽 미러링으로 배포 전 검증하기

왜 스테이징만으로는 부족한가 스테이징 환경은 합성 트래픽과 소량의 시드 데이터로 돌아간다. 문제는 장애 대부분이 프로덕션 특유의 조건 에서 터진다는 점이다. 실제 사용자 요청의 분포(특정 파라미터 …

3 min read
CI/CD & DevOps

계약 테스트로 서비스 간 호환성 깨짐 막기

왜 통합 테스트만으로는 부족한가 마이크로서비스가 늘어나면 서비스 A(소비자)가 서비스 B(제공자)의 API를 호출하는 관계가 얽힙니다. B 팀이 응답 필드 이름을 바꾸거나 필수 필드를 제거하면, B…

3 min read
CI/CD & DevOps

배포 프리즈 윈도우와 변경 동결 자동화

왜 배포 프리즈가 필요한가 연말 쇼핑 시즌, 대규모 마케팅 이벤트, 규제 심사 기간처럼 장애 비용이 급증하는 구간이 있다. 이때는 평소라면 무해했을 배포도 리스크가 된다. 롤백 인력이 부족한 새벽·…

3 min read
CI/CD & DevOps

CI에서 gitleaks로 자격증명 유출 차단하기

왜 시크릿 유출이 치명적인가 API 키, DB 비밀번호, 클라우드 액세스 키가 Git 히스토리에 한 번 커밋되면, 이후 커밋에서 삭제하더라도 히스토리에는 영원히 남는다. 공개 저장소라면 자동화된 봇…

3 min read
CI/CD & DevOps

GitHub Actions 동시성 제어로 중복 배포 막기

왜 중복 배포가 문제인가 같은 브랜치에 짧은 간격으로 여러 커밋이 푸시되면 배포 워크플로가 각각 실행된다. 문제는 이들이 서로 다른 시점의 아티팩트를 같은 환경에 밀어넣는다는 점이다. 커밋 A와 B…

3 min read
CI/CD & DevOps

모노레포 독립 버저닝: changesets 실전

왜 모노레포 버저닝이 문제가 되는가 여러 패키지를 한 저장소에 두면 코드 공유와 통합 테스트는 쉬워지지만, 배포 시점에 "무엇을 어떤 버전으로 올릴 것인가"가 골칫거리가 된다. 흔한 실패 패턴은 두…

4 min read
CI/CD & DevOps

머지 큐로 메인 브랜치 그린 유지하기

왜 "그린한 PR"이 메인을 깨뜨리는가 PR이 통과했다는 것은 그 시점의 메인 과 병합한 결과가 통과했다는 뜻이다. 여러 PR이 동시에 그린 상태로 대기하다 순차 머지되면, 각 PR은 서로의 변경을…

4 min read
CI/CD & DevOps

시크릿 관리: OIDC로 CI에서 클라우드 인증하기

왜 장기 자격증명이 문제인가 대부분의 CI 파이프라인은 클라우드에 접근하기 위해 액세스 키를 시크릿으로 저장한다. 하지만 정적 키는 한 번 만들면 만료되지 않고, 저장소·로그·포크된 PR을 통해 유…

3 min read
CI/CD & DevOps

카나리 배포 자동 롤백: 메트릭 기반 판정

왜 수동 롤백은 늦는가 새 버전을 100%로 한 번에 배포하면 장애가 전체 트래픽을 덮친다. 카나리 배포는 소수 트래픽(예: 5%)만 신 버전으로 보내 위험을 격리한다. 하지만 사람이 대시보드를 보…

3 min read
CI/CD & DevOps

피처 플래그로 배포와 릴리스 분리하기

배포(deploy)와 릴리스(release)를 같은 것으로 취급하면, 코드를 프로덕션에 올리는 순간이 곧 사용자에게 기능이 노출되는 순간이 됩니다. 이 결합은 릴리스 타이밍을 배포 파이프라인에 묶어…

5 min read
CI/CD & DevOps

트렁크 기반 개발로 머지 지옥 탈출하기

기능 브랜치를 만들고 며칠, 길게는 몇 주씩 작업하다 메인 브랜치에 합치려는 순간, 지옥이 시작된다. 그 사이 다른 사람들이 올린 수십 개의 커밋과 충돌하고, 충돌을 해결하고 나면 테스트가 깨지고,…

7 min read
CI/CD & DevOps

CI 테스트 병렬화로 피드백 루프 단축하기

개발팀이 빠르게 움직이려면 코드를 푸시한 후 “이 변경이 시스템을 망가뜨리지 않는다”는 확신을 최대한 빨리 얻어야 합니다. 그 확신을 주는 것이 CI 테스트이고, 그 확신을 얻는 데 걸리는 시간이 …

9 min read
CI/CD & DevOps

무중단 배포 완벽 비교: 블루-그린 vs 카나리

운영 중인 서비스를 중단 없이 새 버전으로 바꾸는 일은 쉬워 보이지만, 실제로는 수백만 원짜리 장애를 유발하는 가장 흔한 원인 중 하나입니다. 블루-그린, 카나리, 롤링 업데이트—세 전략은 각각 뚜…

6 min read