Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CD 파이프라인 이미지 최적화 및 빌드 성능 개선을 위한 Docker Multi-stage Build, Spring Layered JAR 및 BuildKit 도입 #616

Open
limehee opened this issue Nov 22, 2024 · 0 comments · May be fixed by #617
Assignees
Labels
🌎 Intra 서버 인프라 및 도메인 관련 🔨 Refactor 코드 수정 및 개선

Comments

@limehee
Copy link
Collaborator

limehee commented Nov 22, 2024

Describe

현재의 단일 단계 Docker 빌드 방식은 다음과 같은 문제점을 가지고 있습니다.

  1. 이미지 크기 증가: 최종 이미지에 빌드 및 런타임 종속성을 모두 포함하여 저장 공간 요구사항이 증가하고, 이미지 전송 시간이 길어짐.
  2. 빌드 시간 지연: 런타임에 필요하지 않은 빌드 종속성이 포함되어 빌드 프로세스가 느려짐.
  3. 보안 문제: 불필요한 빌드 도구와 종속성으로 인해 공격 표면이 넓어짐.
  4. 비효율적인 캐싱: 특정 레이어 변경 시 하위 레이어가 재빌드되며, 효율적인 캐싱이 어려움.

이를 해결하기 위해 Docker Multi-stage Build, Spring Layered JAR, Docker BuildKit을 도입하고자 합니다. 멀티 스테이지 빌드는 빌드 환경과 런타임 환경을 분리하여 최적화된 이미지를 생성합니다. 또한, Spring Layered JAR 기술을 활용하여 애플리케이션의 레이어별 캐싱을 극대화하고, Docker BuildKit을 사용하여 빌드 성능을 향상시킬 수 있습니다. 이를 통해 이미지 크기를 줄이고 보안을 강화하며, Dockerfile의 유지보수성을 높이는 동시에 빌드 속도를 개선할 수 있습니다. 추가로, Jenkins CD 파이프라인에서 불필요한 작업을 제거하고 병렬화를 도입하여 전체적인 CD 효율성을 높이고자 합니다.

도입 효과

  1. 더 작은 이미지 크기: 최종 이미지에 런타임 구성 요소만 포함하여 이미지 크기를 최적화.
  2. 보안 강화: 불필요한 빌드 도구 제거로 공격 표면 감소.
  3. 유지 관리성 향상: 빌드 단계와 런타임 단계를 분리하여 모듈화 및 독립적 관리 가능.
  4. 빌드 속도 개선: 캐싱 최적화 및 단계 병렬화를 통한 빌드 시간 단축.
  5. 유연성 제공: 각 빌드 단계별로 적합한 이미지를 사용하여 최소한의 런타임 구성 요소 포함 가능.

Tasks

  • 멀티 스테이지 빌드 적용: 빌드 환경과 런타임 환경을 분리하여 단계별 최적화

    • 빌드 스테이지: 빌드 도구 및 종속성을 포함한 빌드 환경 구성.
    • 런타임 스테이지: 최소한의 런타임 구성 요소만 포함한 경량 이미지 생성.
  • Spring Layered JAR 도입: Spring Boot의 레이어 툴을 활용하여 애플리케이션의 레이어별 캐싱 설정.

    • jarmode=layertools 옵션을 사용하여 JAR 파일을 레이어별로 분리.
    • Dockerfile에서 레이어별로 필요한 파일만 복사하여 캐싱 효율성 증대.
  • Docker BuildKit 활성화:

    • 환경 변수 설정을 통해 BuildKit을 기본 빌드 도구로 활성화.
  • Jenkins CD 파이프라인 최적화:

    • 불필요한 작업 제거: 빌드 및 배포 과정에서 중복되거나 불필요한 단계를 식별하고 제거.
    • 병렬화 도입: 가능한 작업을 병렬로 실행하여 전체 빌드 및 배포 시간을 단축.
    • 캐시 활용 강화: 이전 빌드의 아티팩트 및 캐시를 효과적으로 재사용하여 빌드 시간을 줄임.
  • Dockerfile 및 Jenkinsfile 업데이트:

    • 멀티 스테이지 빌드와 Spring Layered JAR를 반영한 Dockerfile 작성.
    • BuildKit을 활용한 최적화된 빌드 명령어 및 파이프라인 설정.
    • Jenkins 파이프라인에서 병렬 빌드를 구현하고, Docker BuildKit 및 레이어 캐시 활용.
@limehee limehee added the 🔨 Refactor 코드 수정 및 개선 label Nov 22, 2024
@limehee limehee self-assigned this Nov 22, 2024
@limehee limehee changed the title Docker Multi-stage Build 도입을 통한 이미지 최적화 및 빌드 성능 개선 CD 파이프라인 이미지 최적화 및 빌드 성능 개선 Nov 23, 2024
@limehee limehee changed the title CD 파이프라인 이미지 최적화 및 빌드 성능 개선 CD 파이프라인 이미지 최적화 및 빌드 성능 개선을 위한 Docker Multi-stage Build, Spring Layered JAR 및 BuildKit 도입 Nov 23, 2024
@limehee limehee added ✨ Feature 새로운 기능 명세 및 개발 🔨 Refactor 코드 수정 및 개선 🌎 Intra 서버 인프라 및 도메인 관련 and removed 🔨 Refactor 코드 수정 및 개선 ✨ Feature 새로운 기능 명세 및 개발 labels Nov 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🌎 Intra 서버 인프라 및 도메인 관련 🔨 Refactor 코드 수정 및 개선
Projects
None yet
1 participant