본문 바로가기

윈도우 개발환경

윈도우에 만드는 리눅스 개발 환경; 8. Docker로 PostgreSQL 시작하기

윈도우에 만드는 리눅스 개발 환경 목차

1. 우분투 리눅스 설치 (윈도우 10)

2. 윈도우에 Docker 설치

3. 속도 개선 후 node.js 설치

4. VScode 설치 후 리눅스 연결

5. Docker로 MySQL시작하기

6. Docker로 MongoDB 시작하기

7. 윈도우 11에 우분투 설치

8. Docker로 PostgreSQL 시작하기

0. PostgreSQL

2023년 기준으로 MySQL은 Oracle에 이어 세상에서 두 번째로 가장 많이 사용되는 데이터베이스이다. 페이스북, 트위터를 포함해서 많은 기업에서 사용하고 있고, 아마존 AWS, 마이크로소프트 Azure를 포함해서 많은 클라우드 플랫폼에서도 사용량이 높은 데이터베이스 서비스이다. 개발을 시작할 때 가장 손쉽게 시작할 수 있는 데이터베이스이지만 막상 운영에 적용하기 시작하면 사용방법에 따라 아쉬운 부분이 생긴다. 특히 write작업이 많거나 stored procedure를 포함해서 복잡한 SQL query를 만들 때에는 Oracle의 기능이 아쉬울 때가 있다. 이럴 때 찾게 되는 것이 PostgreSQL일 것이다.

 

PostgreSQL은 MySQL에 비해

 

  • JSON과 key/value pair를 위한 hstore 등 보다 복잡한 데이터 값을 저장하는 것이 가능하고,
  • 지리정보를 검색할 수 있는 GIS, JSON을 검색할 수 있는 GIN과 같은 추가적인 index구조를 지원하고,
  • 텍스트의 내용을 검색할 수 있는 full text search 기능이 내장되어 있고,
  • CTE, window기능을 포함하여 SQL을 완벽하게 지원하고,
  • 데이터에 대한 SSL encryption기능이 내재되어 있고,
  • 보다 효과적인 백업 및 복원기능을 제공하고 있다.

그래서 PostgreSQL에 대한 사용이 점차 늘어나고 있으며, 2023년에 4번째로 가장 많이 사용하는 데이터베이스로 기록되고 있다.

 

PostgreSQL

The world's most advanced open source database.

www.postgresql.org

1. PostgreSQL 서버 생성

  • 먼저 PostgreSQL docker 이미지를 다운로드한다.

16.x 버전이 latest로 지정되어 있기 때문에 다른 버전의 이미지를 받으려면 postgres:15와 같이 버전을 지정해야 한다.

 

docker pull postgres

 

  • PostgreSQL의 DB를 저장할 folder를 만든다.

docker instance를 만들 때 PostgreSQL의 DB를 저장할 곳을 -v 옵션으로 local컴퓨터의 폴더로 지정하면 데이터베이스의 내용이 local컴퓨터에 저장되기 때문에, docker instance를 종료하고 나중에 다시 만들어도 DB의 내용이 보존된다.

 

컴퓨터에 DB를 저장할 폴더를 만든다.

 

mkdir pgdata

 

  • PostgreSQL docker instance를 만들고 실행한다.

instance를 생성할 때 외부에서 PostgreSQL을 연결할 수 있도록 5432 port를 열어 둔다. 

 

docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=password -v "%cd%/pgdata:/var/lib/postgresql/data" postgres

 

  • pgdata folder가 비어있지 않는지 확인해 본다.

folder가 mount 되고 PostgreSQL이 성공적으로 실행되었다면 folder에 데이터베이스 파일이 만들어진다.

 

  • POSTGRES_PASSWORD와 같이 PostgreSQL docker instance를 만들 때 사용할 수 있는 옵션은 다음과 같다.

POSTGRES_USER: PostgreSQL을 관리할 수 있는 superuser의 userid로 지정하지 않으면 "postgres"이다.

POSTGRES_PASSWORD: POSTGRES_USER에 사용할 패스워드로 지정하지 않으면 빈 상태인데, 보안을 강화하고 외부 프로그램에서 연결하기 위해서는 지정해야 한다.

PGDATA: PostgreSQL이 initdb스크립트를 사용해서 데이터베이스를 생성할 때 사용할 docker내 folder의 위치를 지정한다. 지정하지 않으면 /var/lib/postgresql/data 위치에 저장한다. 

POSTGRES_DB: 데이터베이스를 만들 때 사용할 이름을 지정한다. 지정하지 않으면 POSTGRES_USER 명으로 만들어진다.

POSTGRES_HOST_AUTH_METHOD: 모든 database, 모든 user, 모든 address에 대해 host로 연결할 때 사용할 인증 방법을 지정한다. 기본값은 "scram-sha-256 password authentication". 다른 방법을 사용하려면 PostgreSQL: Documentation: 14: 21.1. The pg_hba.conf File을 참고해서 바꾼다.

이 외에 데이터베이스를 생성할 때 사용하는 initdb에 옵션을 전달할 수 있는 POSTGRES_INITDB_ARGS, POSTGRES_INITDB_WALDIR 등이 있다.

 

개발하는 동안 PostgreSQL의 상태 로그를 계속해서 보고 싶다면 docker container에 attach 한다.

container id를 확인하고

 

docker ps -a

 

attach 하면 로그를 모니터링할 수 있다.

 

docker attach <container id>

2. PgAdmin 설치

MySQL에는 MySQL Workbench가 있다면 PostgreSQL에는 pgAdmin이 있다.  pgAdmin은 PostgreSQL을 관리할 수 있는  오픈소스 프로그램으로, PostgreSQL 서버의 상태도 모니터링하고, db와 테이블도 관리하고, SQL문도 테스트 해 볼 수 있는 웹 기반의 무료 프로그램이다.

 

pgAdmin - PostgreSQL Tools

 

www.pgadmin.org

 

pgAdmin container instance를 만들기 위해

  • 먼저 pgAdmin docker 이미지를 다운로드한다.
docker pull dpage/pgadmin4

 

  • pgAdmin docker container instance를 만든다.
docker run -p 8080:80 -e PGADMIN_DEFAULT_EMAIL="user@domain.com" -e PGADMIN_DEFAULT_PASSWORD=password -d dpage/pgadmin4

 

pgAdmin에 접속하면 로그인할 때 필요한 아이디와 패스워드를

 

PGADMIN_DEFAULT_EMAIL: 아이디

PGADMIN_DEFAULT_PASSWORD: 패스워드

 

두 개의 환경변수로 설정할 수 있으며, 반드시 설정해야 실행이 가능하다.

 

  • 관리하려는 PostgreSQL 서버를 pgAdmin에 등록한다.

- 왼쪽 "Server"메뉴에서 오른쪽 마우스를 누르고 "Register / Server"를 선택한다.

 

 

- 모달화면에 내용을 입력하고 저장을 누른다.

Host name/address입력란에 내 노트북에 할당되어 있는 IP주소를 입력하고, PostgreSQL을 만들 때 지정한 userid와 패스워드를 입력한다. 나는 PostgreSQL을 만들 때 userid를 지정하지 않았기 때문에 기본값인 postgres를 입력했다.

 

 

등록이 완료되면 아래와 같이 Dashboard가 나타나고, 왼쪽 메뉴를 보면서 PostgreSQL을 관리할 수 있다.

 

 

pgAdmin에 대한 자세한 사용법은 다음 사이트에 있다.

 

pgAdmin 4 — pgAdmin 4 8.1 documentation

Welcome to pgAdmin 4. pgAdmin is the leading Open Source management tool for Postgres, the world’s most advanced Open Source database. pgAdmin 4 is designed to meet the needs of both novice and experienced Postgres users alike, providing a powerful graph

www.pgadmin.org