pgAdmin으로 PostgreSQL 데이터베이스 시각화하기

pgAdmin으로 PostgreSQL 데이터베이스 시각화하기

pgAdmin을 개발 스택에 추가하고, 팀원들이 PostgreSQL 데이터베이스를 최대한 쉽게 탐색할 수 있게 만드는 방법을 살펴볼게요.

출처: 문서

본문

많은 어플리케이션이 스택에서 PostgreSQL 데이터베이스를 사용해요. 하지만 모든 개발자가 PostgreSQL 데이터베이스를 탐색하고 작업하는 데 능숙한 건 아니에요.

다행히 개발에 컨테이너를 사용하면 트러블슈팅과 디버깅을 돕는 추가 서비스를 쉽게 붙일 수 있어요.

pgAdmin 도구는 PostgreSQL 데이터베이스를 관리하고 시각화하는 데 도움을 주는 인기 있는 오픈소스 도구예요.

이 가이드에서 배울 내용:

  • pgAdmin을 어플리케이션 스택에 추가하기
  • pgAdmin이 개발 데이터베이스에 자동으로 연결되도록 구성하기

pgAdmin을 스택에 추가하기

compose.yaml 파일에서 기존 postgres 서비스 옆에 pgadmin 서비스를 추가해주세요:

services:
  postgres:
    image: postgres:18
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: demo
  pgadmin:
    image: dpage/pgadmin4:9.8
    ports:
      - 5050:80
    environment:
      # Required by pgAdmin
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: secret
      # Don't require the user to login
      PGADMIN_CONFIG_SERVER_MODE: 'False'
      # Don't require a "master" password after logging in
      PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'False'

다음 명령으로 Compose 스택을 시작해주세요:

$ docker compose up

이미지가 다운로드되고 컨테이너가 시작되면, pgAdmin이 준비됐다는 다음처럼 생긴 출력을 볼 수 있어요:

pgadmin-1 | [2025-09-22 15:52:47 +0000] [1] [INFO] Starting gunicorn 23.0.0
pgadmin-1 | [2025-09-22 15:52:47 +0000] [1] [INFO] Listening at: http://[::]:80 (1)
pgadmin-1 | [2025-09-22 15:52:47 +0000] [1] [INFO] Using worker: gthread
pgadmin-1 | [2025-09-22 15:52:47 +0000] [119] [INFO] Booting worker with pid: 119

http://localhost:5050 으로 가서 pgAdmin을 열어주세요.

관리 패널에 들어가면 Add New Server 링크를 선택해 새 서버를 정의해주세요. 다음 세부사항을 입력해주세요:

General 탭:

  • Name: postgres

Connection 탭:

  • Host name/address: postgres
  • Username: postgres
  • Password: secret
  • Save password? 필드를 활성화해주세요

중요: 이 연결 세부사항은 이전 Compose 파일 스니펫을 사용한다고 가정해요. 기존 Compose 파일을 사용한다면 필요에 따라 연결 세부사항을 조정하세요. Host name/address 필드는 postgres 서비스의 이름과 일치해야 해요.

Save 버튼을 선택해 새 데이터베이스를 만들어주세요.

이제 pgAdmin이 설정되고 컨테이너화된 데이터베이스에 연결되었어요. 자유롭게 탐색하고, 테이블을 보고, 데이터베이스를 살펴보세요.

pgAdmin이 데이터베이스에 자동 연결되도록 구성하기

pgAdmin이 실행되고 있지만, 데이터베이스 연결을 구성할 필요 없이 간단히 앱을 열 수 있으면 좋겠죠. 설정 단계를 줄이면 팀원들이 이 도구의 가치를 쉽게 얻을 수 있어요.

다행히 데이터베이스에 자동 연결하는 기능이 있어요.

경고: 자동 연결하려면 데이터베이스 자격 증명이 평문 파일로 공유돼요. 로컬 개발 중에는 로컬 데이터가 실제 고객 데이터가 아니므로 종종 허용돼요. 하지만 프로덕션 또는 민감한 데이터를 사용한다면 이 관행은 강력히 권장되지 않아요.

먼저 서버 자체를 정의해야 하는데, pgAdmin은 servers.json 파일로 이를 수행해요.

servers.json 파일용 구성 파일을 정의하려면 compose.yaml 파일에 다음을 추가해주세요:

configs:
  pgadmin-servers:
    content: |
      {
        "Servers": {
          "1": {
            "Name": "Local Postgres",
            "Group": "Servers",
            "Host": "postgres",
            "Port": 5432,
            "MaintenanceDB": "postgres",
            "Username": "postgres",
            "PassFile": "/config/pgpass"
          }
        }
      }

servers.json 파일은 PassFile 필드를 정의하는데, 이는 PostgreSQL 패스워드 파일 을 가리켜요. 흔히 pgpass 파일이라고 불러요.

pgpass 파일을 정의하려면 compose.yaml 파일에 다음 구성을 추가해주세요:

configs:
  pgadmin-pgpass:
    content: |
      postgres:5432:*:postgres:secret

이것은 postgres:5432 에 대한 연결 요청으로 사용자 이름 postgres 를 사용하면 secret 이라는 비밀번호를 제공해야 함을 나타내요.

compose.yaml 에서 pgadmin 서비스를 업데이트해 구성 파일을 주입해주세요:

services:
  pgadmin:
    ...
    configs:
      - source: pgadmin-pgpass
        target: /config/pgpass
        uid: "5050"
        gid: "5050"
        mode: 0400
      - source: pgadmin-servers
        target: /pgadmin4/servers.json
        mode: 0444

docker compose up 을 다시 실행해 어플리케이션 스택을 업데이트해주세요:

$ docker compose up

어플리케이션이 재시작되면 브라우저에서 http://localhost:5050 을 열어주세요. 로그인이나 구성 없이도 데이터베이스에 접근할 수 있어야 해요.

결론

컨테이너를 사용하면 어플리케이션의 의존성을 실행할 뿐 아니라 트러블슈팅과 디버깅을 돕는 추가 도구도 쉽게 실행할 수 있어요.

도구를 추가할 때는 팀원들이 겪을 경험과 가능한 마찰을 생각하고, 어떻게 제거할 수 있을지 고민해보세요. 이 경우 데이터베이스를 자동으로 구성하고 연결하는 구성을 추가하는 한 단계를 더 해, 팀원들의 귀중한 시간을 아껴줬어요.

더 알아보기 (Learn more)

  • PostgreSQL 가이드
  • pgAdmin
  • Docker Compose