# Docker Compose Setup Guide

이 프로젝트는 Docker Compose를 사용하여 n8n과 함께 로컬 개발 또는 프로덕션 모드로 실행할 수 있습니다.

## 두 가지 실행 모드

### 1. 로컬 개발 모드 (Development Mode)

로컬에서 개발 중인 노드 파일들을 사용합니다. 소스 코드 변경 시 자동으로 빌드되고 반영됩니다.

```bash
# 기본 실행 (로컬 개발 모드)
docker-compose up

# 또는 명시적으로
NODE_MODE=dev docker-compose up
```

**특징:**
- `builder` 서비스가 소스 코드를 빌드합니다
- 로컬 `dist/` 폴더가 컨테이너에 마운트됩니다
- 소스 코드 변경 시 자동으로 재빌드 및 재설치됩니다
- 개발 중에 가장 편리한 방식입니다

### 2. 프로덕션 모드 (Production Mode)

npm 레지스트리에서 배포된 `n8n-nodes-upstage` 패키지를 설치합니다.

```bash
# 프로덕션 모드로 실행
NODE_MODE=prod docker-compose up

# 또는 docker-compose.prod.yml 사용
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
```

**특징:**
- npm 레지스트리에서 **항상 최신 버전** (`@latest`)을 설치합니다
- 컨테이너 시작 시마다 최신 버전으로 업데이트됩니다
- `builder` 서비스는 프로덕션 모드에서 자동으로 스킵됩니다 (빠른 시작)
- 프로덕션 환경이나 배포된 패키지 테스트에 적합합니다

**참고:** 프로덕션 모드에서는 컨테이너가 시작될 때마다 npm 레지스트리에서 최신 버전을 확인하고 설치합니다. 특정 버전을 고정하려면 `docker-compose.prod.yml`을 수정하여 `@latest` 대신 버전 번호를 지정할 수 있습니다.

## 환경 변수 설정

환경 변수를 통해 모드를 설정할 수 있습니다:

```bash
# 환경 변수로 설정
export NODE_MODE=prod  # 또는 dev
docker-compose up

# 또는 한 번에
NODE_MODE=prod docker-compose up
```

또는 `.env` 파일을 생성하여 설정할 수 있습니다:

```bash
# .env 파일 생성 및 편집
echo "NODE_MODE=dev" > .env  # 또는 prod

# docker-compose가 자동으로 .env 파일을 읽습니다
docker-compose up
```

## 사용 예시

### 로컬 개발
```bash
# 개발 모드로 시작
docker-compose up

# 백그라운드 실행
docker-compose up -d

# 로그 확인
docker-compose logs -f n8n

# 중지
docker-compose down
```

### 프로덕션 테스트
```bash
# 프로덕션 모드로 시작
NODE_MODE=prod docker-compose up

# 또는 override 파일 사용
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
```

### 데이터 초기화
```bash
# n8n 데이터 삭제 후 재시작
docker-compose down -v
docker-compose up
```

## 문제 해결

### 빌드 오류
- Node.js 버전 확인: `node --version` (18 이상 필요)
- 의존성 재설치: `npm ci`

### 노드가 보이지 않음
- `N8N_COMMUNITY_NODES_ENABLED=true` 확인
- 브라우저 캐시 삭제
- n8n 재시작

### 프로덕션 모드에서 패키지 설치 실패
- 네트워크 연결 확인
- npm 레지스트리 접근 가능 여부 확인
- `npm install n8n-nodes-upstage@latest --legacy-peer-deps` 수동 실행 테스트

### 특정 버전 고정하기

프로덕션 모드에서 특정 버전을 사용하려면 `docker-compose.yml`의 entrypoint에서 `@latest`를 버전 번호로 변경하세요:

```yaml
# 예: 버전 0.3.0 고정
npm install n8n-nodes-upstage@0.3.0 --legacy-peer-deps --save
```

또는 `docker-compose.prod.yml`에 환경 변수를 추가하여 버전을 제어할 수 있습니다.

## 파일 구조

```
.
├── docker-compose.yml          # 기본 구성 (로컬 개발)
├── docker-compose.prod.yml     # 프로덕션 오버라이드
├── .env.example                # 환경 변수 예시
└── README.docker.md            # 이 파일
```

