SQL/Postgresql

스프링 부트 postgresql 연동하기

삐뚤어진 개발자 2020. 9. 28.

스프링 부트(spring boot) postgresql 연동하기

스프링 부트 개발을 하면서, 디비가 필요해 졌습니다. 

스프링 부트 프로젝트에 postgresql 데이터 베이스를 연동하여 테스트 해보겠습니다.

 

 

사전 준비 / 의존성 추가

먼저 스프링 부트 프로젝트, postgresql, docker 프로그램이 필요합니다. 

 

그리고 build.gradle에 의존성을 추가해줍니다. dependencies 영역에 추가하면 됩니다.

저는 gradle을 사용했지만 pom을 사용하시는 분들은 pom.xml에 의존석을 추가해주면 됩니다.

 

bulid.gradle

dependencies {
	
    ...
    
	//postgresql
	compile group: 'org.postgresql', name: 'postgresql', version: '42.2.16'
	// Logging
	compile group: 'org.bgee.log4jdbc-log4j2', name: 'log4jdbc-log4j2-jdbc4.1', version: '1.16'
}

 

그리고 application.properties에 아래의 내용을 추가해줍니다.

 

application.properties

...

#Datasource Configuration
spring.datasource.sql-script-encoding=utf-8
spring.datasource.initialization-mode=always
spring.datasource.platform=postgres
spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:postgresql://hostname:5431/coupapi
spring.datasource.username=postgres
spring.datasource.password=db패스워드

#JPA Configuration
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false

 

주의 할점은 아래와 같이 postrgresql 데이터 베이스 접속 정보 입니다.

hostname은 서버가 있으시면 서버의 도메인이나 ip주소를 입력하시면 되고,  5431 포트는 도커로 실행시킬 포트를 설정해주시면 됩니다. 그다음 /뒤에 오는 것은 db 이름입니다. (coupapi는 postgresql 데이터 베이스 이름입니다)

 

spring.datasource.url=jdbc:log4jdbc:postgresql://hostname:5431/coupapi
spring.datasource.username=postgres
spring.datasource.password=db패스워드

 

도커 실행 (postgresql 데이터 베이스 서버)

 

도커를 이용해 postgresql 서버를 실행해줍니다.

docker run -p 5431:5432 -e POSTGRES_PASSWORD=비밀번호 -e POSTGRES_USER=postgres -e POSTGRES_DB=coupapi --name postgres_server -d postgres

 

 

스프링 부트 테스트 코드 작성 및 실행

클래스를 생성하여, 테스트 코드를 작성합니다.

테스트 코드 작성후 스프링 부트 프로젝트를 실행하면 에러가 뜨거나 성공적으로 돌아가겠죠?

 

PostgreSQLRunner.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.Statement;

@Component
public class PostgreSQLRunner implements ApplicationRunner {
    @Autowired
    DataSource dataSource;

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        try (Connection connection = dataSource.getConnection()){
            System.out.println(dataSource.getClass());
            System.out.println(connection.getMetaData().getURL());
            System.out.println(connection.getMetaData().getUserName());

            Statement statement = connection.createStatement();
            String sql = "CREATE TABLE account(ID INTEGER NOT NULL, name VARCHAR(255), PRIMARY KEY (id))";
            statement.executeUpdate(sql);
        }
        jdbcTemplate.execute("INSERT INTO account VALUES (1, 'dsunni')");
    }

}

 

연동이 되어 위의 코드가 정상적으로 돌아갔다면, account라는 테이블이 생성되고 그 안에 1, ringobee 데이터가 들어가 있을 겁니다.

 

 

 

 

긴글 읽어 주셔서 감사합니다.

더 궁금하신 사항은 댓글로 문의해주시면 빠르게 답변드리겠습니다.

 

 

댓글