코딩/sparta TIL

TIL 40 : JPA 심화 - 프로젝트별 의존성 설명

americanoallday 2025. 5. 1. 14:39

💡 의존성 이란?

  1. compile 시점 의존성: 프로젝트를 컴파일(빌드)할 때 사용됩니다. 즉, 해당 라이브러리의 API를 사용할 수 있습니다.
  2. runtime 시점 의존성: 애플리케이션을 실행할 때 사용됩니다. 즉, 실행 시에도 라이브러리가 필요합니다.
  3. 은닉성: implementation으로 추가된 의존성은 다른 프로젝트 모듈에서 직접 접근할 수 없습니다. 이는 모듈 간의 캡슐화를 도와줍니다. 

💡 의존성 옵션 (build.gradle > dependencies)

  • implemenataion 옵션
    • 직접적인 의존성을 추가할 때 사용됩니다.
    • 이는 특정 라이브러리나 모듈이 프로젝트 컴파일 시 필요하지만, 해당 라이브러리가 프로젝트 외부로 공개될 필요가 없다는 것을 의미합니다.
  • runtimeOnly 옵션
    • compile 시점에는 필요없고 runtime 시점에만 필요한 라이브러리를 추가할 때 사용합니다.
    • 대표적으로 Logging 관련 라이브러리, DB 관련 라이브러리 등이 있습니다.
  • testImplementation 옵션
    • 테스트 코드를 수행할 때 적용할 라이브러리를 추가할 때 사용합니다.
    • 테스트 용도로만 라이브러리나 빌트인 DB 사용하고 싶다면 해당 옵션을 사용하면 됩니다.

 

1. JDBC 프로젝트 세팅 (2가지 의존성 사용)

  • runtimeOnly
    • h2database:h2
      H2는 자바 기반의 인메모리 데이터베이스로, 로컬 개발 및 테스트 환경에서 DB 서버를 별도로 구축하지 않고 사용할 수 있게 해 줍니다. 빠르고 경량이며 설정이 간단하다는 장점이 있습니다.
  • implemenataion
    • spring-boot-starter-jdbc
      이 라이브러리는 스프링 부트 애플리케이션에서 JDBC를 사용하기 위한 모든 필수 의존성을 포함하고 있습니다. JDBC API를 통해 데이터베이스와의 연결 및 SQL 쿼리 실행을 쉽게 할 수 있도록 도와줍니다.
    • spring-boot-starter-web 
      애플리케이션이 종료되지 않고 웹 서버를 띄울 수 있도록 도와줍니다. (H2 Console 웹페이지 띄우기)
      추가하는 것만으로도 웹 애플리케이션이 됨. 
# build.gradle
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    runtimeOnly 'com.h2database:h2'
}

 

2. JDBC Template 프로젝트 세팅

  • runtimeOnly
    • h2database:h2
      위와 동일하게, H2 데이터베이스를 제공하여, 실제 데이터베이스 서버 없이 개발 및 테스트가 가능합니다.
  • implemenataion
    • spring-boot-starter-jdbc
      위와 동일하게, JDBC 연결 및 SQL 관리를 위한 기본적인 도구와 라이브러리를 제공합니다.
    • spring-boot-starter-web
      위와 동일하게, 웹 서버를 띄울 수 있도록 도와줍니다. (H2 Console 웹페이지 띄우기)
# build.gradle
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    runtimeOnly 'com.h2database:h2'
}

 

3. QueryMapper 프로젝트 세팅

  • runtimeOnly
    • h2database:h2
      위와 동일하게, H2 데이터베이스를 제공하여, 실제 데이터베이스 서버 없이 개발 및 테스트가 가능합니다.
  • implemenataion
    • spring-boot-starter-jdbc
      위와 동일하게, JDBC 연결 및 SQL 관리를 위한 기본적인 도구와 라이브러리를 제공합니다.
    • mybatis-spring-boot-starter
      MyBatis는 SQL 매핑 프레임워크로, 개발자가 SQL 문을 XML 혹은 어노테이션을 통해 관리할 수 있게 해 줍니다. 이 스타터 패키지는 스프링 부트 환경에서 MyBatis를 쉽게 통합하고 사용할 수 있도록 도와줍니다.
    • spring-boot-starter-web
      위와 동일하게, 웹 서버를 띄울 수 있도록 도와줍니다. (H2 Console 웹페이지 띄우기)
# build.gradle
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
    runtimeOnly 'com.h2database:h2'
}

 

4. QueryFileMapper 프로젝트 세팅

  • runtimeOnly
    • h2database:h2
      위와 동일하게, H2 데이터베이스를 제공하여, 실제 데이터베이스 서버 없이 개발 및 테스트가 가능합니다.
  • implemenataion
    • spring-boot-starter-jdbc
      위와 동일하게, JDBC 연결 및 SQL 관리를 위한 기본적인 도구와 라이브러리를 제공합니다.
    • mybatis-spring-boot-starter
      위와 동일하게, 스프링 부트 환경에서 MyBatis를 쉽게 통합하고 사용할 수 있도록 도와줍니다.
      이 프로젝트에서는 DAO, Mapper 클래스에 쿼리파일을 매핑시켜주는 역할도 하게됩니다.
    • spring-boot-starter-web
      위와 동일하게, 웹 서버를 띄울 수 있도록 도와줍니다. (H2 Console 웹페이지 띄우기)
# build.gradle
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
    runtimeOnly 'com.h2database:h2'
}

 

5. JPA 프로젝트 세팅

  • runtimeOnly
    • h2database:h2
      이전 설명과 동일하게, 개발 및 테스트용 인메모리 데이터베이스로 사용됩니다.
  • implemenataion
    • spring-boot-starter-jdbc
      JDBC 접근을 위한 기본 설정과 라이브러리를 포함합니다. JPA 설정에서도 내부적으로 JDBC 사용이 필요할 수 있습니다.
    • spring-boot-starter-data-jpa
      이 스타터는 JPA(Java Persistence API)를 사용하여 관계형 데이터베이스를 객체 지향적으로 다룰 수 있게 해 주며, Hibernate 같은 JPA 구현체를 자동으로 설정합니다. 또한, 리포지터리 디자인 패턴의 구현을 쉽게 해 줍니다.
    • querydsl-jpa
      QueryDSL은 타입 안전한 쿼리를 지원하는 프레임워크
      로, 복잡한 쿼리 작성을 보다 쉽고 안전하게 할 수 있습니다. JPA와 함께 사용될 때, 엔티티 객체에 대한 동적 쿼리 생성을 용이하게 해 줍니다.
    • spring-boot-starter-web
      위와 동일하게, 웹 서버를 띄울 수 있도록 도와줍니다. (H2 Console 웹페이지 띄우기)