Files
travel/DATABASE_SETUP.md
Hyungi Ahn fd5a68e44a 🎯 프로젝트 리브랜딩: Kumamoto → Travel Planner v2.0
 주요 변경사항:
- 프로젝트 이름: kumamoto-travel-planner → travel-planner
- 버전 업그레이드: v1.0.0 → v2.0.0
- 멀티유저 시스템 구현 (JWT 인증)
- PostgreSQL 마이그레이션 시스템 추가
- Docker 컨테이너 이름 변경
- UI 브랜딩 업데이트 (Travel Planner)
- API 서버 및 인증 시스템 추가
- 여행 공유 기능 구현
- 템플릿 시스템 추가

🔧 기술 스택:
- Frontend: React + TypeScript + Vite
- Backend: Node.js + Express + JWT
- Database: PostgreSQL + 마이그레이션
- Infrastructure: Docker + Docker Compose

🌟 새로운 기능:
- 사용자 인증 및 권한 관리
- 다중 여행 계획 관리
- 여행 템플릿 시스템
- 공유 링크 및 댓글 시스템
- 관리자 대시보드
2025-11-25 10:39:58 +09:00

214 lines
4.7 KiB
Markdown

# 🗄️ 데이터베이스 설정 가이드
## 📋 개요
Travel Planner v2.0은 PostgreSQL을 사용하여 멀티 사용자 여행 계획을 관리합니다.
## 🚀 빠른 시작
### 1. PostgreSQL 설치 확인
```bash
# PostgreSQL 버전 확인
psql --version
# PostgreSQL 서비스 상태 확인 (macOS)
brew services list | grep postgresql
# PostgreSQL 시작 (macOS)
brew services start postgresql
```
### 2. 데이터베이스 생성
```bash
# PostgreSQL 접속
psql postgres
# 데이터베이스 생성
CREATE DATABASE kumamoto_travel;
# 사용자 생성 (선택사항)
CREATE USER kumamoto_user WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE kumamoto_travel TO kumamoto_user;
# 종료
\q
```
### 3. 환경 변수 설정
```bash
# 서버 디렉토리로 이동
cd server
# 환경 변수 파일 생성
cp env.example .env
# .env 파일 편집
nano .env
```
### 4. .env 파일 예시
```env
# 기본 설정 (로컬 개발용)
DATABASE_URL=postgresql://localhost:5432/kumamoto_travel
# 사용자 계정을 만든 경우
DATABASE_URL=postgresql://kumamoto_user:your_password@localhost:5432/kumamoto_travel
# JWT 시크릿 (랜덤한 문자열로 변경하세요)
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production-123456789
# 선택사항
GOOGLE_MAPS_API_KEY=your-google-maps-api-key
PORT=3000
NODE_ENV=development
```
## 🔧 서버 시작
### 1. 의존성 설치
```bash
cd server
npm install
```
### 2. 서버 실행
```bash
# 개발 모드
npm run dev
# 또는 일반 모드
npm start
```
### 3. 서버 확인
```bash
# 헬스 체크
curl http://localhost:3000/health
# 데이터베이스 연결 테스트
curl http://localhost:3000/api/setup/test-db
# 설정 상태 확인
curl http://localhost:3000/api/setup/status
```
## 📊 데이터베이스 스키마
### 주요 테이블
- **users**: 사용자 계정 (관리자/일반 사용자)
- **travel_plans**: 여행 계획 (멀티 목적지 지원)
- **day_schedules**: 날짜별 일정
- **activities**: 개별 활동
- **share_links**: 공유 링크 관리
- **trip_comments**: 여행 계획 댓글
### 스키마 업데이트
```bash
# 기존 데이터가 있는 경우 백업
pg_dump kumamoto_travel > backup.sql
# 새 스키마 적용
psql kumamoto_travel < server/schema_v2.sql
```
## 🔐 보안 설정
### JWT 시크릿 생성
```bash
# 랜덤 시크릿 생성 (Node.js)
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
# 또는 OpenSSL 사용
openssl rand -hex 64
```
### 데이터베이스 보안
```sql
-- 사용자별 권한 설정
REVOKE ALL ON SCHEMA public FROM PUBLIC;
GRANT USAGE ON SCHEMA public TO kumamoto_user;
GRANT ALL ON ALL TABLES IN SCHEMA public TO kumamoto_user;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO kumamoto_user;
```
## 🐛 문제 해결
### 연결 오류
```bash
# PostgreSQL 실행 확인
ps aux | grep postgres
# 포트 확인
lsof -i :5432
# 로그 확인
tail -f /usr/local/var/log/postgres.log
```
### 권한 오류
```sql
-- 데이터베이스 소유자 변경
ALTER DATABASE kumamoto_travel OWNER TO kumamoto_user;
-- 테이블 권한 부여
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO kumamoto_user;
```
### 스키마 초기화
```bash
# 모든 테이블 삭제 후 재생성
psql kumamoto_travel -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"
psql kumamoto_travel < server/schema_v2.sql
```
## 📈 성능 최적화
### 인덱스 확인
```sql
-- 인덱스 사용 현황
SELECT schemaname, tablename, indexname, idx_tup_read, idx_tup_fetch
FROM pg_stat_user_indexes;
-- 느린 쿼리 확인
SELECT query, mean_time, calls FROM pg_stat_statements ORDER BY mean_time DESC;
```
### 연결 풀 설정
```javascript
// server/db.js에서 연결 풀 조정
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
max: 20, // 최대 연결 수
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
});
```
## 🚀 프로덕션 배포
### 환경 변수 (프로덕션)
```env
DATABASE_URL=postgresql://user:password@host:port/database?sslmode=require
JWT_SECRET=production-secret-key-very-long-and-random
NODE_ENV=production
PORT=3000
```
### SSL 설정
```javascript
// SSL 연결 (프로덕션)
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: process.env.NODE_ENV === 'production' ? { rejectUnauthorized: false } : false
});
```
## 📞 지원
문제가 발생하면 다음을 확인하세요:
1. PostgreSQL 서비스 실행 상태
2. .env 파일의 DATABASE_URL 정확성
3. 데이터베이스 사용자 권한
4. 방화벽 설정 (포트 5432, 3000)
성공적으로 설정되면 브라우저에서 `http://localhost:5173`에 접속하여 초기 설정을 완료할 수 있습니다.