4-12. PostgreSQL
4-12. PostgreSQL κ΄λ ¨
μμ μκΈ°νλ―μ΄ H2 λ°μ΄ν°λ² μ΄μ€λ κ°λ° λ¨κ³μμλ μ μ©νμ§λ§ μ΄μ νκ²½μμ μ¬μ©νκΈ°μλ λ§μ΄ λΆμ‘±ν λ°μ΄ν°λ² μ΄μ€μ΄λ€. λ°λΌμ 본격μ μΌλ‘ μμ€ν μ μ΄μνκΈ°λ‘ λ§μμ λ¨Ήμλ€λ©΄ H2 λ³΄λ€ μ±λ₯μ΄ μ’μ λ°μ΄ν°λ² μ΄μ€λ₯Ό κ³ λ €ν΄μΌ νλ€. μ€λΌν΄κ³Ό κ°μ μμ© λ°μ΄ν°λ² μ΄μ€λ μμ§λ§ μμ κ·λͺ¨μ μλΉμ€λ€μ λμ²΄λ‘ PostgreSQLμ΄λ MySQL λ±μ λ¬΄λ£ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ£Όλ‘ μ¬μ©νλ€.
μ΄λ² μ₯μμλ PostgreSQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©νλ λ°©λ²μ λν΄μ μμ보μ.
PostgreSQL μ€μΉ
PostgreSQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©νλ λ°©λ²μλ λ κ°μ§κ° μλ€. νλλ AWS μλ²μ μ§μ PostgreSQLμ μ€μΉνμ¬ μ¬μ©νλ κ²μ΄κ³ λ€λ₯Έ νλλ AWSκ° μ 곡νλ λ°μ΄ν°λ² μ΄μ€ μΈμ€ν΄μ€λ₯Ό μ¬μ©νλ λ°©λ²μ΄λ€. νμ§λ§ λ°μ΄ν°λ² μ΄μ€λ₯Ό 곡λΆν λͺ©μ μ΄ μλλΌλ©΄ PostgreSQLμ μ§μ μ€μΉνλ κ²μ κΆμ₯νκ³ μΆμ§ μλ€. λ°μ΄ν°λ² μ΄μ€λ₯Ό μ§μ μ€μΉνκ³ μν©μ λ§κ² νκ²½μ μ€μ νλ κ²μ΄ κ²°μ½ μ¬μ΄ μΌμ΄ μλκΈ° λλ¬Έμ΄λ€.
μ°λ¦¬λ λλ²μ§Έ λ°©λ²μΌλ‘ PostgreSQLμ μ¬μ©ν΄ 보μ.
AWS λΌμ΄νΈμΈμΌμ μ΄μ©νμ¬ PostgreSQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ΄μνλ €λ©΄ νλ¬μ μ½ 15λ¬λ¬μ μΆκ° λΉμ©μ΄ λ°μνλ€. (첫 μΈλ¬μ 무λ£λ‘ μ¬μ©κ°λ₯νλ€.)
λ¨Όμ AWSμ λ‘κ·ΈμΈν ν μΉλΈλΌμ°μ λ‘ λ€μ URLμ μ μνμ.
μ΄ μ± μ μμ±νλ μμ μ PostgreSQL μ΅μ λ²μ μ 12.10μ΄λ€.
β» λ°μ΄ν°λ² μ΄μ€ μμ±μλ λλ΅ 10~15λΆ μ λμ μκ°μ΄ μμλμλ€.
κ·Έλ¦¬κ³ μ΄ νλ©΄μμ "Database-1"μ μ ννμ.
μ°κ²° μΈλΆ μ 보μμλ μ€μν μ 보 3κ°μ§λ₯Ό νμΈν μ μλ€.
- μ¬μ©μ μ΄λ¦: dbmasteruserλ₯Ό νμΈν μ μμ
- μνΈ:
<νμ>
λ₯Ό λλ₯΄λ©΄ μνΈλ₯Ό λ³Ό μ μμ - λ°μ΄ν°λ² μ΄μ€ μ£Όμ: "μλν¬μΈνΈ"λ‘ λ°μ΄ν°λ² μ΄μ€μ λλ©μΈ μ£Όμκ° μ ν μμ
μ΄ μ 보λ SBBμμ PostgreSQLμ μ μν λ νμνλ―λ‘ λ°λμ κΈ°μ΅ν΄ λμ΄μΌ νλ€.
λ°μ΄ν°λ² μ΄μ€ μμ±
AWSμ PostgreSQL μΈμ€ν΄μ€λ₯Ό μμ±νμλ€. μ΄μ μμ±λ PostgreSQL μΈμ€ν΄μ€μ SBB μμ€ν μ΄ μ¬μ©ν "sbb" λ°μ΄ν°λ² μ΄μ€λ₯Ό μμ±ν΄ 보μ.
PostgreSQL ν΄λΌμ΄μΈνΈ μ€μΉ
PostgreSQLμ μ μνκΈ° μν΄μλ λ€μμ²λΌ PostgreSQL ν΄λΌμ΄μΈνΈλ₯Ό λ¨Όμ μ€μΉν΄μΌ νλ€.
sudo apt install postgresql-client
postgresql-client
ν¨ν€μ§λ₯Ό μ€μΉνμλ€. μ΄ ν¨ν€μ§λ₯Ό μ€μΉνλ©΄ createdb
λ psql
λ±μ λͺ
λ Ήμ΄λ₯Ό μ¬μ©ν μ μκ² λλ€.
sbb λ°μ΄ν°λ² μ΄μ€ μμ±
μ΄μ λ€μμ²λΌ createdb
λͺ
λ Ήμ μ€ννμ¬ sbb
λ°μ΄ν°λ² μ΄μ€λ₯Ό μμ±νμ.
createdb sbb --username=dbmasteruser -h <λ°μ΄ν°λ² μ΄μ€μ£Όμ>
<λ°μ΄ν°λ² μ΄μ€μ£Όμ>
λ μμμ κΈ°μ΅ν΄ λ "μλν¬μΈνΈ"μ ν΄λΉλλ λ°μ΄ν°λ² μ΄μ€ μ£Όμμ΄λ€. (<
, >
κΈ°νΈλ λΉΌκ³ μ
λ ₯ν΄μΌ νλ€.)
μ¬μ©μ
createdb sbb --username=dbmasteruser -h ls-be78fd2c2exxxxxxxxxxxxxxxx2c9.cqlcyugj7ibs.ap-northeast-2.rds.amazonaws.com
createdb
λͺ
λ Ήμ μ€ννλ©΄ μνΈλ₯Ό λ¬Όμ΄λ³΄λλ° μμμ κΈ°μ΅ν΄ λ μνΈλ₯Ό μ
λ ₯νλ©΄ λλ€.
λ°μ΄ν°λ² μ΄μ€μ μ μ
μ΄μ μ°λ¦¬κ° λ§λ SBB μλΉμ€μμ sbb λ°μ΄ν°λ² μ΄μ€μ μ μνλ λ°©λ²μ λν΄μ μμ보μ.
PostgreSQL λΌμ΄λΈλ¬λ¦¬ μ€μΉ
SBBμμ PostgreSQL μλ²μ μ μνλ €λ©΄ PostgreSQL λΌμ΄λΈλ¬λ¦¬κ° νμνλ€. λ€μκ³Ό κ°μ΄ build.gradle
νμΌμ μμ νμ¬ PostgreSQL λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€μΉνμ.
// (... μλ΅ ...)
dependencies {
// (... μλ΅ ...)
runtimeOnly 'org.postgresql:postgresql'
}
// (... μλ΅ ...)
μμ κ°μ΄ μμ ν ["Refresh Gradle Project"]
λ₯Ό μ€ννμ.
λ°μ΄ν°λ² μ΄μ€ μ€μ
λ‘컬 μλ²λ κΈ°μ‘΄μ H2 λ°μ΄ν°λ² μ΄μ€λ₯Ό κ·Έλλ‘ μ¬μ©νκ³ μλ²λ§ PostgreSQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©ν΄μΌ νλ―λ‘ application-prod.properties
νμΌλ§ λ€μμ²λΌ μμ νμ.
νμΌλͺ :
/sbb/src/main/resources/
application-prod.properties
# DATABASE
spring.datasource.url=jdbc:postgresql://<λ°μ΄ν°λ² μ΄μ€μ£Όμ>:5432/sbb
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.username=dbmasteruser
spring.datasource.password=<μνΈ>
# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true
# logging
// (... μλ΅ ...)
<λ°μ΄ν°λ² μ΄μ€μ£Όμ>
μ <μνΈ>
λ μμμ κΈ°μ΅ν΄ λ κ°μ μ
λ ₯νλ€. (<
, >
κΈ°νΈλ λΉΌκ³ μ
λ ₯ν΄μΌ νλ€.)
λ°μ΄ν°λ² μ΄μ€ λ³κ²½ νμΈ
μμ κ³Όμ μ μ μ§ννλ€λ©΄ μλ‘μ΄ λ°°ν¬νμΌμ μμ±νμ¬ μλ²μ μ μ©νκ³ stop.sh
, start.sh
μ μ€ννμ¬ SBB μλΉμ€λ₯Ό μ¬μμνμ. λ°μ΄ν°λ² μ΄μ€κ° λ³κ²½λμμΌλ―λ‘ κΈ°μ‘΄μ λ°μ΄ν°λ 보μ΄μ§ μμ κ²μ΄λ€.
spring.jpa.hibernate.ddl-auto
νμ¬ application-prod.properties
νμΌμ spring.jpa.hibernate.ddl-auto
κ°μ update
λ‘ λμ΄ μλ€. update
μ κ²½μ° μν°ν°κ° λ³κ²½λ λλ§λ€ ν
μ΄λΈ λ³κ²½ 쿼리문(DDL λ¬Έ)μ΄ μλμΌλ‘ μ€νλλ€. νμ§λ§ μ΄μ νκ²½μμλ μ‘°κΈ μνν λ°©λ²μ΄λ€. μ΄μνκ²½μμλ ν
μ΄λΈ λ³κ²½ 쿼리λ₯Ό μλμΌλ‘ μ€ννμ§ μκ³ μλμΌλ‘ μ€ννλ κ²μ΄ μμ νλ€. λ°λΌμ μμ νλͺ©λ update
λμ none
λλ validate
λ‘ μ€μ νκΈ°λ₯Ό μΆμ²νλ€.
λ€λ§,
none
λλvalidate
λ‘ λ³κ²½νλ©΄ ν μ΄λΈ λ³κ²½μΏΌλ¦¬λ₯Ό μ§μ μμ±νμ¬ μνν΄μΌ νλ€.
none
: μν°ν°κ° λ³κ²½λλλΌλ λ°μ΄ν°λ² μ΄μ€λ₯Ό λ³κ²½νμ§ μλλ€.validate
: λ³κ²½μ¬νμ΄ μλμ§ κ²μ¬λ§ νλ€.
pgAdmin
H2 λ°μ΄ν°λ² μ΄μ€μ GUI λκ΅¬λ‘ "H2 Console"μ΄ μλ€λ©΄ PostgreSQLμλ pgAdminμ΄ μλ€. λ‘컬 PCμ pgAdmin ν΄λΌμ΄μΈνΈλ₯Ό μ€μΉνμ¬ PostgreSQL μλ²μ μ μν΄ λ³΄μ.
νΌλΈλ¦ λͺ¨λ
μΈλΆμμ PostgreSQL μλ²μ μ μνκΈ° μν΄μλ AWS λ°μ΄ν°λ² μ΄μ€μ λ€νΈμν¬λ₯Ό νΌλΈλ¦ λͺ¨λλ‘ λ³κ²½ν΄μΌ νλ€.
νΌλΈλ¦ λͺ¨λλ₯Ό νμ±ν ν κ²½μ° μ¬μ©μ μ΄λ¦κ³Ό μνΈλ§ μλ©΄ λꡬλ μ μν μ μκΈ° λλ¬Έμ μ£Όμν΄μΌ νλ€.
pgAdmin μ€μΉμ μ¬μ©
pgAdmin λ€μ΄λ‘λ URLμμ pgAdminμ λ΄λ €λ°κ³ μ€μΉνμ.
μ€μΉ κ³Όμ μ κ°λ¨νλ―λ‘ μλ΅νλ€.
λ§μ€ν° ν¨μ€μλλ₯Ό μ€μ νκ³ ["OK"]
λ₯Ό λλ₯Έλ€.
λ§μ€ν° ν¨μ€μλλ pgAdminμμλ§ μ¬μ©νλ λΉλ°λ²νΈμ΄λ€.
κ·Έλ¬λ©΄ λ€μμ²λΌ μλ² λ±λ‘μ°½μ΄ λνλλ€.