프로그램/JAVA

[Spring] Spring boot에서 PostgreSQL 연동하기

프뚜 2022. 10. 29. 10:00
728x90
반응형
SMALL

안녕하세요!

프뚜(프로그래머 뚜)입니다!


[개발 환경]

 - OS: windows 10 64bit

 - DB: PostgreSQL 15.0


1. PostgreSQL 접속하기

설치가 되어있지 않다면 링크를 통해 PostgreSQL 설치하시면 됩니다.


2. DB 계정 생성&권한 부여하기

// 2022.10.28[프뚜]: 계정 생성
CREATE ROLE [USER] WITH LOGIN PASSWORD '[PASSWORD]';

// 2022.10.28[프뚜]: CREATEDB 권한 부여
ALTER USER [USER] WITH CREATEDB;

// 2022.10.28[프뚜]: SUPERUSER 권한 부여
ALTER USER [USER] WITH SUPERUSER;

// 2022.10.28[프뚜]: CREATEROLE 권한 부여
ALTER USER [USER] WITH CREATEROLE;

ssjeong의 계정을 생성했습니다.

 

\du 명령어를 통해 ssjeong 계정이 생성됨을 확인합니다.

 

ssjeong 계정에 권한을 부여합니다.

 

\du 명령어를 통해 ssjeong 계정의 권한 부여가 잘 되었는 지 확인합니다.


3. DB 스키마 생성하기

// 2022.10.28[프뚜]: DATABASE 생성
CREATE DATABASE [DATABASE NAME];

// 2022.10.28[프뚜]: 생성되어 있는 데이터베이스 목록 확인
\l

 


4. 생성한 스키마에 권한 부여하기

GRANT ALL PRIVILEGES ON DATABASE [DATABASE NAME] TO [USER];

 


5. gradle 추가하기

// 2022.10.28[프뚜]: postgreSQL
implementation 'org.postgresql:postgresql:42.5.0'

// 2022.10.28[프뚜]: log4jdbc-log4j2
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'


6. application.properties 추가하기

# 2022.10.28[프뚜]: Datasource Configuration
spring.datasource.hikari.maximum-pool-size=4
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/tistory
spring.datasource.username=ssjeong
spring.datasource.password=ssjeong


7. PostgreSQLConfig Class 생성하기

@Component
public class PostgreSQLConfig implements ApplicationRunner {

    private final DataSource dataSource;
    private final JdbcTemplate jdbcTemplate;

    public PostgreSQLConfig(DataSource dataSource,
                            JdbcTemplate jdbcTemplate) {
        this.dataSource = dataSource;
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        try (Connection connection = dataSource.getConnection()){
            System.out.println("[프뚜] > dataSource Class > " + dataSource.getClass());
            System.out.println("[프뚜] > URL > " + connection.getMetaData().getURL());
            System.out.println("[프뚜] > userName > " + connection.getMetaData().getUserName());

            Statement statement = connection.createStatement();
            String sql = "CREATE TABLE TBL_TEST(NO INTEGER NOT NULL, TEST_NAME VARCHAR(255), PRIMARY KEY (NO))";
            statement.executeUpdate(sql);
        }

        jdbcTemplate.execute("INSERT INTO TBL_TEST VALUES (1, 'ssjeong')");
    }

}

dataSource, jdbcTemplate Bean연결을 합니다.

 

Runner에서 @Override된 run에 정상적으로 연결&실행이 되는 지 테스트합니다.

 

정상적으로 연결됨을 확인할 수 있습니다.

 

\connect [database]로 접속합니다.

 

정상적으로 테이블 생성, 데이터 추가가 완료되었습니다.


전체적인 소스코드는 github에 공유되어있습니다.

(제목과 git history는 1:1 매칭입니다.)

 

https://github.com/JeongSeongSoo/spring-tistory.git

 

GitHub - JeongSeongSoo/spring-tistory

Contribute to JeongSeongSoo/spring-tistory development by creating an account on GitHub.

github.com

728x90
반응형
LIST