2024.08.01 프로그래머스 - 웹 개발 파이프라인 구축 - 4(UAT)
웹 개발 파이프 라인 구축 - 4 (UAT)
인수 테스트 (UAT : User Acceptance Test)
- 요구사항대로 기능이 구현되었는지를 확인하는 과정
- 전체 시스템을 사용자 관점에서 시험하며,
블랙박스 테스트
를 포함
- 전체 시스템을 사용자 관점에서 시험하며,
- CI/CD 구축을 위해 반드시 필요
- UAT 를 자동화 하는 것이 어려운 요인들
- 사용자 참여 : 요구사항의 최족 확인은 실 사용자 여야 한다.
- 의존성 통합 : 테스트할 Application은 모든 의존성을 포함하여 실행 되어야 한다.
- 스테이징 환경 :
프로덕션 환경
과 동일한 스테이징 환경에서 이루어져야 한다. - 애플리케이션 동일성 : 한 번만 빌드하여 프로덕션에서와 동일한 바이너리를 이용해야 한다.
- 릴리스 준비 : UAT를 통과한 App은 즉시 릴리스 준비가 되어야 한다.
도커 레지스트리 (Docker Registry)
컨테이너화된 소프트웨어의 산출물인 도커 이미지를 관리할 수 있는 레포지토리
클라우드 방식
레지스트리- Docker Hub
- 상용 클라우드에서 제공하는 서비스 (AWS ECR, GCP Artifact Registry, Azure COntainer Registry.. )
자체 호스팅 방식
레지스트리- 사내 네트워크가 아닌 외부에 소프트웨어를 보관하는 것을 금지하는 경우에는 유일한 해결방법
- 직접 관리해야하는 부담이 있고 접근 제어 및 인증서 설정 등의 번거로운 작업이 수반됨
이미지 레지스트리 구축 실습
- Docker 를 이용한 로컬 PC의 컨테이너로 레지스트리 서비스 테스트
- Docker Registry 이미지 사용
- k8s 클러스터에 레지스트리 서비스 배포
- 기본 동작 테스트
- OpenSSL 인증서 설치, 설정
- PV 와 PVC 를 만들어 레지스트리 데이터가 호스트에 남아있도록 설정
- Docker push 와 kubectl run 으로 기본적 확인
1. registry 컨테이너 실행
1
docker run -d --rm -p 8765:5000 --name registry registry:2
실습에서는 ubuntu:22.04 에 대한 image 가 필요한데
나는 해당 이미지가 없어서 ubuntu image를 pull 하였다.
1
2
3
4
5
# ubuntu 이미지 없을때
docker pull ubuntu:22.04
docker tag ubuntu:22.04 localhost:8765/ubuntu:22.04
docker push localhost:8765/ubuntu:22.04
위의 과정까지 진행하면 무엇인가? push 가 진행 된다
curl 명령어로 확인 해보자
1
2
3
4
5
6
7
8
9
curl localhost:8765/v2/_catalog
# 결과
{"repositories":["ubuntu"]}
curl localhost:8765/v2/ubuntu/tags/list
# 결과
{"name":"ubuntu","tags":["22.04"]}
- 저장된 이미지의 목록과, 태그 목록을 조회했다.
2. k8s manifest 로 pod와 svc 생성
registry namespace 가 필요!
1
kubectl create namespace registry
registry.yaml 파일 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
apiVersion: apps/v1 kind: Deployment metadata: name: registry namespace: registry labels: run: registry spec: replicas: 1 selector: matchLabels: run: registry template: metadata: labels: run: registry spec: containers: - name: registry image: registry:2 ports: - containerPort: 5000 --- apiVersion: v1 kind: Service metadata: name: registry-service namespace: registry spec: type: LoadBalancer selector: run: registry ports: - name: registry-tcp protocol: TCP port: 30100 targetPort: 5000 nodePort: 30100
게시 확인
1 2 3 4
curl localhost:30100/v2/_catalog # 결과 {"repositories":[]}
taggin 및 push
1 2
docker tag ubuntu:22.04 localhost:30100/ubuntu:22.04 docker push localhost:30100/ubuntu:22.04
curl 을 통한 확인
1 2 3 4 5 6 7 8
curl localhost:30100/v2/_catalog # 결과 {"repositories":["ubuntu"]} curl localhost:30100/v2/ubuntu/tags/list # {"name":"ubuntu","tags":["22.04"]}
Jenkins 파이프 라인에서의 인수 테스트
- 개발자가 변경한 코드를 Github에 푸시
- Jenkins가 변경을 감지하고 코드를 인출해 빌드를 시작,
- 코드 점검(단위테스트 수행)
- Jenkins가 빌드를 완료하여 도커 이미지 생성
- Jenkins가 생성한 이미지를 레지스트리로 푸시
- Jenkins가 스테이징 환경을 구성하고 도커 컨테이너 실행
- 스테이징 환경의 도커호스트가 이미지를 pull 하여 컨테이너 실행
- Jenkins 가 스테이징 환경에서 실행중인 애플리케이션을 대상으로 UAT 실행
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.