Render 배포 트러블슈팅 가이드
Render로 DRS를 배포하면서 발생한 문제들과 해결 방법을 기록합니다.
문제 1: ModuleNotFoundError: No module named 'psycopg2'
증상
ModuleNotFoundError: No module named 'psycopg2'
원인
requirements.txt에 psycopg2-binary 패키지가 누락됨
- Render 배포 시 필요한 패키지가 설치되지 않음
해결 방법
-
requirements.txt에 psycopg2-binary 추가:
-
변경사항 커밋 및 푸시:
git add requirements.txt
git commit -m "fix: add psycopg2-binary dependency"
git push origin main
-
Render가 자동으로 재배포하거나 수동으로 "Deploy latest commit" 실행
문제 2: SSL connection has been closed unexpectedly
증상
Failed to initialize connection pool: connection to server at "dpg-xxxxx.oregon-postgres.render.com"
(35.227.164.209), port 5432 failed: SSL connection has been closed unexpectedly
원인
- Render PostgreSQL은 SSL 연결을 요구함
- 코드에 SSL 설정이 누락됨
해결 방법
-
app/db_io.py의 init_pool() 함수에 sslmode='require' 추가:
_pool = SimpleConnectionPool(
minconn,
maxconn,
host=host,
port=port,
database=database,
user=user,
password=password,
sslmode='require' # 추가
)
-
변경사항 커밋 및 푸시:
git add app/db_io.py
git commit -m "fix: add SSL support for Render PostgreSQL connection"
git push origin main
문제 3: Connection pool not initialized
증상
DB 유사도 검색 실패: Connection pool not initialized. Call init_pool() first.
원인
- Render 웹 서비스에 PostgreSQL 환경 변수가 설정되지 않음
app/main.py의 warmup() 함수가 PostgreSQL 연결 초기화에 실패함
해결 방법
-
Render PostgreSQL 데이터베이스 생성:
- Render 대시보드 → "New +" → "PostgreSQL"
- Name:
drs-postgres
- Database:
drs_db_iji8 (자동 생성됨)
- Plan: Free
-
연결 정보 확인:
- PostgreSQL 페이지 → "Connections" 섹션
- Internal Database URL 및 개별 값 확인
-
Render 웹 서비스에 환경 변수 설정:
- 웹 서비스 (drs-api) → "Environment" 탭
- 다음 환경 변수 추가:
DATA_SOURCE=postgresql
PG_HOST=dpg-d4ji276uk2gs73bln7c0-a
PG_PORT=5432
PG_DATABASE=drs_db_iji8
PG_USER=drs_user
PG_PASSWORD=tnCRCHXlO7Ugu3eLzoZub5ME2HBUJz75
# 추가 설정
API_HOST=0.0.0.0
LOG_LEVEL=INFO
TARGET_LEN=200
PG_MIN_CONN=1
PG_MAX_CONN=10
-
"Save Changes" 클릭 → 자동 재배포
확인 방법
배포 로그에서 다음 메시지 확인:
PostgreSQL connection pool initialized: drs_db_iji8@dpg-xxxxx:5432
PostgreSQL connection initialized: XXX segments available
문제 4: relation "graph_segments" does not exist
증상
ERROR - Failed to initialize PostgreSQL connection: relation "graph_segments" does not exist
원인
- Render PostgreSQL 데이터베이스가 비어있음 (테이블 없음)
- 로컬 DB의 데이터가 Render DB로 마이그레이션되지 않음
이해
- 로컬 PostgreSQL (
localhost:5433): 모든 데이터 저장됨 (로컬 컴퓨터)
- Render PostgreSQL (클라우드): 비어있음 (Render 서버)
- Render 웹 서비스는 클라우드에서 실행되므로 로컬 DB에 접근 불가
- 따라서 Render DB로 데이터 복사 필요
해결 방법: 로컬 DB → Render DB 마이그레이션
방법 1: pg_dump + pg_restore (추천, 가장 빠름)
# 1. 로컬 DB 전체 덤프
pg_dump -h 172.17.240.1 -p 5433 -U postgres -d drs_db -Fp -f drs_backup.sql
# Password: [로컬 PostgreSQL postgres 유저 비밀번호]
# 2. Render DB에 복원
PGPASSWORD=tnCRCHXlO7Ugu3eLzoZub5ME2HBUJz75 psql \
-h dpg-d4ji276uk2gs73bln7c0-a.singapore-postgres.render.com \
-p 5432 -U drs_user -d drs_db_iji8 \
-f drs_backup.sql
방법 2: DB 스크립트 재실행 (시간 더 걸림)
# 1. DB/.env 파일 생성 (Render DB 정보)
cat > DB/.env << 'EOF'
PG_HOST=dpg-d4ji276uk2gs73bln7c0-a.singapore-postgres.render.com
PG_PORT=5432
PG_DB=drs_db_iji8
PG_USER=drs_user
PG_PASSWORD=tnCRCHXlO7Ugu3eLzoZub5ME2HBUJz75
EOF
# 2. 가상 환경 활성화 및 패키지 설치
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 3. 테이블 생성
PGPASSWORD=tnCRCHXlO7Ugu3eLzoZub5ME2HBUJz75 psql \
-h dpg-d4ji276uk2gs73bln7c0-a.singapore-postgres.render.com \
-p 5432 -U drs_user -d drs_db_iji8 \
-f DB/init_tables.sql
# 4. 데이터 수집 스크립트 실행
python3 DB/ingest_prices.py
python3 DB/build_segments.py
문제 5: PostgreSQL 버전 불일치 (pg_dump)
증상
pg_dump: error: aborting because of server version mismatch
pg_dump: detail: server version: 18.1; pg_dump version: 16.10
원인
- 로컬 PostgreSQL 서버 버전(18.1)과 pg_dump 클라이언트 버전(16.10) 불일치
해결 방법
옵션 1: Docker 사용 (추천)
docker run --rm \
-v $(pwd):/backup \
postgres:18 \
pg_dump -h 172.17.240.1 -p 5433 -U postgres -d drs_db -Fp -f /backup/drs_backup.sql
옵션 2: Plain text 형식 사용
pg_dump -h 172.17.240.1 -p 5433 -U postgres -d drs_db -f drs_backup.sql
환경 변수 체크리스트
Render 웹 서비스 (drs-api)
| 변수명 |
예시 값 |
설명 |
| DATA_SOURCE |
postgresql |
데이터 소스 (반드시 postgresql) |
| PG_HOST |
dpg-xxxxx-a |
Internal hostname 사용 (더 빠름) |
| PG_PORT |
5432 |
PostgreSQL 포트 |
| PG_DATABASE |
drs_db_iji8 |
Render DB 이름 |
| PG_USER |
drs_user |
Render DB 유저 |
| PG_PASSWORD |
tnCRCHXl... |
Render DB 비밀번호 |
| API_HOST |
0.0.0.0 |
API 호스트 |
| LOG_LEVEL |
INFO |
로그 레벨 |
DB 스크립트용 (.env 파일)
DB/.env 파일:
PG_HOST=dpg-xxxxx.singapore-postgres.render.com
PG_PORT=5432
PG_DB=drs_db_iji8
PG_USER=drs_user
PG_PASSWORD=tnCRCHXlO7Ugu3eLzoZub5ME2HBUJz75
주의:
- 웹 서비스 환경 변수는
PG_DATABASE 사용
- DB 스크립트는
PG_DB 사용 (다름!)
- External hostname: 외부 접속용 (pgAdmin, 로컬 스크립트)
- Internal hostname: Render 서비스 간 연결용 (더 빠름)
배포 성공 확인
1. 배포 로그 확인
==> Your service is live 🎉
Available at: https://drs-le2r.onrender.com
2. PostgreSQL 연결 확인
PostgreSQL connection pool initialized: drs_db_iji8@dpg-xxxxx:5432
PostgreSQL connection initialized: 896 segments available
3. API 테스트
# Health check
curl https://drs-le2r.onrender.com/health
# API 문서
https://drs-le2r.onrender.com/docs
# 유사도 검색 테스트
https://drs-le2r.onrender.com/web/index.html
추가 팁
Render Free Tier 제한사항
- 15분간 요청 없으면 슬립 모드
- 첫 요청 시 콜드 스타트 (~30초)
- PostgreSQL: 90일 후 삭제 (정기적으로 접속 필요)
로컬 개발 vs 배포
- 로컬:
localhost:5433 PostgreSQL, .env 파일 사용
- Render: Render PostgreSQL, 환경 변수로 설정
데이터 업데이트
로컬에서 데이터를 업데이트한 후:
- 로컬 DB 덤프
- Render DB에 복원
- 또는 Render DB에 직접 스크립트 실행
문제가 계속되면?
- 배포 로그 확인: Render 대시보드 → Logs 탭
- 환경 변수 재확인: Environment 탭에서 모든 값 확인
- Manual Deploy: 강제로 최신 커밋 재배포
- Clear build cache: Render Settings → "Clear build cache & deploy"
작성일: 2025-11-26
Render 배포 트러블슈팅 가이드
Render로 DRS를 배포하면서 발생한 문제들과 해결 방법을 기록합니다.
문제 1: ModuleNotFoundError: No module named 'psycopg2'
증상
원인
requirements.txt에psycopg2-binary패키지가 누락됨해결 방법
requirements.txt에psycopg2-binary추가:변경사항 커밋 및 푸시:
git add requirements.txt git commit -m "fix: add psycopg2-binary dependency" git push origin mainRender가 자동으로 재배포하거나 수동으로 "Deploy latest commit" 실행
문제 2: SSL connection has been closed unexpectedly
증상
원인
해결 방법
app/db_io.py의init_pool()함수에sslmode='require'추가:변경사항 커밋 및 푸시:
git add app/db_io.py git commit -m "fix: add SSL support for Render PostgreSQL connection" git push origin main문제 3: Connection pool not initialized
증상
원인
app/main.py의warmup()함수가 PostgreSQL 연결 초기화에 실패함해결 방법
Render PostgreSQL 데이터베이스 생성:
drs-postgresdrs_db_iji8(자동 생성됨)연결 정보 확인:
Render 웹 서비스에 환경 변수 설정:
"Save Changes" 클릭 → 자동 재배포
확인 방법
배포 로그에서 다음 메시지 확인:
문제 4: relation "graph_segments" does not exist
증상
원인
이해
localhost:5433): 모든 데이터 저장됨 (로컬 컴퓨터)해결 방법: 로컬 DB → Render DB 마이그레이션
방법 1: pg_dump + pg_restore (추천, 가장 빠름)
방법 2: DB 스크립트 재실행 (시간 더 걸림)
문제 5: PostgreSQL 버전 불일치 (pg_dump)
증상
원인
해결 방법
옵션 1: Docker 사용 (추천)
docker run --rm \ -v $(pwd):/backup \ postgres:18 \ pg_dump -h 172.17.240.1 -p 5433 -U postgres -d drs_db -Fp -f /backup/drs_backup.sql옵션 2: Plain text 형식 사용
환경 변수 체크리스트
Render 웹 서비스 (drs-api)
postgresqldpg-xxxxx-a5432drs_db_iji8drs_usertnCRCHXl...0.0.0.0INFODB 스크립트용 (.env 파일)
DB/.env파일:주의:
PG_DATABASE사용PG_DB사용 (다름!)배포 성공 확인
1. 배포 로그 확인
2. PostgreSQL 연결 확인
3. API 테스트
추가 팁
Render Free Tier 제한사항
로컬 개발 vs 배포
localhost:5433PostgreSQL,.env파일 사용데이터 업데이트
로컬에서 데이터를 업데이트한 후:
문제가 계속되면?
작성일: 2025-11-26