[Spring Boot #23] 스프링 부트 PostgreSQL 연동하기

2021. 3. 25. 00:57 Spring Framework/Spring boot #2

| 스프링 부트 PostgreSQL 연동하기

 

MySQL 연동하는 법과 유사하므로 다음 글을 참조하시면 좋습니다.

[Spring Framework/Spring boot2] - [Spring Boot #22] 스프링 부트 DBCP 및 MySQL 연동해보기

 

프로젝트 구조

├── pom.xml
├── spring-boot-tutorial.iml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── tutorial
│   │   │           └── springboottutorial
│   │   │               ├── PostgreSQLRunner.java
│   │   │               └── SpringBootTutorialApplication.java
│   │   └── resources
│   │       ├── application.properties
│   │       ├── static
│   │       └── templates

 

의존성 추가

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
</dependencies>

 

설정 파일

# application.properties
spring.datasource.hikari.maximum-pool-size=4

spring.datasource.url=jdbc:postgresql://localhost:5432/springboot
spring.datasource.username=saelobi
spring.datasource.password=pass

 

 

소스 코드

@SpringBootApplication
public class SpringBootTutorialApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootTutorialApplication.class, args);
    }

}

 

@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(connection);
            String URL = connection.getMetaData().getURL();
            System.out.println(URL);
            String User = connection.getMetaData().getUserName();
            System.out.println(User);

            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, 'saelobi')");
    }
}

 

| PostgreSQL 도커 띄우기 - 리눅스

 

docker run -p 5432:5432 -e POSTGRES_PASSWORD=pass -e POSTGRES_USER=saelobi -e POSTGRES_DB=springboot \
--name postgres_boot -e POSTGRES_PASSWORD=pass -d postgres

postgres 이미지를 실행하기 위한 명령어 입니다.

 

docker exec -i -t postgres_boot bash

실행된 도커의 bash shell에 접속하기 위한 명령어입니다.

 

su - postgres
psql springboot -U saelobi

postgres로 유저명을 바꾸고 난 후 saelobi 계정으로 docker 커맨드 옵션에 입력했던 springboot DB에 접속할 수 있습니다.

 

위 소스 코드를 실행하고 나면 다음과 같이 테이블과 한 건의 데이터가 삽입된 것을 알 수 있습니다.

springboot=# \dt
List of relations
Schema |  Name   | Type  |  Owner
--------+---------+-------+---------
public | account | table | saelobi
(1 row)

springboot=# select * from account;
id |  name
----+---------
1 | saelobi
(1 row)

 

참고자료 : https://www.inflearn.com/course/스프링부트



출처: https://engkimbs.tistory.com/789?category=767865 [새로비]