이제 Postgresql 을 설치하고, 앞에서 구현한 Spring boot application 에 연동하는 방법을 알아보겠습니다. 아래의 Link 로 이동해 OS 에 맞는 설치파일을 다운로드 하세요.
Link : https://www.postgresql.org/download/
저는 windows version 을 다운로드 했습니다.
다운로드가 완료되면 파일을 실행, 설치를 진행합니다.
Next Click!
경로를 확인하고 Next Click!
전체 구성요소를 선택하고 Next Click!
Data Directory 를 확인하고 Next Click!
superuser 의 Password 를 입력하고 Next Click!
Port 를 확인하고 Next Click! 저는 15432 로 설정했습니다.
Locale 을 Korean, Korea 로 선택하고 Next Click!
이제 나머지는 모두 Next 를 클릭하면 설치가 완료됩니다.
IntelliJ 로 DB 연결을 해도 되지만, 보다 편리한 Database tool 인 DBeaver 를 설치하도록 하겠습니다.(무료) 아래의 Link 로 이동하여 OS에 맞는 Community version 파일을 다운 받으세요.
Link : https://dbeaver.io/download/
설치 완료 후 연결을 확인합니다.
연결 후에 test_db Database를 생성 합니다.
test_db 에 모든 권한을 갖는 계정도 생성해 줍니다. (geonlee / geonlee 로 생성)
CREATE USER ${userName} PASSWORD '${password}' SUPERUSER;
GRANT ALL PRIVILEGES ON DATABASE ${database} TO ${userName};
기본적인 DB 설정이 끝났습니다. 이제 IntelliJ 를 실행하고, gradle.build 및 application.yml 파일을 열어 DB관련 설정을 추가해 줍니다.
gradle.build dependencies 에 Postgresql connector 를 추가합니다.
gradle.build 파일 변경 후에는 항상 Ctrl + Shift + O 를 눌러 gradle 의 변경사항을 로드해주세요.
implementation group: 'org.postgresql', name: 'postgresql', version: '42.7.3'
runtimeOnly 'org.postgresql:postgresql'
application.yml 에 DBCP(Database Connection Pool) 관련 설정을 추가합니다.
주석# 이 달린 부분이 추가된 부분입니다.
spring:
application:
name: api
profiles:
active: dev
datasource:
hikari: #Connection pooling을 제공하는 JDBC DataSource의 구현체인 hikari 관련 설정
connection-timeout: 3000
validation-timeout: 3000
max-lifetime: 240000
server:
port: 13713
servlet:
context-path: /my-api
encoding:
charset: utf-8
enabled: true
force: true
---
spring:
config:
activate:
on-profile: dev
datasource:
url: "jdbc:postgresql://localhost:15432/test_db"
driver-class-name: "org.postgresql.Driver"
username: "geonlee"
password: "geonlee"
hikari: #Connection pool 개수 설정
minimum-idle: 2
maximum-pool-size: 2
---
spring:
config:
activate:
on-profile: prod
이제 DB 관련 설정은 끝났습니다. 다음에는 몇몇 테이블을 생성하고 JPA 를 연동해 보도록 하겠습니다.😁
DBCP 는 DB와 커넥션을 맺고 있는 객체를 관리하는 역할을 합니다.
JDBC만을 사용할 경우라면 DB접속 시 아래와 같은 순서가 반복되게 됩니다.
여기서 비효율적인 부분은 1번과 2번 입니다.
DB 연결 시 마다 Driver를 로드하고 커넥션 객체를 얻는 작업을 반복하죠.
이 부분을 효율적으로 처리하도록 바꾸는 것이 DBCP의 역할 입니다.
DBCP를 사용하게 되면,
Application 실행 시 미리 일정량의 DB Connection 객체를 생성하고 Pool 이라는 공간에 저장해 둡니다. 그리고 DB 연결 요청이 있으면, 이 Pool 이라는 공간에서 Connection 객체를 가져다 쓰고 반환 하게 됩니다.
logging:
level:
org.hibernate.SQL: info
root: info
com.zaxxer.hikari.pool.HikariPool: debug