윈도우에 만드는 리눅스 개발 환경 목차
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번째로 가장 많이 사용하는 데이터베이스로 기록되고 있다.
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 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에 대한 자세한 사용법은 다음 사이트에 있다.
'윈도우 개발환경' 카테고리의 다른 글
시계열 데이터베이스 사용하기; 1. InfluxDB 준비하기 (2) | 2024.02.20 |
---|---|
쿠버네티스로 MSA DevOps 환경 구축; 1. 로컬 쿠버네티스 설치 (0) | 2024.02.15 |
Flutter 개발 환경 만들기; 1. 안드로이드 App (1) | 2023.12.18 |
Docker로 테스트 환경 만들기; 2. 우분투 데스크탑 만들기 (0) | 2023.12.12 |
윈도우에 만드는 파이썬 개발 환경; 4. VSCode에 Jupyter연결 (0) | 2023.12.01 |