Postgresql DB 이중화 연결

강동현·2024년 11월 5일

DB

목록 보기
3/3

이번시간에는 postgresql db 구성한 것을 spring boot에 연결해보려고 한다. 저번 시간에 했던 내용을 생각해보면 우리는 db를 pgpool로 트래픽을 분산하고 기본적인 db의 failover를 하도록 구현했다 따라서 spring boot에서는 연결을 할 때 pgpool로 연결하면 된다.

spring boot 설정 파일

#application-local.yml
spring:
  datasource:
      driver-class-name: org.postgresql.Driver
      url: jdbc:postgresql://${local-db.postgres.host}:${local-db.postgres.port}/${local-db.postgres.name}
      username: ${local-db.postgres.username}
      password: ${local-db.postgres.password}
  
  jpa:
    properties:
      hibernate:
        format_sql: true
        highlight_sql: true
        hbm2ddl.auto: create
        default_batch_fetch_size: 100
        dialect: org.hibernate.dialect.PostgreSQLDialect
    open-in-view: false
    show-sql: true
  
  data:
    redis:
      host: ${local-redis.host}
      port: ${local-redis.port}

api:
  uri: http://localhost:6001

logging:
  level:
    org:
      hibernate:
        type: info
        level: info
#application-db.yml
local-db:
  postgres:
    host: localhost
    port: 5432
    name: authentication_management_server
    username: donghyeon
    password: adzc1973

위와 같이 구성해주면 된다. 원래 단일 db를 연결하는 것과 크게 다르지 않다. 그럼 이제 서버 시작을 해보게 되면

위와 같이 제대로 서버가 시작된 모습을 볼 수 있다. 여기서 주의할 점이 복제 사용자로 생성한 사용자가 pgpool에도 설정이 되어있어야 한다는 점이다. 만약 그렇지 않고 그냥 실행하게 되면


복제 사용자에 대한 내용이 없다고 뜨니 이 부분을 주의하자. 혹시 처음 접하는 분들을 위해서 알려주자면 저번 시간에 작성했었던 docker-compose 파일에 환경 변수를 설정할 때

# postgres
POSTGRESQL_POSTGRES_PASSWORD=adminpassword
POSTGRES_USERNAME=donghyeon
POSTGRES_PASSWORD=adzc1973
POSTGRES_DATABASE=authentication_management_server
REPMGR_PASSWORD=adzc1973
REPMGR_PRIMARY_HOST=postgres-primary-0

# postgres port
REPMGR_PRIMARY_PORT=5432
REPMGR_PORT_NUMBER=5432

# redis port
REDIS_PORT_SERVICE1=6380
REDIS_PORT_SERVICE2=6381
REDIS_PORT_SERVICE3=6382

# pgpool
PGPOOL_SR_CHECK_USER=donghyeon
PGPOOL_SR_CHECK_PASSWORD=adzc1973
PGPOOL_POSTGRES_USERNAME=donghyeon
PGPOOL_POSTGRES_PASSWORD=adzc1973
PGPOOL_ADMIN_USERNAME=admin
PGPOOL_ADMIN_PASSWORD=adminpassword

# pgpool port
PGPOOL_PORT=5432

위와 같게 PGPOOL_SR_CHECK_USER, PGPOOL_SR_CHECK_PASSWORD, PGPOOL_POSTGRES_USERNAME, PGPOOL_POSTGRES_PASSWORD가 복제 사용자로 작성해주자.

다음 경로에 들어가보자. /opt/bitnami/postgresql/conf/pg_hba.conf 파일에 들어가보면

기본적으로 암호화가 md5로 이루어지는 것을 볼 수 있다.

postgresql에서는 기본적으로 SCRAM-SHA-256이 알고리즘을 사용하지만 왜 md5를 사용하는지 의문이 들 수 있다.

postgresql 버전과 호환성을 유지하기 위해 md5를 기본으로 사용하기 때문이다.

그래도 SCRAM-SHA-256를 사용해서 암호화를 하는게 더 안전하지 않나? 라고 생각할 수 있지만 pgpool과 postgresql은 내부 네트워크에서 이루어지기 때문에 md5 인증만 해도 충분히 안전할 수 있다.
하지만 외부 연결을 한다? 그럼 SCRAM-SHA-256를 고려해볼 필요가 있다.

profile
초심으로 돌아가자...

0개의 댓글