Postgresql 설정 파일 수정 (postgresql.conf, pg_hba.conf)
이전 포스팅에서는 AWS에서 클라우드 서버로 Postgresql 서버를 만들고, 크롤러와 연동하는 내용을 다뤘었다.
하지만 프리티어, 즉 무료로 사용할 수 있는 데이터베이스 용량은 매우 매우 매우 부족하다. 뭐 간단한 유저 정보 관리 용으로 만든 데이터베이스라면 가능하겠다만, 필자는 매일 항공권 데이터를 수집하기 때문에 이정도의 용량으로는 터무니 없이 부족했다. (기억상 20기가정도가 max였던거로 기억함)
그래서 지금은 클라우드에서 VPC, 방화벽 설정해본 경험을 토대로, 직접 홈서버를 구현해 약 2테라 정도까지 사용가능한 데이터베이스 서버를 만들어서 운영중에 있다.
지금부터 홈서버 구현까지의 나름대로의 가이드를 작성할 예정이니, 홈서버 구현에 관심있다면 도전해보는 것을 추천한다. (클라우드에서 2테라 데이터베이스 운영하려면 한달에 40만원은 나오지 않을까싶음...ㅎㅎ)
1. LVM
먼저 나는 내가 가진 SSD 1테라 2개를 달고 있는 그램 노트북을 DB로 사용했다. 이때 1테라짜리 SSD를 2개 달고 있다고 해서, 2테라를 DB 용량으로 사용할 수는 없다. 왜냐하면 두 SSD카드, 즉 물리적으로 나눠져 있기 때문이다.
(개인적으로 포인터 같이 다루면 되지 않을까 생각하기도함)
따라서 두 SSD카드를 마치 하나의 SSD카드인 것처럼 컴퓨터에서 인식하도록 하는 방법이 LVM(Logical Volume Manager)이다.
LVM이란 쉽게 말해 물리적으로 분리된 디스크를 하나의 논리적 디스크로 볼 수 있게 해주는 시스템이다. 물리 디스크(Physical Volume) → 볼륨 그룹(Volume Group) → 논리 볼륨(Logical Volume) 순으로 추상화된다.
일단 현재 디스크 상황을 확인해보자:
lsblk
결과는 다음과 같이 나올 것이다 (아마도...기억을 더듬어 포스팅하는거라 확실하진 않다...):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:00931.5G 0 disk
├─nvme0n1p1 259:10 512M 0 part /boot/efi
└─nvme0n1p2 259:20 931G 0 part /
nvme1n1 259:30931.5G 0 disk
└─nvme1n1p1 259:40931.5G 0 part /data
이외에도 병렬 CPU, 메모리 설정을 통해 DB 성능 최적화도 가능하지만, 이건 다음 포스팅에서 진행하겠다!!
6.2 pg_hba.conf 수정
sudovim /etc/postgresql/12/main/pg_hba.conf
외부에서 접속할 수 있도록 다음 줄을 추가:
# 모든 IP에서 모든 데이터베이스, 모든 사용자의 접속 허용 (비밀번호 필요)
host allall0.0.0.0/0 md5
# 특정 IP 범위에서의만 모든 데이터베이스에 대한 접속 허용(/24)
host allall172.30.1.0/24 md5
# 특정 IP 하나에서만 모든 데이터베이스에 대한 접속 허용 (/32)
host allall35.216.67.190/32 md5
주의: 사실 이 설정 파일에서도 포트포워딩, ufw 설정에서처럼 정해진 IP만 열어놓는 것이 권장된다. (2번, 3번 방식)
하지만 포트포워딩, ufw(방화벽)에서 철저하게 IP 접속 관리를 하고 있다면 0.0.0.0으로 간단하게 해놔도 상관은 없다.
(어차피 방화벽단계에서 이미 필터링을 거친 경우에만 접속될 것이기 때문)
변경 사항을 적용하기 위해 PostgreSQL을 재시작:
sudo systemctl restart postgresql
7. PostgreSQL 사용자 및 데이터베이스 생성
이제 실제 사용할 데이터베이스와 사용자를 생성해보자:
sudo -u postgres psql
PostgreSQL 쉘에서:
-- 새 사용자 생성 (비밀번호 설정 필수)CREATEUSER gunu WITH PASSWORD 'pwd';
-- 새 데이터베이스 생성CREATE DATABASE sample_db;
-- 사용자에게 데이터베이스 접근 권한 부여GRANTALL PRIVILEGES ON DATABASE sample_db TO gunu;
-- 연결 확인을 위해 나가기
\q
외부에서 접속 테스트:
psql -h <공인IP주소> -U myuser -d mydb
7. 추가 툴
장기간 실행될 서버이므로 기본적인 모니터링 도구를 설치하자:
sudo apt install htop
디스크 사용량 모니터링:
df -h
cpu 및 메모리 사용량 모니터링:
htop
정리: 홈 PostgreSQL 서버 구축의 핵심
지금까지 살펴본 홈 PostgreSQL 서버 구축 과정을 요약해보자:
LVM 설정: 여러 물리 디스크를 논리적으로 하나로 통합
Ubuntu 설치: 기본 운영체제 설치 및 LVM 볼륨 마운트
포트포워딩: 외부에서 접속할 수 있도록 공유기 설정
방화벽 설정: 필요한 포트만 열어 보안 강화
PostgreSQL 설치 및 설정: 데이터베이스 서버 설치 및 외부 접속 허용
사용자 및 데이터베이스 생성: 실제 사용할 DB 환경 구성
아마존 RDS나 Google Cloud SQL 같은 클라우드 서비스를 사용하면 이 모든 과정을 자동으로 처리해주지만, 그에 따른 비용이 상당하다. 특히 대용량 데이터를 저장해야 한다면 더더욱 그렇다.
필자의 경우 이렇게 홈서버를 구축해서 약 2테라의 데이터베이스 공간을 확보했고, 클라우드에서 이만한 용량을 운영했다면 매달 수십만원의 비용이 발생했을 것이다.
물론 고가용성이나 자동 백업, 스케일링 같은 기능은 직접 구현해야 하지만, 개인 프로젝트나 소규모 서비스라면 이 정도로도 충분히 안정적인 운영이 가능하다.
유휴 노트북이 있고, 클라우드 쓸 돈은 없고, DB가 필요하다면 이 방법을 시도해보길 추천한다!