공공부하자개발 · 영어 학습 노트
자바
실무 확장Excel · 파일 업로드 · DB 연동0/22 완료
  • 01Excel(XLSX) 구조와 순수 JDK로 읽기/쓰기
  • 02Apache POI로 Excel 업로드/다운로드
  • 03파일 업로드/다운로드 서버 (HttpServer)
  • 04JDBC 기초와 트랜잭션 (H2)
  • 05MyBatis 어노테이션 매퍼로 쿼리 연동
  • 06MyBatis XML 매퍼 · Oracle 방언 · PageHelper · Spring Boot
  • 07REST API 서버와 JSON
  • 08Vue 3 SPA 와 Java 서버 연동
  • 09@Scheduled 운영
  • 10로깅 실무: 레벨·계층, MDC 추적, 예외·성능, 마스킹, 롤링, JSON 로그
  • 11외부 API 연동
  • 12테스트 실무
  • 13암호화·개인정보 보호
  • 14인코딩·한글 실무
  • 15@Transactional 심화
  • 16긴 작업 비동기 처리와 진행률
  • 17SFTP·FTP 파일 연계
  • 18로컬 캐시와 @Cacheable
  • 19메일·알림 발송
  • 20웹 보안 체크리스트
  • 21빌드 도구와 폐쇄망 의존성 반입
  • 22성능 측정: p50·p95·p99, 측정 계층, JFR, JMH 함정, 자체 부하 테스트, 병목 순위
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 실무 확장 › 21 / 22

빌드 도구와 폐쇄망 의존성 반입

Maven 좌표·범위·충돌, 로컬 저장소 반입, 사내 미러, 재현 가능한 빌드
섹션 7진행 0 / 22
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

6. 연습 문제

문제 1. `pom.xml` 에 JUnit 5 테스트 의존성 추가

pom.xml 의 주석 처리된 JUnit 블록을 활성화하고, 버전을 5.10.2 로 고정해 test scope 로 추가하세요.

xml
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.10.2</version>
    <scope>test</scope>
</dependency>

scope 를 test 로 두면 이 jar 는 배포 fat jar 에 포함되지 않습니다.

문제 2. `import-jars.sh` 로 만든 사이드카가 실제로 검증되는지 확인

java-src/lib 폴더의 jar 하나를 골라 sha256sum 결과를 <jar명>.sha256 파일로 저장한 뒤 스크립트를 다시 실행하세요.

text
cd java-src/lib
sha256sum mybatis-3.5.19.jar > mybatis-3.5.19.jar.sha256
bash ../extension/21_build_offline/import-jars.sh .

해당 jar 만 "OK" 로 표시되고 나머지는 여전히 "미검증"으로 남습니다.

문제 3. 일부러 sha256 값을 틀리게 만들어 실패 종료 코드 확인

문제 2의 .sha256 파일 내용 앞 글자 하나를 바꾼 뒤 스크립트를 실행하고 종료 코드를 확인하세요.

text
sed -i '1s/^./f/' mybatis-3.5.19.jar.sha256
bash ../extension/21_build_offline/import-jars.sh .
echo "종료 코드: $?"

"불일치"로 표시되고 종료 코드가 1 로 끝나는 것을 확인합니다. 확인 후 원래 값으로 되돌립니다.

문제 4. `mvn dependency:tree` 로 전이 의존성 확인(개념 문제)

Spring Boot 프로젝트에서 spring-boot-starter-web 하나만 추가했는데 Tomcat, Jackson 관련 jar 가 함께 딸려 오는 이유를 mvn dependency:tree 출력과 연결지어 설명하세요.

starter-web 자체는 코드가 거의 없고, starter-tomcat·starter-json 같은 하위 starter를 모아 둔 집합 POM입니다. dependency:tree 로 보면 starter-web 아래 이 하위 starter들이 먼저 나열됩니다. 그 아래에 Tomcat 임베디드 서버, Jackson 같은 실제 라이브러리가 다시 나열되어, 전이 의존성이 여러 단계를 거쳐 실제 jar 까지 이어집니다.

문제 5. `build.gradle.kts` 의 scope 를 Maven 표현으로 바꿔 쓰기

이 레슨 폴더의 build.gradle.kts 에서 implementation·runtimeOnly·testImplementation 세 줄을 골라, 각각 Maven pom.xml 의 <dependency> 로 옮겨 쓰세요. scope 값도 함께 적으세요.

xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- scope 생략 시 기본값 compile -->
</dependency>
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.10.2</version>
    <scope>test</scope>
</dependency>

implementation 은 scope 를 생략한 기본 compile 과 같은 자리이고, runtimeOnly 는 runtime, testImplementation 은 test 와 짝이 맞습니다.

연습 문제
    이전 섹션5 자주 하는 실수 (Tip)6 / 7다음 섹션7 정리