-
Notifications
You must be signed in to change notification settings - Fork 8
백엔드 CI CD 동작 프로세스
김경미 edited this page Oct 16, 2024
·
16 revisions
이 글에서는 우리 서비스의 CI/CD가 어떻게 동작하는지에 대해 살펴봅시다.
해당 스크립트는 Pull request base 브랜치를 dev/be, main 브랜치로 할 때 실행된다.
- 레포지토리를 CI 환경으로 가져온다.
- PR의 대상이 되는 브랜치를 체크아웃하여 작업을 진행할 수 있도록 설정한다.
- MySQL을 설정된 포트 및 설정값으로 실행한다.
- MySQL 버전, 데이터베이스 이름, 포트, 루트 비밀번호 등은 사전에 보안상의 이유로
secrets
에 저장된 값을 활용한다.
- 보안을 위해 DB 설정 정보는
secrets
에 숨겨두었으며, 이를 활용해application-db.yml
파일을 생성한다. - 이 파일은 애플리케이션이 데이터베이스에 접근할 때 필요한 설정을 담고 있다.
- 동일한 CI 동작이 반복될 때 이전에 다운로드한 Gradle 종속성 및 빌드 결과물을 캐싱하여 빌드 시간을 단축한다.
- 캐싱된 결과물이 있으면 이를 활용하여 빠르게 빌드가 진행된다.
- 프로젝트가 Java 17을 사용하도록 JDK 17을 설치한다.
- 이를 통해 애플리케이션이 Java 17 환경에서 정상적으로 빌드 및 실행될 수 있도록 보장한다.
- Gradle을 사용해 프로젝트의 테스트 코드를 실행한다.
- 이 과정에서 MySQL 데이터베이스에 대한 통합 테스트가 포함될 수 있으며, 프로젝트 내에서 정의된 모든 테스트가 수행된다.
해당 스크립트는 dev/be, main 브랜치가 업데이트 될 때 실행된다.
스크립트는 총 3개의 jab을 가지고 있다.
- build : 배포를 위해 현재 데이터를 빌드해 jar 파일로 저장한다.
- deploy_develop: 개발 서버에 배포한다.
- deploy_production: 브랜치가 main이면 운영 서버에 배포한다.
- 레포지토리를 CI 환경으로 가져온다.
- PR의 대상이 되는 브랜치를 체크아웃하여 작업을 진행할 수 있도록 설정한다.
- 프로젝트가 Java 17을 사용하도록 JDK 17을 설치한다.
- 이를 통해 애플리케이션이 Java 17 환경에서 정상적으로 빌드 및 실행될 수 있도록 보장한다.
- 동일한 CI 동작이 반복될 때 이전에 다운로드한 Gradle 종속성 및 빌드 결과물을 캐싱하여 빌드 시간을 단축한다.
- 캐싱된 결과물이 있으면 이를 활용하여 빠르게 빌드가 진행된다.
- Gradle을 사용해
bootJar
작업을 수행하여 애플리케이션의 실행 가능한 JAR 파일을 생성한다.
- 빌드 결과물(JAR 파일)을 저장해 이후 배포 단계에서 사용하기 위한 Artifact로 업로드한다.
-
build
작업이 완료되어야 실행된다. - 브랜치가
dev/be
인 경우에만 실행되며, 이 작업은 개발 서버로 배포하는 용도이다. - self-hosted runner 중
spring
과develop
라벨이 있는 runner를 사용한다.
- 이전
build
작업에서 저장된 Artifact를 동일한 CI 환경에서 다운로드하여 배포에 사용한다.
- 서버 내부에 미리 정의된 배포 스크립트를 실행하여 애플리케이션을 개발 환경에 배포한다.
-
build
작업이 완료되어야 실행된다. - 브랜치가
main
인 경우에만 실행되며, 이는 프로덕션 서버로의 배포를 담당한다. - self-hosted runner 중
prod_a
와prod_b
라벨이 있는 runner를 사용한다.
-
build
작업에서 저장된 Artifact를 다운로드하여 배포에 사용한다.
- 서버에 정의된 배포 스크립트를 실행하여 애플리케이션을 프로덕션 환경에 배포한다.
- 백엔드 코드 컨벤션
- 백엔드 기술 스택 및 선정 이유
- 각종 인스턴스 설정 파일 및 구성 위치 가이드
- ERD (24.09.27)
- 백엔드 CI CD 동작 프로세스
- 로컬 DB 환경 설정
- 백엔드 로깅 전략
- 백엔드 로그 모니터링 구성도
- 스프링 메트릭 모니터링 구성도
- Flyway 로 스키마 관리
- 코드잽 서버 구성도
- Git Submodule 사용 메뉴얼
- 프론트엔드 코드 컨벤션
- 프론트엔드 기술 스택 및 선정 이유
- 프론트엔드 서비스 타겟 환경 및 브라우저 지원 범위 선정
- 프론트엔드 모니터링 및 디버깅 환경 구축
- 프론트엔드 테스트 목록
- 프론트엔드 라이브러리 기술 검토
- 프론트엔드 개발서버, 운영서버 빌드 및 배포 환경 구분
- 목표했던 타겟 환경과 디바이스에서 서비스 핵심 기능 동작 확인
- 프론트엔드 접근성 개선 보고서
- EC2 로그 확인 방법
- VSCode를 통한 EC2 인스턴스 SSH 연결 방법
- 터미널을 통한 EC2 인스턴스 SSH 연결 방법
- NGINX 설정 파일 접근 및 적용 방법
- DB 접속 및 백업 방법
- [QA] 배포 전 체크리스트
- CI 파이프라인 구축
- CD 파이프라인 구축
- 백엔드 CI CD 트러블슈팅
- Lombok Annotation Processor 의존성을 추가한 이유
- 2차 스프린트 기준 ERD
- DTO 검증하기
- ProblemDetail
- Fork된 레포지토리 PR에서 CI Secrets 접근 문제 해결
- AWS CloudWatch 모니터링
- 스프링 메트릭 모니터링 구축 방법
- 로깅과 Logback에 대해 알아보아요.
- 백엔드 CD 파이프라인 Ver.2
- 요청, 응답 로그에 correlationId 를 추가하자!
- 3차 스프린트 기준 ERD
- 더미데이터 생성하고 실행하기
- 쿼리 성능 개선 결과
- 테이블별 인덱스 설정 목록
- 사용자 증가 시 발생할 수 있는 문제 상황과 개선 방안
- k6를 사용한 서버 부하 테스트
- 6차 스프린트 기준 ERD
- Query Performance Improvement Results
- 테스트 전략 및 CI 설정
- CI CD 구조
- 배포 전, 로컬에서 로그인 기능 포함 테스트해보는 법
- stylelint 적용기
- 내 작업 브랜치 중간에 Merge된 동료의 작업물을 넣고 싶다면 pull vs rebase
- [TS] Webpack config
- [TS] Webpack 환경에서 MSW v2 이슈
- [TS] webpack에서 react‐router‐dom 적용 안됨
- 2024.07.28 새 기획 회의
- 2024.07.26 2차 데모데이 후 회의
- 2024.07.11 백엔드 논의 좀 할게요
- 2024.07.11 백엔드 ERD 회의
- 2024.07.09 깃 브랜치 전략, PR 템플릿 회의
- 2024.07.03 주제 선정 회의
- 2023.07.03 팀빌딩데이 킥오프 회의
- 2023.08.07 3차 스프린트 중간회고