✨ 로컬 PostgreSQL 지옥 탈출기
– 왜 나는 Neon DB + Django 조합으로 갈아탔나 (feat. 여러 노트북, 어디서나 접속)
“왜 회사 DB는 다들 각자 노트북에서 잘만 붙는데, 내 PostgreSQL은 이 노트북에서만 되지…?"
이 생각으로 며칠을 헤매다가, 결국 Neon DB + Django 구조로 갈아탄 기록이다.
중간에 pg_hba.conf, DJANGO_SETTINGS_MODULE, .env 비밀번호 삽질까지 다 했으니,
혹시 나랑 비슷한 상황이라면 이 글 한 번 쭉 읽고 시간 아끼길…
1. 문제 시작: “하나의 DB를 여러 노트북에서, 어디서나 쓰고 싶다”
처음에는 로컬에 PostgreSQL 깔고 이렇게 생각했다.
- “이 노트북에 DB 만들고”
- “DBeaver로 붙어서 개발하면 되겠지?”
근데 현실은 이랬다.
- 노트북을 여러 대 쓰고 있고,
- 회사 / 집 / 카페 / 다른 PC 등 어디서든 같은 DB를 쓰고 싶고,
- 나 혼자만이 아니라 여러 사람이 같은 DB를 보고 싶었다.
그래서 일단 로컬 DB를 공유해보려고 별짓을 다 해봤다.
- postgresql.conf 에서 listen_addresses = '*' 로 열어보고
- pg_hba.conf 에서 0.0.0.0/0 이니 192.168.0.0/24 이니 바꿔보고
- Windows 방화벽에 5432 포트 열고
- 공유기에서 포트 포워딩까지…
심지어 “이 PC에서 localhost로 접속” 이라는 127.0.0.1/32 설정 때문에
“이 PC가 뭔데? 나 노트북 여러 개인데? 왜 맨날 이 PC래??” 하고 빡친 적도 있다 😂
결론부터 말하면:
로컬 PostgreSQL을 “회사 DB처럼” 만드는 건,
포트포워딩 + 방화벽 + IP + 보안까지 전부 챙겨야 해서
생각보다 개복잡하다.
그래서 방향을 완전 바꿨다.
그냥 클라우드에 PostgreSQL 하나 두고,
모든 노트북은 거기로 접속하자.
= 회사처럼 “중앙 DB 서버 한 대 + 여러 클라이언트”
그 후보로 고른 게 바로 Neon DB.
2. 회사는 왜 쉽게 여러 사람이 하나의 DB를 쓰는 걸까?
여기서 한 번 정리하고 가자.
회사에서 보통 이런 구조다:
(노트북 A) --\
(노트북 B) ----> 회사 내부망(LAN/Wi-Fi) ----> DB 서버 1대
(노트북 C) --/
- DB는 누군가의 노트북에 있는 게 아니고,
서버실/VM/클라우드 같은 데 있는 중앙 PostgreSQL 서버 1대고, - 모든 개발자 노트북은 같은 회사 내부망에 있어서 그 서버 IP로만 붙으면 된다.
반면 나는:
(노트북 A 안에 DB)
(노트북 B 안에 DB)
(노트북 C 안에 DB)
이런 느낌이라, 아예 구조가 달랐다.
내가 하려던 건 사실:
“노트북 3대를 서버처럼 쓰면서,
외부에서 마음대로 접속하게 만들기”
여기서 이미 난이도가 급상승한 거였다.
그래서 발상을 바꿨다:
- 노트북에 DB를 두지 말자.
- 클라우드에 PostgreSQL 하나 만들고,
모든 노트북이 그걸 “회사 DB처럼” 쓰게 하자.
그때 선택한 서비스가 Neon이다.
3. 왜 Neon DB를 골랐냐? (무료 + PostgreSQL + 간단)
내가 Neon을 선택한 이유는 이 정도였다:
- 무료 플랜(Always Free)
사이드 프로젝트, 공부용으로 충분한 용량. - 순수 PostgreSQL
Django에서 ENGINE = "django.db.backends.postgresql" 그대로 쓰면 됨.
별도의 이상한 드라이버 필요 X. - AWS 위에 돌아가지만, 내가 AWS 요금 걱정은 안 해도 됨
“Cloud provider: AWS”는 Neon이 AWS를 쓴다는 뜻이고,
나는 그냥 Neon Free 티어만 쓰면 된다. - 어디서나 접속
집 / 회사 / 카페 / 어떤 노트북이든
같은 HOST + PORT + USER + PASSWORD로 접속 가능.
“내가 회사 DB처럼 쓰고 싶은데, 돈은 쓰기 싫다”
→ 그 욕심을 딱 채워준 느낌 😂
4. Neon 프로젝트 만들기
Neon에서 한 흐름은 대략 이랬다.
- Neon 가입 후 → “New Project”
- 설정:
- Project name: bookflow
- Postgres version: 17
- Cloud provider: AWS
- Region: 가까운 아시아 리전 (나는 Sydney)
- 기본으로 neondb가 만들어지지만,
나는 bookflow_db라는 이름으로 새 DB를 만들어 줬다: - CREATE DATABASE bookflow_db;
- 그리고 Connect 버튼을 눌렀더니 이런 문자열을 줬다:
- psql 'postgresql://neondb_owner:<패스워드>@ep-ancient-cell-a7ijsy3t-pooler.ap-southeast-2.aws.neon.tech/bookflow_db?sslmode=require&channel_binding=require'
5. Django 프로젝트 구조에서 또 한 번 턱걸이 🤦♀️
– No module named 'bookflow' 에러
DB 연결 전에 Django 쪽에서도 삽질이 있었다.
내 프로젝트 구조는 이런 느낌이었다:
bookflow/
ai_engine/ ← 앱
db_core/ ← 앱
config/ ← 프로젝트 설정 패키지
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
manage.py
즉, 실제 “프로젝트 이름”은 config 인데,
manage.py나 settings.py가 이렇게 되어 있었다:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bookflow.settings")
ROOT_URLCONF = "bookflow.urls"
WSGI_APPLICATION = "bookflow.wsgi.application"
ASGI_APPLICATION = "bookflow.asgi.application"
그래서 python manage.py migrate 했더니:
ModuleNotFoundError: No module named 'bookflow'
라고 계속 욕을 했다.
해결 방법은 간단했다.
- manage.py 에서:
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
- config/settings.py 에서:
- ROOT_URLCONF = "config.urls" WSGI_APPLICATION = "config.wsgi.application" ASGI_APPLICATION = "config.asgi.application"
- config/asgi.py, config/wsgi.py 안에
bookflow.settings 로 되어 있던 것도 모두 config.settings 로 변경.
VS Code에서 bookflow. 로 전체 검색해서
전부 config. 로 갈아끼우면 끝이다.
이걸 하고 나서야 드디어 Django가 settings를 제대로 읽기 시작했다.
6. Django에서 Neon DB에 연결하기
이제 구조 정리 + password 정리까지 끝났으니, 진짜 연결만 하면 된다.
6-1. 패키지 설치
pip install psycopg2-binary python-dotenv
6-2. .env 파일 (manage.py랑 같은 폴더)
NEON_DB_NAME=데이터베이스이름
NEON_DB_USER=neondb_owner
NEON_DB_PASSWORD=패스워드
NEON_DB_HOST=ep-ancient-cell-a7ijsy3t-pooler.ap-southeast-2.aws.neon.tech
NEON_DB_PORT=5432
6-3. config/settings.py 수정
상단에:
import os
from dotenv import load_dotenv
load_dotenv()
그리고 DATABASES 설정:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.getenv("NEON_DB_NAME"),
"USER": os.getenv("NEON_DB_USER"),
"PASSWORD": os.getenv("NEON_DB_PASSWORD"),
"HOST": os.getenv("NEON_DB_HOST"),
"PORT": os.getenv("NEON_DB_PORT", "5432"),
"OPTIONS": {
"sslmode": "require", # Neon은 SSL 필수
},
}
}
6-4. 마이그레이션 실행
python manage.py migrate
여기서 에러 없이 주르륵 마이그레이션이 올라가면…
Django ↔ Neon PostgreSQL 연결 성공! 🎉🎉
이제 어디 노트북에서든 이 프로젝트만 실행하면 같은 DB를 쓰게 된다.
7. 여러 노트북에서 같이 Neon DB 쓰는 방법 💻💻💻
여기까지 왔으면 나머지는 진짜 간단하다.
- Git으로 프로젝트 관리한다고 치면:
- 다른 노트북에서 git clone or pull
- 새 노트북에서도 .env 파일만 똑같이 만들어 둔다.
- 가상환경 만들고, 패키지 설치:
- pip install -r requirements.txt python manage.py migrate # 필요하면
- 이제 그 노트북에서 runserver를 돌리든,
DBeaver로 DB를 보든,
전부 같은 Neon PostgreSQL을 바라보게 된다.
회사에서 여러 사람이 하나의 DB를 쓰는 것처럼,
나도 이제 “클라우드 DB 하나 + 여러 클라이언트” 구조를 가지게 된 것.
8. 정리: 로컬 Postgres vs Neon Postgres, 그리고 내가 배운 것들 📌
이번 삽질(?)을 통해 배운 것들을 정리하면:
- 로컬 Postgres를 “어디서나, 아무 PC에서나” 쓰려면
postgresql.conf, pg_hba.conf, 방화벽, 공유기, 보안까지 손댈 게 너무 많다. - 회사처럼 쓰고 싶으면 구조를 회사처럼 만들어라.
= 서버 1대(Neon DB) + 여러 클라이언트(Django, 노트북들) - pg_hba.conf의 “이 PC”는 항상 서버가 깔린 그 PC 기준이다.
클라이언트 노트북 여러 대랑 혼동하면 머리 깨진다. - Django에서 ModuleNotFoundError: No module named 'xxx' 나오면
대체로 DJANGO_SETTINGS_MODULE / ROOT_URLCONF가 현재 폴더 구조와 안 맞는 문제다. - Neon connection string에서:
- 유저명: postgresql://[USER]:[PASSWORD]@...
- 비밀번호: USER: 뒤 ~ @ 앞
→ .env에는 이 비밀번호만 넣어야 한다.
- 이제는:
- 장소 상관없이
- 노트북 여러 대에서
- 똑같은 Neon PostgreSQL + Django 프로젝트를 쓸 수 있다.
'대회 및 공모전' 카테고리의 다른 글
| [Dacon] [시계열 기초] 2. 예제를 통한 패턴 분석 (0) | 2026.02.23 |
|---|---|
| [Dacon] [시계열 기초] 1. 시계열 데이터 및 프로젝트 개요 (0) | 2026.02.22 |
| [BookFlow] 출판물 폐기 도서 & 폐지 활용 서비스 개요 (0) | 2025.11.11 |
| [DACON 학습] 2. AI 에이전트와 LangGraph의 기초 (0) | 2025.10.17 |
| [DACON 학습] 1. AI 에이전트의 첫걸음 (0) | 2025.10.17 |