본문 바로가기
C.W.K.
Stream
Lesson 11 of 13 · published

빌드 아티팩트

~11 min · artifacts, build, immutable

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

한 번 빌드하고 정확히 그걸 배포하자

파운데이션 트랙의 '한 번 빌드, 여러 번 배포' 원칙이 아티팩트 파이프라인에서 그대로 적용돼. 실제로 배포하는 건 아티팩트야. 이 조건들을 꼭 만족해야 해:

  1. 재현 가능 — 새 머신에서 같은 소스코드로 비트 단위까지 똑같은 아티팩트를 만들어내야 해.
  2. 버전 관리 — 고유한 이름을 붙여야 해 (Git SHA, 시맨틱 버전, 타임스탬프 등).
  3. 불변성 — 한 번 게시하면 절대 덮어쓰면 안 돼.
  4. 검증 가능 — 체크섬이나 서명, 또는 둘 다 있어야 해.

아티팩트 저장 위치

  • GitHub Releases — 사람이 직접 배포할 수 있는 바이너리 (CLI 도구, 설치 프로그램).
  • GitHub Container Registry (ghcr.io) — Docker 이미지.
  • npm / PyPI / crates.io — 언어별 패키지.
  • S3 / R2 / GCS — 일반적인 블롭.
  • 내부 아티팩트 저장소 — Artifactory, Nexus 등.

버전 관리

흔히 쓰는 두 가지 방식이 있어:

  • SemVer + Git SHA — 사람이 직접 배포하는 릴리스는 v1.4.2+abc1234처럼 써. API 안정성을 약속할 땐 SemVer를, 추적성을 위해선 SHA를 써.
  • Date + SHA — 사용자에게 보이는 시맨틱이 없는 내부 빌드는 2026-04-30-abc1234처럼 써.

Code

파이썬 wheel 빌드 + 체크섬 + 업로드·yaml
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v3
      - run: uv build  # produces dist/*.whl + dist/*.tar.gz
      - name: Compute checksums
        working-directory: dist
        run: sha256sum *.whl *.tar.gz > SHA256SUMS
      - uses: actions/upload-artifact@v4
        with:
          name: wheels-${{ github.sha }}
          path: dist/

External links

Exercise

깨끗한 머신에서 빌드를 두 번 해봐 (아니면 깨끗한 러너 두 개에서 해도 돼). 출력값의 SHA256을 계산해. 똑같아? 아니면 비결정적인 요소(타임스탬프, 빌드 ID, 내장된 경로)를 찾아내서 고정하거나 제거해봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.