본문 바로가기
DBMS

[PostgreSQL 설치와 운영] #2. postgresql.conf 설정하기

by 이미존재 2022. 10. 12.
반응형

■ PostgreSQL의 환경 설정 파일인 postgresql.conf 설정하기(Ubuntu 22.04 LTS에서 apt로 설치된 환경)

 

 ▶ postgresql.conf 파일은 이름 그대로 PostgreSQL의 설정 관련 내용들을 정의하는 파일입니다.
  - 위치 : 기본적으로 /etc 밑에 postgresql 경로에 있습니다. 예)  /etc/postgresql/버전/main/postgresql.conf

 ▶ pg_hba.conf 파일은 클라이언트의 인증관련 설정을 정의하는 파일입니다.
  - 위치 : 기본적으로 /etc 밑에 postgresql 경로에 있습니다. 예)  /etc/postgresql/버전/main/pg_hba.conf

 ▶ PostgreSQL 홈페이지의 문서를 참고 하시면 더욱 많은 정보를 얻을 수 있습니다.

  - 참고 및 출처 : https://www.postgresql.org/docs/ 

PostgreSQL Config File

1. postgresql.conf 설정

 1) 개요 
  - 버전마다 다르기는 하나 800라인에 이르는 많은 양의 내용입니다. 이번 포스팅에서는 기본 설정들만 확인해 보겠습니다.
  - 파일내에 설정 내용 중 주석처리 '#' 되어 있는 설정 값은 디폴트 값이며 변경시 주석을 제거하거 변경하면 됩니다.
  - 실제로 대부분 디폴트로 두고 몇몇 필수 설정들만 해주면 됩니다.

 2) FILE LOCATIONS
  - 환경 변수의 기본값을 설정하는 부분으로 옵션 또는 파일의 디렉토리 경로 등을 설정합니다.
  - 주요 설정 부분은 아래와 같습니다.

data_directory = '/var/lib/postgresql/14/main'             # use data in another directory
                                                                                   # (change requires restart) 
                                                                                   #   => 데이터 디렉토리 설정입니다. 
                                                                                   # 데이터 양이 많을 경우 경로를 변경합니다.        

hba_file = '/etc/postgresql/14/main/pg_hba.conf'       # host-based authentication file
                                                                                   # (change requires restart) 
                                                                                   #  => 클라이언트 접속 인증관련 설정
                                                                                   # 파일 위치입니다. 기본 위치 사용을 권장합니다.

ident_file = '/etc/postgresql/14/main/pg_ident.conf'    # ident configuration file => inden 설정 파일 위치입니다. 
                                                                                    # 외부 사용자 이름을 해당 Postgre에 매핑할때 사용합니다.

                                                                                    # (change requires restart) 
                                                                                    # 기본 위치 사용을 권장합니다. 

# If external_pid_file is not explicitly set, no extra PID file is written.
external_pid_file = '/var/run/postgresql/14-main.pid'    # write an extra PID file
                                                                                     # => PID가 생성되는 위치를 설정합니다. 
   
                                                                                     # (change requires restart)  기본 위치 사용을 권장합니다. 

PostgreSQL PID 확인


 3) CONNECTIONS AND AUTHEN
  - 접속과 인증 관련 부분을 설정하는 부분입니다. 기본 설정의 가장 중요한 부분이기도 합니다.
  - 주요 설정 부분은 아래와 같습니다.
  - Connection Settings -

#listen_addresses = 'localhost'        # what IP address(es) to listen on; 
                                                         #  => Listen 허용 IP를 설정합니다. 
listen_addresses = '*'                       # what IP address(es) to listen on; 
                                                         # comma-separated list of addresses; 
                                                         # (change requires restart)
                                                         #  '*'는 사용 가능한 모든 IP에서 수신허용
                                                         #  '0.0.0.0'은 IPv4 수신허용, '::'는 IPv6 주소 수신허용 입니다.

                                                         #  여기서는 '*'로 설정하여 모든 IP를 수신하고, 
                                                         #  pg_hba.conf 파일에서 특정 허용 IP를 
                                                         # 설정 할 수 있습니다.
port = 5432                                       # (change requires restart) 
                                                         # => 데이터베이스의 서비스 포트(Listening tcp port)를
                                                         #      설정합니다.

max_connections = 100                   # (change requires restart)
                                                         # => 최대 동시 연결 수(1~262143)를 설정 합니다.
                                                         # 기본은 100이며 상황에 따라 설정 합니다.

#superuser_reserved_connections = 3     # (change requires restart)
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories 
                                                         # => 서버가 클라이언트  
                                                         # 애플리케이션 연결을 listen하는 도메인 소켓의
                                                         # 디렉터리를 지정합니다.
                                                         #
 값을 빈칸으로 두면 Unix 도메인 소켓에서 일절 listen하지 않습니다.

  - 나머지는 default로 둡니다.(TCP, Authentication, SSL)

# - TCP settings -
#tcp_keepalives_idle = 0      TCP_KEEPIDLE, in seconds;
                                         # 0 selects the system default 
                                         #  => TCP가 keepalive 메시지를 클라이언트에 전송하기
                                         #  전에 비활성화 상태로 대기하는 초 수
#tcp_keepalives_interval = 0     # TCP_KEEPINTVL, in seconds;
                                         # 0 selects the system default 
                                         # => 클라이언트에 의해 승인되지 않은 TCP keepalive 
                                         # 메시지를 재전송하기 전에 대기하는 초 수
#tcp_keepalives_count = 0               # TCP_KEEPCNT;  
                                                          # 0 selects the system default
                                                          # => 몇 개의 TCP keepalive를 분실해야 클라이언트와 서버의 
                                                          # 연결 상태를 dead로 판단하는 기준이 되는 지를 정한다
#tcp_user_timeout = 0                      # TCP_USER_TIMEOUT, in milliseconds;
                                                          # 0 selects the system default
#client_connection_check_interval = 0   # time between checks for client
                                                          # disconnection while running queries;
                                                          # 0 for never


# - Authentication -

#authentication_timeout = 1min                  # 1s-600s  => 클라이언트 인증이 완료되는 최대 시간
#password_encryption = scram-sha-256    # scram-sha-256 or md5   => 패스워드 암호화 알고리즘
#db_user_namespace = off

# GSSAPI using Kerberos
#krb_server_keyfile = 'FILE:${sysconfdir}/krb5.keytab'
#krb_caseins_users = off

# - SSL -

#ssl = off                        #  => 보안 강화를 위한 클라이언트/서버 통신을 암호화하는 기본적인 지원. 
                                       # 일단 off로 두었습니다.
#ssl_ca_file = ''
#ssl_cert_file = '/etc/ssl/certs/ssl-cert-snakeoil.pem'  # 
                                       #  => 서버 인증서. 클라이언트로 전송되어 서버 ID 표시
#ssl_crl_file = ''
#ssl_crl_dir = ''
#ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'  #
                                       # => 서버 개인 키. 소유자가 보낸 서버 인증서 검증; 
                                       #   인증서 소유자가 믿을만하다는 것을 나타내지는 않음


 4) RESOURCE USAGE (except WAL)
  - 메모리, 디스크 I/O 등을 설정하는 부분입니다. 튜닝을 위한 부분으로 튜닝 포스팅에서 다시 다룰 예정입니다.
  - shared buffer는 많은 사용자의 동시 접근할때의 경합 최소화 하기 위함이며, 자주 사용되는 블록은 최대한 버퍼 내에서 동작하도록 설정합니다.
  - 주요 설정 부분은 아래와 같습니다.

shared_buffers = 128MB # min 128kB           <= 서버에서 사용하는 공유 메모리 값을 설정합니다. 
                                        # (change requires restart)      이 값은 서버 시작시에만 설정 가능합니다.
                                        #                               데이터베이스에 사용할 메모리의 1/4 ~ 1/3 정도 할당합니다.
                                        #                               보통 25%를 할당합니다. 40% 이상은 권장하지 않습니다.
                                        #                                8GB 데이타베이스 전용 서버의 경우 2GB를 할당 합니다.
dynamic_shared_memory_type = posix      # the default is the first option  <= 동적 공유 메모리 구현              
                                        # supported by the operating system:                        방법을 선택 합니다. 



 5) WRITE-AHEAD LOG
  - WRITE-AHEAD LOG(WAL)는 데이터 무결성을 보장하는 표준 방법입니다. 변경 내용을 설명하는 로그 레코드를 영구적 저장소에 먼저 기록한 후에 데이터 파일(테이블과 인덱스가 있는)의 변경 내용을 작성해야 한다는 형식입니다. 이것은 롤포워드roll-forward 복구이며, 오라클의 REDO와 같은 내용입니다.
  - 주요 설정 부분은 아래와 같습니다.

# - Settings -
wal_level = replica                  # minimal, replica, or logical
                                                # (change requires restart) 
                                                #  => WAL에 기록되는 정보의 양을 결정합니다. 
                                                # 아카이브모드 사용시 replica 이상을 사용해야 합니다.

                                                # replica는 트랜잭션 로그를 복구용으로 쓰기위해 따로 보관하고,
                                                # 대기 서버에서 읽기 전용 쿼리에 필요한 정보를 추가합니다.
#wal_buffers = -1                    # min 32kB, -1 sets based on shared_buffers
                                                # (change requires restart)

# - Checkpoints -
#checkpoint_timeout = 5min     # range 30s-1d => 자동 WAL checkpoints 간의 최대 시간. 
                                                  #                             초 단위 (30초 ~ 하루). 기본값은 5분으로 합니다.
#checkpoint_completion_target = 0.9     # checkpoint target duration, 0.0 - 1.0
max_wal_size = 1GB              # => 체크포인트 작업을 자동으로 진행할 WAL 최대 크기를 말하며
                                                #       기본값을 사용합니다.
                                                #      너무 커지면 복구 작업이 길어 질 수 있습니다.
min_wal_size = 80MB             # => WAL 조각 파일들은 더 이상 보관할 필요가 없어지면, 
                                                #    지워지지 않고 앞으로 사용될 파일로 그 이름이 변경됩니다.
                                                #      기본값 사용

# - Archiving -

#archive_mode = off     # 
archive_mode = on       # enables archiving; off, on, or always => 아카이브 모드 사용시 on으로 바꿉니다. 
                                     # (change requires restart)                        완료된 WAL 세그먼트가
                                     #                                                                 archive_command 설정에 의해 
                                     #                                                                 아카이브 저장소로 전달됩니다.
#archive_command = ''           # command to use to archive a logfile segment
archive_command = 'cp %p /var/lib/postgresql/14/main/archive/%f' 
                                     # command to use to archive a logfile segment 
                                     # placeholders: %p = path of file to archive
                                     #  %f = file name only
                                     # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' 

                                     #  => 아카이브하기 위해 실행하는 로컬 쉘 명령
                                     # string에서 %p는 아카이브할 파일의 경로명으로 대체되고
                                     #  %f는 파일명으로만 대체됩니다 
                                     #  (경로명은 서버(예: 클러스터의 데이터 디렉터리)의 작업 
                                     #   디렉터리에 상대적이다.) 

archive_timeout = 1      # force a logfile segment switch after this 
                                      #  => 아카이브 되지 않고 데이터가 남아 있는 경우를 
                                      #       방지하기 위해 설정합니다. 60 ~ 120 초 사이로 설정

archive 파일 생성 결과

 6) REPLICATION
  - 복제 및 이중화 관련 설정 부분입니다.
  - 이중화 구성 부분은 별도 포스팅에서 다룰 예정입니다.


 7) QUERY TUNING
  - 이번 포스팅에서는 다루지 않습니다.


 8) REPORTING AND LOGGING
  - 데이터베이스 로그 설정 관련 부분입니다. 로그 레벨, 위치, 로테이션 등의 정보를 설정 합니다.
  - 로그 관련 부분은 설정 내용이 많아 다음 포스팅에서 별도로 다루겠습니다.


 9) PROCESS TITL
  - 서버 프로세스들의 상태가 바뀔 때, 프로세스 이름을 어떻게 표시할지 설정합니다.

cluster_name = '14/main'   # added to process titles if nonempty => 해당 클러스터에 속한 모든 서버 프로세스 
                                           # (change requires restart)                        제목에 이름을 포함해서 보여줍니다.

프로세스 타이틀명 적용

10) STATISTICS
  - 데이터베이스 쿼리 및 인덱스 통계 수집과 관련된 설정 부분입니다. PostgreSQL의 통계 수집기는 서버 활동에 대한 정보 수집 및 보고를 지원하는 하위 시스템입니다.

 stats_temp_directory = '/var/run/postgresql/14-main.pg_stat_tmp' #
                                                                #     => 임시 통계 데이터를 저장할 디렉터리를 설정합니다. 
#stats_temp_directory = 'pg_stat_tmp'               기본값은 pg_stat_tmp

 11) AUTOVACUUM
  - PostgreSQL의 기능 중 하나인 Autovacuum 이라는 기능과 관련하여 설정하는 부분입니다.
  - 데이터베이스의 트랜잭션이 증가하였을 때 느려지는 성능을 개선하는 방법입니다.
  - 데이터베이스의 튜닝과 관련된 부분으로 튜닝 포스팅에서 다시 다룰 예정입니다.


 12) CLIENT CONNECTION DEFAULTS
  - 클라이언트 접속관련 기본 값을 설정합니다.

 # These settings are initialized by initdb, but they can be changed.
lc_messages = 'C'                        # locale for system error message 
                                                     # strings
                                                     #  => 메시지가 표시되는 언어를 설정합니다. 
lc_monetary = 'ko_KR.UTF-8'      # locale for monetary formatting
                                                     # => 통화 형식 지정에 사용되는 로케일(locale)을 지정합니다. 
                                                     #      한국어 UTF-8로 변경했습니다.
                                                     #      ko_KR.UTF-8로 설정하려면 한국어가
                                                     #     설치 되어야 오류가 나지 않습니다.
lc_numeric = 'ko_KR.UTF-8'        # locale for number formatting
                                                     # => 숫자 형식 지정에 사용되는 로케일(locale)을 지정합니다. 
                                                     #      한국어 UTF-8로 변경했습니다.
lc_time = 'ko_KR.UTF-8'              # locale for time formatting
                                                     # => 날짜 및 시간 형식 지정에 사용되는 로케일(locale)을 지정합니다.
                                                     #      한국어 UTF-8로 변경했습니다.

# default configuration for text search
default_text_search_config = 'pg_catalog.simple'

 13) LOCK MANAGEMENT
  - 데이터베이스 서버 내의 활성 프로세스에서 보유하고 있는 잠금에 대한 정보에 대한 설정 부분입니다.
  - 이번 포스팅에서는 다루지 않습니다.


 14) VERSION AND PLATFORM COMPATIBILITY
  - 이번 포스팅에서는 다루지 않습니다.


 15) ERROR HANDLING
  - SQL 프로그램에서 예외 조건 및 경고를 처리하는 방법에 대해 설명합니다.
  - 이번 포스팅에서는 다루지 않습니다.


 16) CONFIG FILE INCLUDES
  - postresql.conf 파일의 옵션 정보를 설정 합니다.
  - 특이사항이 없으면 설정 내용을 유지 합니다.

 

 

 

 

 

 

728x90

댓글