욱'S 노트

Spring Boot - 데이터베이스 연동 본문

Programming/Spring Boot

Spring Boot - 데이터베이스 연동

devsun 2015. 4. 9. 10:00

스프링 프레임워크는 SQL 데이터베이스와 연동을 지원한다. JdbcTemplate을 이용한 직접적인 JDBC 접근부터 Hibernate와 같은 OR 매핑까지 완전하게 지원한다. Spring Data는 추가적인 기능을 제공하는데 인터페이스로 부터 직접인 Repository를 생성해 메소드명의 규칙에 따라 쿼리를 생성하기도 한다.


자바에서는 javax.sql.DataSource 인터페이스를 통해 데이터베이스 연결과 연동할 수 있는 표준 메소드를 제공한다. 전통적으로 데이터소스는 데이터베이스 연결을 위해 URL과 부가적인 인증정보를 사용한다.



Embedded 데이터베이스 지원


어플리케이션 개발시에는 인메모리 임베디드 데이터베이스가 편리하다. 기본적으로 인메모리 데이터베이스는 퍼시스턴트 스토리지를 제공하지 않는다. 어플리케이션이 시작할때 데이터베이스를 구성하고 준비한 다음 어플리케이션이 종료할 때 버리는 개념이다.


Spring Boot에서는 H2, HSQL 그리고 Derby에 대한 자동설정을 지원한다. 임베디드 데이터베이스에 대한 디펜던시만 가진다면 어떤 연결 URL도 제공할 필요가 없다.


<dependency>

<groupId>org.springframework.boot</groupId> 

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency>

<groupId>org.hsqldb</groupId> 

<artifactId>hsqldb</artifactId> 

<scope>runtime</scope>

</dependency>



프로덕션 데이터베이스 연결


프로덕션 데이터베이스 연결도 pooling 데이터소스를 이용하여 자동으로 설정할 수 있다. 여기에 어떤 구현체를 설정하기 위한 알고리즘이 있다.


Tomcat pooling Datasource가 성능 및 동시성 측면에서 가장 만족스럽기에 기본으로 선택한다.

HikariCP를 사용하고 싶다면 가능하다.

Commons DBCP는 사용가능하나 프로덕션 상황에서는 권고하지 않는다.


만약 spring-boot-starter-jdbc나 spring-boot-starter-data-jpa를 사용한다면 자동으로 tomcat-jdbc에 대한 디펜던시를 가지고 온다.


데이터소스 설정은 spring.datasource.*의 설정된 외부의 설정 프로퍼티에 의해 변경할 수 잇다. 예를 들어 application.properties에 다음과 같이 정의할 수 있다.


spring.datasource.url=jdbc:mysql://localhost/test 

spring.datasource.username=dbuser 

spring.datasource.password=dbpass 

spring.datasource.driver-class-name=com.mysql.jdbc.Driver


종종 driver-class-name은 명시할 필요가 없다. Spring Boot는 url로 부터 대부분의 데이터베이스를 찾아낸다.



JNDI 데이터소스 연결


만약 Spring Boot Application이 어플리케이션 서버에 배포되었을 때, 어플리케이션 서버에 빌트인된 데이터소스를 사용하고 경우가 있다. 이러한 경우 JNDI를 이용하여 접근할 수 있다. spring.datasource.jndi-name 프로퍼티를 이용하여 JNDI location을 명시할 수 있다. 다음 예는 JBoss AS에 정의된 데이터소스에 접근하기 위한 설정이다.


spring.datasource.jndi-name=java:jboss/datasources/customers



JdbcTemplate 사용


Spring JdbcTemplate과 NamedParameterJdbcTemplate는 자동 설정되고 빈에서 직접 인젝션 받을 수 있다.

@Component
public class MyBean {
private final JdbcTemplate jdbcTemplate;

@Autowired
public MyBean(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// ...
}


JPA 와 Spring Data


JPA는 관계형 데이터베이스와 객체를 매핑하기위한 표준 기술이다. spring-boot-starter-data-jpa에 디펜던시를 가지고 있으면 자동적으로 다음과 같은 요소들에 디펜던시를 가진다.

  • Hibernate - 가장 유명한 JPA 구현체
  • Spring Data JPA - JPA기반 리파지토리 구현을 쉽게 만들어준다.
  • Spring ORMs - Spring 프레임워크에서 제공하는 핵심 ORM

기본적으로 임베디드 데이터베이스를 이용한다면 JPA 데이터베이스는 자동적으로 생성된다.  명시적으로 spring.jpa.* 프로퍼티를 이용하여 설정할 수 있다. application.properties에 테이블 생성 및 삭제를 추가한 예이다.

spring.jpa.hibernate.ddl-auto=create-drop

Hibernate는 hiberante.hbm2ddl.auto라는 내부 프로퍼티명을 가지고 있다. spring.jpa.properties.*를 사용하여 hibernate native 프로퍼터를 접근할 수 있다.

spring.jpa.properties.hibernate.globally_quoted_identifiers=true



'Programming > Spring Boot' 카테고리의 다른 글

Spring Boot - SpringApplication  (0) 2015.06.03
Spring Boot - 프로젝트 구성하기  (0) 2015.03.23
Spring Boot - 빌드시스템  (0) 2015.03.23
Spring Boot - 시작하기  (1) 2015.03.23
Comments