* 프로그래머스, 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 5기 강의 수강 내용을 정리하는 포스팅.
* 원활한 내용 이해를 위해 수업에서 제시된 자료 이외에, 개인적으로 조사한 자료 등을 덧붙이고 있음.
IaC(Infrastructure as Code)는 인프라를 코드로 정의하고 관리하는 방법론이다.
소프트웨어 시스템의 구성(Configuration) 관리는 CI/CD 파이프라인에서 중요한 역할을 한다.
Terraform은 클라우드 및 온프레미스 인프라를 코드로 관리하는 IaC 도구이다.
.tf 파일을 작성하여 선언형으로 인프라 정의main.tf 파일 작성kreuzwerker/docker 제공 설정 불러오기nginx:latest 이미지 사용provider "docker" {
version = "~> 3.0.1"
}
resource "docker_container" "nginx" {
image = "nginx:latest"
name = "web_server"
ports {
internal = 80
external = 8000
}
}
Terraform은 현재 인프라 상태를 terraform.tfstate 파일에 저장하여 관리한다.
이 파일을 통해 Terraform은 새로운 리소스 생성, 변경, 삭제 여부를 결정한다.
GitHub에 저장하는 것은 보안상 위험
Jenkins Agent는 일시적으로 생성되므로 상태 정보 유지 불가능
Kubernetes의 Persistent Volume 사용도 적합하지 않음
Terraform Cloud는 인프라 상태 정보를 중앙에서 관리할 수 있는 서비스이다.
terraform login
웹 브라우저에서 인증 후, 토큰 입력하여 로그인 완료
⚠ 토큰은 안전하게 보관해야 함!
현재 CI 파이프라인 상태: ✅ 코드 체크아웃 → ✅ 빌드 & 테스트 → ✅ 패키징 & 레지스트리 푸시
🚧 스테이징 및 프로덕션 환경 구축이 필요함
👉 Terraform을 활용하여 스테이징 및 프로덕션 환경 구성
👉 Acceptance Test 및 Smoke Test 추가
👉 빌드 버전 관리 고려
개발 환경 -> 개발자가 코드 작성 및 테스트를 수행
테스트 환경 -> QA 팀이 통합 테스트를 수행
스테이징 환경 -> 실제 서비스와 유사한 환경에서 최종 검증
프로덕션 환경 -> 최종 사용자를 위한 운영 환경
프로덕션: 실제 운영 환경 (고객이 사용)
스테이징: 프로덕션과 동일한 구성을 유지하되, 테스트 목적으로 사용
이 과정에서 다룬 주요 내용:
Docker: 애플리케이션을 컨테이너화하여 독립적 실행 환경 제공
Kubernetes: 컨테이너를 효과적으로 배포 및 관리
Terraform: IaC 기반으로 인프라 리소스 관리
Jenkins: CI/CD 자동화 도구
비기능 테스트는 시스템 운영에 중요한 영향을 미치지만 자동화하기 어려운 경우가 많다.
성능 테스트 -> 시스템의 응답 속도 및 처리량 측정
부하 테스트 -> 다중 사용자 요청 시 성능 검증
스트레스 테스트 -> 극한 상황에서의 안정성 확인
확장성 테스트 -> 트래픽 증가 시 시스템 대응 능력 확인
내구성 테스트 -> 장기간 운영 시 안정성 검증
보안 테스트 -> 취약점 분석 및 보안 강화
복구 테스트 -> 장애 발생 시 복구 가능성 확인
CI/CD 파이프라인에서 데이터베이스 변경 관리는 매우 중요한 요소이다.
테스트 데이터 vs. 프로덕션 데이터: 데이터 규모 및 성능 차이 고려
스키마 업데이트: 변경 시 충돌 방지 필요
마이그레이션 스크립트 사용: 자동화된 변경 관리
프로덕션 환경에서 새로운 소프트웨어 버전 배포 시 위험도를 낮추기 위한 전략을 적용한다.
롤링 업데이트 -> 서비스 중단 없이 점진적으로 배포
블루-그린 배포 -> 새로운 버전을 별도 환경에서 배포 후 전환
카나리아 릴리스 -> 일부 사용자에게 먼저 배포 후 점진 확대
📌 결론 및 다음 단계
이번 과정에서는 CI/CD 파이프라인 구축과 IaC 적용을 다루었다.
실무에서는 보안 강화 및 배포 자동화 최적화를 추가적으로 고려해야 한다.
🚀 CI/CD 파이프라인을 지속적으로 개선하며 DevOps 역량을 강화하자!