갈루아의 반서재

728x90

 

 

구글 클라우드에 FastAPI + SQLite/PostgreSQL 을 결합하여 웹페이지를 제작하는 과정에 있어, PostgreSQL 설치 방법 및 외부접속 허용에 대해 알아봅시다.

 

Cloud SQL과 VM에서 직접 설치의 차이점

구글 클라우드에서 PostgreSQL 데이터베이스를 구축하는 방법은 크게 두 가지로 나눠집니다:

Cloud SQL (별도 서비스) 구글 클라우드가 관리하는 관리형 서비스
(완전 관리형 데이터베이스)
관리가 편리, 자동 백업, 확장성 용이
운영부담 최소화, 신뢰성 높음
상대적으로 비용 높음 (운영환경 따라)
VM에 직접 설치 VM 인스턴스 안에 직접 설치 및 관리 하는 방식 비용 저렴, 세부 설정 가능, 자유도 높음 직접 관리해야 하는 부담 존재,
백업, 복구 직접 관리 필요

결론부터 말씀드리면, PostgreSQL은 일반적으로 가상환경을 설정하지 않고 VM에 직접 설치하는 것이 일반적이고 권장됩니다. 그 이유는 다음과 같습니다.

PostgreSQL과 같은 데이터베이스는 일반적으로 시스템 수준에서 설치되어 관리됩니다.

* 가상환경 (예: Python의 venv, virtualenv, Docker 등)은 일반적으로 애플리케이션 코드의 의존성을 관리하는 데 적합합니다.
* 데이터베이스는 운영체제 서비스로 직접 관리되며, 시스템 서비스로서 VM 자체에서 운영하는 것이 효율적이고 일반적입니다.

다음과 같은 구조가 일반적입니다.
┌─────────────────────────────────────────┐
│                 Ubuntu VM               │
│ ┌───────────────────────┐ ┌───────────┐ │
│ │  PostgreSQL (system)  │ │  FastAPI  │ │
│ │     Port: 5432               │ │ virtualenv│ │
│ └───────────────────────┘ └───────────┘ │
└─────────────────────────────────────────┘
* PostgreSQL은 VM 운영체제에 바로 설치하고 관리합니다.
* 애플리케이션(FastAPI)은 가상환경에서 Python 의존성을 따로 관리하는 것이 좋습니다.

가상환경(venv, Docker)은 주로 다음의 경우에 사용됩니다.
* Python 의존성 관리 : FastAPI, Uvicorn, SQLAlchemy 등 Python 라이브러리
* 개발환경과 운영환경의 차이를 없앨 때 (Docker)
* 앱 단위의 독립적이고 빠른 배포가 필요할 때

그러나 PostgreSQL과 같은 DBMS 자체를 가상환경에 넣는 경우는 일반적이지 않습니다. 다음과 같이 설치하는 것이 DB와 앱의 관리가 명확히 분리되면서, 가장 효율적이고 안정적입니다.


① VM에 PostgreSQL 설치 (직접 설치)

sudo apt update
sudo apt install postgresql postgresql-contrib -y
sudo systemctl enable postgresql


② FastAPI 앱에 가상환경 설정 (venv 사용)

python3 -m venv fastapi_env
source fastapi_env/bin/activate
pip install fastapi uvicorn psycopg2 sqlalchemy


실제 PostgreSQL 설치 및 실행, 외부접속 허용

# 패키지 업데이트
sudo apt update && sudo apt upgrade -y

# PostgreSQL 설치
sudo apt install postgresql postgresql-contrib -y

# PostgreSQL 서비스 시작 및 활성화
sudo systemctl start postgresql
sudo systemctl enable postgresql

 

설치 후 사용자 생성, 데이터베이스 생성, 권한 부여

# PostgreSQL 서비스 시작 및 활성화
sudo systemctl start postgresql

# PostgreSQL 유저로 전환
sudo -i -u postgres
postgres@:~$

# PostgreSQL 명령어 실행
postgres@:~$ psql
psql (12.22 (Ubuntu 12.22-0ubuntu0.20.04.4))
Type "help" for help.

# 사용자 생성
postgres=# create user pepe with password '********';
CREATE ROLE
# 데이터베이스 생성
postgres=# create database memedb owner pepe;
CREATE DATABASE
# 사용자에게 권한 부여
postgres=# grant all privileges on database memedb to pepe;
GRANT
# 종료
postgres=# \q
# PostgreSQL 유저에서 나오기
postgres@:~$ exit
logout

 

기본적으로 로컬에서만 접속됩니다. 외부에서 접근하려면 다음과 같이 설정을 수정해야합니다.

 

/etc/postgresql/<버전>/main 에 위치한 postgresql.conf 파일을 열어 다음과 같이 수정한다. <버전>은 사용자 환경에 따라 상이합니다.

sudo nano /etc/postgresql/12/main/postgresql.conf

 

listen_addresses 부분의 값을 기존 localhost 에서 * 로 변경한 후 앞의 주석처리 부분을 지운다. 

 

 

다음으로 /etc/postgresql/<버전>/main/ 에 위치한 pg_hba.conf 파일의 다음 라인을 127.0.0.1 을 0.0.0.0 으로 수정한다.

sudo nano /etc/postgresql/15/main/pg_hba.conf
 

 

 

수정 후 서비스를 재시작한다.

sudo systemctl restart postgresql

 

다음 포스팅에서는 pgAdmin4 설치하고 연결하는 방법을 살펴본다. 

 

 

 

728x90