본문 바로가기

개발/프로그래머스 데브코스

프로그래머스 데브코스 85일차 with. TS 웹 풀스택

📚요약

지난 시간에는 인수 테스트를 알아보고 적용해 보고는 시간이었습니다. 이번 시간은 

 

📖IaC와 테라폼

📄IaC

Infrastructure as Code의 줄임말로 infrastructure를 생성, 변경, 관리해 줍니다. 이를 활용하면 안정성, 일관성, 재현 가능성을 향상할 수 있습니다. 또한 이를 사용한다면 버전 관리, 재사용, 공유에 유리합니다.

 

📑구성 관리(Configuration Management, 형상 관리)

구성은 의존성이 있어 코드 못지않게 소프트웨어 시스템에 큰 영향을 미칩니다. 

 

📄테라폼(Terraform)

테라폼은 Hashicorp사에서 제공하는 IaC 도구입니다.

 

사용하는 단계가 있습니다.

  1. Scope 범위를 지정합니다.
  2. Author를 작성합니다.
  3. Initialize 초기화합니다.
  4. Plan 계획을 세웁니다.
  5. Apply 적용시킵니다.

 

자세한 내용은 다음 사이트에서 제공합니다.

 

📄테라폼 실습

실습은 내용만 간단히 정리한 후 다시 실습을 진행할 때 정리하러 오겠습니다.

 

📑첫 번째 구성 설정을 작성

main.tf 파일을 작성

더보기
terrafrom {
  required_provider {
    docker = {
      source = "kreuzwerker/docker"
      version = "=> 3.0.1"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name = "nginx"
  keep_locally = false
}

resource "docker_container" "nginx" {
  image = docker_image.nginx.image_id
  name = "sample"
  
  ports {
    internal = 80
    external = 8000
  }
}

△main.tf 파일

해당 파일에서는 provider의 내용이 중요합니다. Terraform registry에서 설정을 가져오는 것임을 아는 것이 좋습니다.

 

`terraform init` 명령어를 통해 초기화를 시킵니다.

 

📄k8s + 테라폼 + 젠킨스

📑테라폼으로 k8s 클러스터 제어

📑클러스터 접근 정보 설정

📑인프라 구성 변경

 

📑인프라 상태 정보 유지

SCM (x)

Jenkins agent (x)

k8s persistent volume (x)

vault 서비스 (o) => 테라폼 클라우드 서비스

 

이제 테라폼 클라우드를 설정해 보겠습니다.

 

📄간단한 CD 파이프라인

📑파이프라인 설계

CI 파이프라인의 상태는 Code checkout → Build & test   Packaging & Registry push까지 완성되었고, Staging과 Acceptance test는 임시 상태입니다.

 

CD파이프 라인을 완성하기 위해서는 우선 이전 단계에서 테라폼 IaC를 이용해 스테이징 환경과 프로덕션 환경을 구성했습니다. 남은 Acceptance test와 smoke test 단계를 설정하면 됩니다. 추가로 빌드 버전 관리까지 진행해 보겠습니다.

 

📑프로덕션 vs 스테이징

스테이징 환경은 프로덕션 환경을 가능한 한 그대로 모사하도록 설계되어야 합니다. 하지만 현재 실습은 제약이 존재합니다. 하나의 k8s만 이용해 테스트를 위해서 클러스터 외부에서 접근이 어렵습니다. 따라서 하나의 클러스터 내에서 네임스페이스만 별도로 구성해서 프로덕션과 스테이징 환경이 분리된 상황에서 어떻게 파이프라인을 구성하지 시뮬레이션해 보겠습니다.

 

📑빌드 버전 관리

Jenkins의 build timestamp 플러그인을 이용해 보겠습니다.

 

📄마무리

Docker: application을 컨테이너화해 독립적이고 통일된 환경에서 실행할 수 있도록 함

Kubernetes: 컨테이너화된 application을 효과적이고 안정적으로 운용

Terraform: application이 실행될 인프라 리소스 구성과 의존 관계를 코드로 관리

Jenkins: 빌드, 테스트, 배포, 관리 등의 작업을 자동화하여 CI/CD 파이프라인 실

 

📑비기능 테스트

시스템 운영에 심각한 위험을 초래할 수 있는 요소들을 테스트를 통해 예방해야 합니다. 비기능 테스트는 자동화해 파이프라인에 포함하기 쉽지 않습니다.

  • 성능 테스트
    • 부하, 스트레스, 확장성
  • 내구성 테스트
  • 보안 테스트
  • 유지보수 테스트
  • 복구 테스트

📑데이터베이스 변경 관리

stateless 한 웹 application과 달리 데이터베이스는 좀 더 복잡합니다.

  • 테스트 데이터 vs 프로덕션 데이터
  • 데이터베이스의 규모와 시스템 성능
  • 스키마 업데이트

마이그레이션 스크립트 등을 활용해 안정성과 복구 가능성을 추구합니다.

 

📑릴리스 패턴

릴리스 패턴은 프로덕션을 새로운 버전으로 업데이트할 때 위험도를 낮추기 위한 전략입니다.

  • 롤링 업데이트
  • 블루-그린 배포
  • 카나리아 릴리스

📑그 외

  • 모니터링: 시스템 구성 인프라 내의 자원 상태와 활용도 등을 지속적으로 검사합니다.
  • 진단: 잠재적 위험 요소를 조기 발견하고 대응책을 수립합니다.
  • 알림: 빌드의 성공/실패, 자원 활용의 변화 등에 대해 자동 알림을 설정합니다.

 

다음 시간에 계속...

 

출처 & 참고

이시윤 강사님의 강의