홈 › CI/CD › 04 / 7

빌드 산출물과 버전

섹션 7진행 0 / 7

6. 연습 문제

문제 1. VERSION 파일로 매니페스트 채우기

VERSION 파일에 2.0.1 이 들어 있습니다. 이 값을 읽어 Implementation-Version 에 넣고 dist/app-2.0.1.jar 를 만드는 명령을 쓰세요(클래스는 out/ 에 있음).

bash
VER=$(cat VERSION)
printf 'Implementation-Version: %s\n' "$VER" > MANIFEST.MF
jar --create --file "dist/app-$VER.jar" \
  --main-class Main --manifest=MANIFEST.MF -C out .

cat VERSION 으로 읽은 값을 매니페스트와 파일 이름 양쪽에 그대로 재사용합니다.

문제 2. 매니페스트 속성 확인

이미 만든 app.jar 안의 Main-Class 와 Implementation-Version 값을 확인하는 명령을 쓰세요.

bash
jar xf app.jar META-INF/MANIFEST.MF
cat META-INF/MANIFEST.MF

압축을 풀지 않고 매니페스트 항목 하나만 꺼내 바로 내용을 확인할 수 있습니다.

문제 3. 재현 가능한 빌드로 만들기

같은 소스를 몇 번 빌드해도 항상 같은 해시가 나오게 하려면 jar --create 에 어떤 옵션을 추가해야 하는지, 옵션과 예시 값을 함께 쓰세요.

bash
jar --create --file app.jar --main-class Main \
  --date=2026-01-05T09:00:00+09:00 -C out .

--date 로 모든 항목의 타임스탬프를 고정하면 빌드 시각이 결과에 섞이지 않습니다.

문제 4. 체크섬 생성과 검증

app.jar 의 체크섬 파일을 만들고, 그 파일로 무결성을 검증하는 명령 두 개를 쓰세요.

bash
sha256sum app.jar > app.jar.sha256
sha256sum -c app.jar.sha256

두 번째 명령이 OK 를 출력하면 파일이 손상되지 않았다는 뜻입니다.

문제 5. 산출물 이름 규칙 적용

프로젝트 이름이 app, 버전이 2.0.1 일 때 산출물 jar 파일과 체크섬 파일의 이름을 규칙에 맞게 쓰세요.

text
app-2.0.1.jar
app-2.0.1.jar.sha256

<이름>-<버전> 형식을 지키면 여러 버전이 같은 폴더에 있어도 서로 덮어쓰지 않습니다.