Spring boot 프로젝트 세팅 (의존성)
의존성이란?
1. compile 시점의 의존성 : 프로젝트를 컴파일 할 때 마다 사용됨
= 해당 라이브러리의 API를 사용할 수 있음
2. runtime 시점의 의존성 : 어플리케이션을 실행할 때 사용됨
= 실행 시에도 라이브러리가 필요함
3. 은닉성 : implementation 으로 추가된 의존성은 다른 프로젝트 모듈에서 직접 접근 불가능. 모듈간의 캡슐화 도와줌
의존성 옵션 (build.gradle > dependencies)
implementation 옵션
- 직접적인 의존성을 추가할 때 사용
- 특정 라이브러리나 모듈이 프로젝트 컴파일 시 필요하지만, 해당 라이브러리가 프로젝트 외부로 공개될 필요가 없다는 것을 의미
runtimeOnly 옵션
- compile 시점에는 필요없고 runtime 시점에만 필요한 라이브러리를 추가할 때 사용
- 대표적으로는 Logging 관련 라이브러리, DB 관련 라이브러리 등이 있음
testImplementation 옵션
- 테스트 코드를 수행할 때 적용할 라이브러리를 추가할 때 사용
- 테스트 용도로만 라이브러리나 빌트인 DB 를 사용하고 싶다면 해당 옵션 사용
종류
implementation
spring-boot-starter-jdbc
스프링 부트 어플리케이션에서 JDBC를 사용하기 위한 모든 필수 의존성 포함하는 라이브러리
JDBC API를 통해 데이터베이스와의 연결 및 SQL 쿼리 실행을 쉽게 할 수 있도록 도와줌
spring-boot-starter-web
어플리케이션이 종료되지 않고 웹 서버를 띄울 수 있도록 도와줌
mybatis-spring-boot-starter
스프링 부트 환경에서 MyBatis 를 쉽게 통합하고 사용할 수 있도록 도와줌
MyBatis는 SQL 매핑 프레임워크 - 개발자가 SQL문을 XML혹은 어노테이션을 통해 관리할 수 있게 해줌
DAO, Mapper 클래스에 쿼리 파일을 매핑 시켜주는 역할
spring-boot-starter-data-jpa
JPA(Java Persistence API)를 사용해 관계형 데이터베이스를 객체 지향적으로 다룰 수 있게 해줌
Hibernate와 같은 JPA 구현체를 자동으로 설정
리포지터리 디자인 패턴의 구현을 쉽게 해줌
querydsl-jpa
QueryDSL - 타입 안전한 쿼리를 지원하는 프레임워크, 복잡한 쿼리 작성을 보다 쉽고 안전하게 할 수 있음
JPA 와 함께 사용될 때, 엔티티 객체에 대한 동적 쿼리 생성을 용이하게 해줌
runtimeOnly
h2database:h2
h2는 자바 기반의 인메모리 데이터베이스, 로컬 개발 및 테스트 환경에서 DB 서버를 별도로 구축하지 않고 사용할 수 있게 해 줌
빠르고 경량이며 설정이 간단함
< 프로젝트 세팅 >
JDBC
# build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
}
JDBC Template
# build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
}
QueryMapper
# 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'
}
QueryFileMapper
# 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'
}
JPA
dependencies {
// PostgreSQL 의존성 추가
implementation 'org.postgresql:postgresql:42.2.27'
// 4. SpringBoot 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
// JUNIT 테스트를 위한 기본 의존성
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
// 5. JDBC Template 등.. Spring 의존성을 받기위한 의존성
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// 6. MyBatis 실습을 위한 의존성
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.0'
testCompileClasspath 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.1'
runtimeOnly 'org.postgresql:postgresql'
// 7. 개발편의를 위한 Lombok 의존성 추가
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// 8. RawJPA 적용을 위한 의존성
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// 9. QueryDSL 적용을 위한 의존성 (SpringBoot3.0 부터는 jakarta 사용해야함)
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// H2는 자바 기반의 인메모리 데이터베이스로,
// 로컬 개발 및 테스트 환경에서 DB 서버를 별도로 구축하지 않고 사용할 수 있게 해 줍니다.
// 빠르고 경량이며 설정이 간단하다는 장점이 있습니다.
runtimeOnly 'com.h2database:h2'
// 10. FixtureMonkey 적용을 위한 의존성
testImplementation 'com.navercorp.fixturemonkey:fixture-monkey-starter:1.0.19'
}