■ 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/
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) 기본 위치 사용을 권장합니다. |
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 초 사이로 설정 |
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 파일의 옵션 정보를 설정 합니다.
- 특이사항이 없으면 설정 내용을 유지 합니다.
'DBMS' 카테고리의 다른 글
[PostgreSQL 설치와 운영] #5. PostgreSQL 로그 설정하기 (0) | 2022.10.20 |
---|---|
[MSSQL] char/varchar, nchar/nvarchar (0) | 2022.10.19 |
[PostgreSQL 설치와 운영] #4. psql 접속과 기본 명령어 (0) | 2022.10.19 |
[PostgreSQL 설치와 운영] #3. pg_hba.conf 설정하기(원격 접속 설정) (0) | 2022.10.14 |
[PostgreSQL 설치와 운영] #1. Ubuntu 22.04 PostgreSQL 설치 (0) | 2022.10.11 |
댓글