O2Sound_ver2_final/backend/tests/POSTGRESQL_TEST_GUIDE.md

3.6 KiB

PostgreSQL 테스트 환경 설정 가이드

🐘 PostgreSQL 설치 및 설정

1. PostgreSQL 설치

Ubuntu/Debian

sudo apt update
sudo apt install postgresql postgresql-contrib

MacOS

brew install postgresql
brew services start postgresql

2. 테스트 데이터베이스 설정

자동 설정 (권장)

# 실행 권한 부여
chmod +x setup-postgres-test.sh

# PostgreSQL 테스트 환경 자동 설정
./setup-postgres-test.sh

# 설정 후 바로 테스트 실행
./setup-postgres-test.sh test

수동 설정

# PostgreSQL에 접속
sudo -u postgres psql

# 테스트 데이터베이스 생성
CREATE DATABASE test_o2sound;

# 사용자 비밀번호 설정 (옵션)
ALTER USER postgres PASSWORD 'postgres';

# 종료
\q

3. 환경 변수 설정

.env.test 파일이 자동으로 생성됩니다:

TEST_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/test_o2sound

🚀 테스트 실행

기본 실행

# 모든 테스트 실행
./run-tests.sh

# 특정 테스트만 실행
./run-tests.sh auth
./run-tests.sh user
./run-tests.sh moviemaker

고급 옵션

# Verbose 모드
./run-tests.sh verbose

# 커버리지 포함
./run-tests.sh coverage

# 통합 테스트만
./run-tests.sh integration

# SQLite 폴백 (제한적)
./run-tests.sh sqlite

🔧 문제 해결

PostgreSQL 연결 실패

# PostgreSQL 서비스 상태 확인
sudo systemctl status postgresql

# 서비스 시작
sudo systemctl start postgresql

# 인증 방법 확인 (pg_hba.conf)
sudo nano /etc/postgresql/*/main/pg_hba.conf
# local all postgres trust 로 변경
sudo systemctl restart postgresql

권한 문제

# 현재 사용자로 데이터베이스 생성
createdb -U $USER test_o2sound

# 또는 postgres 사용자로 실행
sudo -u postgres createdb test_o2sound

포트 충돌

# PostgreSQL 포트 확인
sudo netstat -plnt | grep 5432

# 다른 포트 사용 시
TEST_DATABASE_URL=postgresql://postgres:postgres@localhost:5433/test_o2sound

📋 테스트 데이터베이스 관리

데이터베이스 초기화

# 데이터베이스 삭제 및 재생성
sudo -u postgres dropdb test_o2sound
sudo -u postgres createdb test_o2sound

테이블 확인

sudo -u postgres psql -d test_o2sound -c "\dt"

테스트 후 정리

# 모든 테이블 삭제
sudo -u postgres psql -d test_o2sound -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"

🎯 CI/CD 설정

GitHub Actions

services:
  postgres:
    image: postgres:15
    env:
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: test_o2sound
    options: >-
      --health-cmd pg_isready
      --health-interval 10s
      --health-timeout 5s
      --health-retries 5      
    ports:
      - 5432:5432

steps:
  - name: Run tests
    env:
      TEST_DATABASE_URL: postgresql://postgres:postgres@localhost:5432/test_o2sound
    run: |
      poetry install
      poetry run pytest tests/      

Docker Compose

version: '3.8'
services:
  test-db:
    image: postgres:15
    environment:
      POSTGRES_DB: test_o2sound
      POSTGRES_PASSWORD: postgres
    ports:
      - "5432:5432"

장점

  1. 완전한 호환성: PostgreSQL 특수 타입 (ARRAY, UUID, JSONB) 모두 지원
  2. 실제 환경과 동일: 프로덕션과 동일한 데이터베이스 사용
  3. 트랜잭션 격리: 각 테스트가 독립적으로 실행
  4. 빠른 실행: 메모리 기반 테스트보다 약간 느리지만 더 정확

이제 PostgreSQL을 사용하여 모든 테스트를 문제없이 실행할 수 있습니다!