구글 클라우드에 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 설치하고 연결하는 방법을 살펴본다.
'프로그래밍 Programming' 카테고리의 다른 글
구글 클라우드 VM에 설치한 PostgreSQL, pgAdmin4로 쉽게 원격 연결하는 방법 (0) | 2025.05.30 |
---|---|
원격 데스크톱 연결 프로토콜 오류 (코드: 0x112f) 때문에 원격 세션이 끊어집니다 (0) | 2025.05.30 |
Linux 초보자를 위한 필수 개념: apt update와 apt upgrade 차이점 완벽 정리 (0) | 2025.05.29 |
구글의 Project IDX에서 Django 개발하기: 클라우드IDE가 로컬 환경을 대체할 수 있을까? (0) | 2025.03.30 |
구글의 클라우드 기반 IDE 'Project IDX'의 등장: 풀스택 개발 환경의 혁신을 가져올까? (0) | 2025.03.22 |