티스토리 뷰

psql 설정

psql 시작하기 

Server [localhost]: Enter

Database [postgres]: Enter

Port [5432] : Enter

Username [postgres]: Enter

Password for user postgres: postgres

 

\du : 계정들 리스트와 각 계정의 권한과 역할 확인

처음에는 postgres 밖에 없다. 

create role admin_wj with login password 'admin_wj'; 

admin_wj이라는 계정을 생성한다.

alter user admin_wj with createdb;

방금 만든 admin_wj에게 db를 생성할 수 있는 권한을 준다.

alter user admin_wj with superuser;

superuser권한도 준다.

 

create database shop; 

shop이라는 데이터베이스를 생성한다.

grant all privileges on database shop to admin_wj;

admin_wj에게 shop 데이터베이스에 관한 모든 권한을 부여한다.

\l 

database 리스트를 볼 수 있다. 방금 만든 shop이 있는걸 확인할 수 있다.

 

\connect shop

shop 데이터베이스에 연결한다.

앞에 postgres-# 에서 shop-#으로 바뀌는 걸 확인할 수 있다!

 

 

Spring boot 코드 작성

build.gradle  - dependencies 추가


dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-cache'
    implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-freemarker'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-quartz'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.session:spring-session-jdbc'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
    // https://mvnrepository.com/artifact/org.postgresql/postgresql
    implementation group: 'org.postgresql', name: 'postgresql', version: '42.2.23' // 추가
    runtimeOnly 'org.postgresql:postgresql' // 추가
}

주석에 걸려있는 링크(mvnrepository.com)로 가면 복붙할 코드가 나온다.

나는 gradle 선택!

 

application.yml

server:
  port: 8080

spring:
  web:
    resources:
      static-locations: META-INF:/resources, classpath:/resources, classpath:/static, classpath:/static/dist
  # Database
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/shop
    platform: postgres
    username: admin_wj
    password: admin_wj
  # jpa properties
  jpa:
    hibernate:
      ddl-auto: update # When you launch the application for the first time - switch "none" at "create"
    show-sql: true
    database: postgresql
    database-platform: org.hibernate.dialect.PostgreSQLDialect
    open-in-view: false
    generate-ddl: true

# Database, # jpa properties 부분 추가

postgreSQLRunner.java

package com.example.demo.postgrestest;

import java.sql.Connection;
import java.sql.Statement;

import javax.sql.DataSource;

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;

@Component
public class postgresSQLRunner 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 t_product(product_no INTEGER NOT NULL, product_name VARCHAR(255), PRIMARY KEY (product_no))";
            statement.executeUpdate(sql);
            String sql = "select * from t_product";
            statement.executeUpdate(sql);
        }
        jdbcTemplate.execute("INSERT INTO t_product VALUES (1, 'Big shirt')");
    }
}

 

코드 작성 후 Application.java 우클릭 - Run Java 해주기

 

postgres 연동 성공 시 터미널 창 

연동에 성공하면 터미널창에

jdbc:postgresql://localhost:5432/shop

admin_wj

이런 문구가 출력되는 걸 확인할 수 있다!

psql 터미널 창에서 확인

psql 터미널 창에서 확인해보니 spring boot에서 실행한 코드가 잘 반영된 것을 볼 수 있다.

 

한번더 Run Java로 실행하면 에러남

ERROR: relation "t_product" already exists 

t_product 는 이미 존재하고, primary_key가 동일해지므로 에러가 난다.

 


아래 블로그를 참고하여 Spring boot 와 postgreSQL 연동을 진행하였다. 

DB 연동이 되었으니 이제 CRUD 실습을 할 수 있겠다.

 

 

 

참고 블로그

https://velog.io/@jwpark06/SpringBoot%EC%97%90-JDBC%EB%A1%9C-Postgresql-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0