데이타베이스/PostgreSQL

PostgreSQL, 이 3가지 설정 파일만 알면 데이터베이스 마스터!

shimdh 2025. 10. 28. 20:22
728x90

PostgreSQL 데이터베이스를 운영하다 보면, 성능 최적화부터 보안 강화, 안정적인 서비스 유지까지 모든 게 설정 파일 하나로 좌우되는 경우가 많아요. 특히 PostgreSQL의 핵심 설정 파일 세 가지를 제대로 이해하면, 데이터베이스 관리자가 한 단계 업그레이드되는 기분이 들 거예요. 오늘 이 포스트에서는 postgresql.conf, pg_hba.conf, pg_ident.conf라는 세 파일을 깊이 파헤쳐보겠습니다. 각 파일의 역할, 실전 팁, 그리고 안전한 관리 방법을 함께 알아보죠. 초보자부터 베테랑까지 유용할 내용이니 끝까지 읽어보세요!

728x90

PostgreSQL 설정 파일, 왜 이렇게 중요한가요?

PostgreSQL 설정 파일은 데이터베이스의 '뇌'나 다름없어요. 메모리 할당, 연결 제한, 로깅 정책, 인증 방식 등 서버의 모든 동작을 세밀하게 제어하죠. 이 파일들을 무시하면 데이터베이스가 제대로 작동하지 않거나, 보안 홀이 생기기 쉽습니다. 왜 중요할까요? 간단히 정리하면:

  • 성능 최적화: 서버 자원을 효율적으로 배분해 쿼리 속도를 2배 이상 끌어올릴 수 있어요. 예를 들어, 메모리 설정만 잘 해도 대용량 데이터 처리 시간이 단축됩니다.
  • 보안 강화: 무단 접근을 막고, 암호화된 인증을 강제해 데이터 유출 위험을 최소화합니다.
  • 안정성 확보: 로그를 통해 문제를 빠르게 진단하고, 시스템 다운타임을 줄여 서비스 신뢰성을 높여줍니다.

잘못된 설정으로 데이터베이스가 멈추는 사례는 실제로 많아요. 이 포스트를 통해 그런 실수를 피하는 법을 배워보세요!

PostgreSQL의 핵심 3가지 설정 파일

PostgreSQL에는 수많은 설정 파일이 있지만, 이 세 파일이 가장 필수적입니다. 하나씩 자세히 살펴보죠.

1. postgresql.conf: 서버 동작의 기본 컨트롤러

이 파일은 PostgreSQL 서버의 '전반적인 뇌' 역할을 해요. 메모리, 연결, 로깅 등 대부분의 파라미터를 여기서 조정합니다. 파일 크기가 크고 매개변수가 많아서 처음엔 압도적일 수 있지만, 자주 쓰는 몇 가지만 익히면 금방입니다.

주요 설정 예시:

  • 메모리 사용량: shared_buffers = 256MB (공유 버퍼 크기, 시스템 메모리의 25% 정도로 설정 추천), work_mem = 4MB (쿼리당 작업 메모리, 과도한 설정은 OOM 에러 유발).
  • 연결 제한: max_connections = 100 – 동시 연결 최대 수. 서버 스펙에 맞게 조정하세요. (예: 4코어 서버라면 100~200 정도가 적당).
  • 로깅 옵션: log_statement = 'all' (모든 쿼리 로그), log_min_duration_statement = 250 (250ms 이상 쿼리만 로그, 성능 병목 분석에 유용).

실전 팁: 파일 수정 후 pg_ctl reload 명령으로 재시작 없이 일부 변경을 적용할 수 있어요. 하지만 max_connections처럼 중요한 건 서버 재시작(sudo systemctl restart postgresql)이 필수입니다. 설정 변경 전, 현재 값을 SHOW shared_buffers;처럼 SQL로 확인해보세요.

2. pg_hba.conf: 접근 통제의 문지기 (Host-Based Authentication)

PostgreSQL Host-Based Authentication의 약자로, '누가(IP/호스트), 어디서, 어떤 DB에, 어떤 인증으로' 접근할지 정의하는 보안 파일입니다. 이 파일이 잘못되면 접속이 아예 안 되거나, 해커가 쉽게 침투할 수 있어요. 매 줄이 규칙(rule)으로 구성되어 있어요.

기본 구조: TYPE DATABASE USER ADDRESS METHOD

예시 설정:

# 로컬 연결: 모든 사용자, 모든 DB, peer 인증 (OS 사용자와 매칭)
local   all             all                                     peer

# IPv4 로컬 연결: 모든 사용자, 모든 DB, MD5 암호 인증
host    all             all             127.0.0.1/32            md5

# 특정 네트워크: 개발자 IP만 postgres DB에 scram-sha-256 인증 허용
host    postgres        dev_user        192.168.1.0/24          scram-sha-256
  • TYPE: local (유닉스 소켓), host (TCP/IP).
  • METHOD: trust (인증 생략, 테스트용), md5/scram-sha-256 (암호 기반), reject (거부).

실전 팁: 프로덕션에서는 'trust'를 피하고, scram-sha-256 같은 강력한 해싱을 사용하세요. 변경 후 재로드(pg_ctl reload)로 적용되지만, 테스트 연결로 즉시 검증하세요. 보안 감사 도구처럼 pgBadger로 로그 분석하면 취약점을 찾기 좋아요.

3. pg_ident.conf: OS 사용자와 DB 역할 매핑의 다리

이 파일은 OS 사용자 이름을 PostgreSQL의 DB 역할(role)에 매핑해줍니다. 별도의 비밀번호 없이 OS 인증으로 연결되게 하여, 서버 관리 편의성을 높여요. 특히 리눅스 환경에서 유용하죠.

기본 구조: MAPNAME OS_USERNAME PG_USERNAME

예시 설정:

# 기본 매핑: OS 사용자와 동일한 DB 역할로 매핑
# (MAPNAME은 pg_hba.conf에서 참조)

# 사용자별 매핑: OS 'alice'를 DB 'db_admin'으로 매핑
alice_map    alice          db_admin
bob_map      bob            db_user

실전 팁: pg_hba.conf의 METHOD를 'peer'로 설정하고 이 파일로 매핑하세요. 예: OS 사용자 alice가 psql로 접속하면 자동으로 db_admin 역할이 됩니다. 보안을 위해 최소 권한 원칙(least privilege)을 적용하고, 불필요한 매핑은 제거하세요. LDAP 통합 시 이 파일이 기반이 됩니다.

설정 파일의 위치와 수정 방법

설정 파일 위치는 설치 환경에 따라 다르니, SHOW config_file; SQL로 확인하세요.

운영 체제 일반 위치 예시
Linux (Ubuntu/Debian) /etc/postgresql/<version>/main/ (e.g., /etc/postgresql/14/main/postgresql.conf)
Linux (CentOS/RHEL) /var/lib/pgsql/<version>/data/
Windows C:\Program Files\PostgreSQL\<version>\data\
macOS (Homebrew) /usr/local/var/postgres/

수정 절차 (Linux 예시):

  1. 백업: sudo cp postgresql.conf postgresql.conf.bak
  2. 편집기 열기: sudo nano /etc/postgresql/14/main/postgresql.conf
  3. 변경 적용: # 주석 해제하고 값 수정 (e.g., shared_buffers = 512MB).
  4. 저장 & 재로드: Ctrl+O → Enter → Ctrl+X (nano), 그 후 sudo systemctl reload postgresql.
  5. 검증: psql로 접속해 SHOW max_connections; 실행.

Windows라면 pgAdmin GUI를 추천해요 – 파일 직접 편집보다 안전합니다.

모범 사례: 설정 파일을 안전하게 관리하는 법

설정 파일은 데이터베이스의 생명줄이니, 무작정 만지지 마세요. 다음 팁으로 전문가처럼 관리하세요:

  • 항상 백업: Git 같은 버전 컨트롤로 파일을 추적하세요. (e.g., git init in data dir).
  • 테스트 우선: 스테이징 서버에서 변경 테스트 후 프로덕션 적용. 도커 컨테이너로 환경 재현 추천.
  • 문서화 필수: 변경 로그를 별도 파일이나 Jira에 기록. "2025-10-28: work_mem 증가로 쿼리 속도 20% 향상"처럼.
  • 주석 활용: 파일 내 # Increased for high-load queries on 2025-10-28 주석으로 이력 남기기.
  • 자동화 도입: Ansible이나 Puppet으로 설정 배포 자동화. 모니터링 툴(Prometheus + Grafana)로 설정 변화 감지.

이 팁들 따르면, 설정 실수로 인한 다운타임이 90% 줄어요!

마무리: 지금 당장 마스터하세요!

PostgreSQL의 postgresql.conf (성능/동작 제어), pg_hba.conf (접근 보안), pg_ident.conf (사용자 매핑) 세 파일을 알면 데이터베이스 관리가 훨씬 수월해집니다. 성능을 뽑아내고, 보안을 단단히 하고, 안정성을 보장하는 데 이 파일들이 핵심이에요. 오늘 배운 걸로 작은 변경부터 시도해보세요 – 효과를 바로 느낄 거예요!

728x90