This commit is contained in:
2026-04-03 20:53:29 +09:00
parent 0ecf3f67aa
commit 3dd980474f

View File

@@ -70,7 +70,7 @@
## 프로젝트 구조 ## 프로젝트 구조
```text ```text
webplatform/ ai_platform/
├─ server.js # Express 서버 진입점 (라우팅, 업로드, 썸네일 큐, DB 연동) ├─ server.js # Express 서버 진입점 (라우팅, 업로드, 썸네일 큐, DB 연동)
├─ package.json # 의존성 및 npm 스크립트 ├─ package.json # 의존성 및 npm 스크립트
├─ .env # 환경 변수 (실제 값, .gitignore 대상) ├─ .env # 환경 변수 (실제 값, .gitignore 대상)
@@ -146,10 +146,11 @@ PPT 썸네일·슬라이드 이미지는 **macOS**에서는 `qlmanage`가 우선
2. **코드 받기** 2. **코드 받기**
```bash ```bash
mkdir -p ~/apps && cd ~/apps mkdir -p ~/workspace && cd ~/workspace
git clone <저장소 URL> webplatform git clone <저장소 URL> ai_platform
cd webplatform cd ai_platform
``` ```
(이미 클론한 경우 예: `cd /Users/dsyoon/workspace/ai_platform`)
3. **의존성·환경** 3. **의존성·환경**
```bash ```bash
@@ -165,8 +166,7 @@ PPT 썸네일·슬라이드 이미지는 **macOS**에서는 `qlmanage`가 우선
5. **실행 방식 선택** 5. **실행 방식 선택**
- **포그라운드(테스트)**: `npm start` → 터미널에 `Server started: http://localhost:8030` 확인 후 브라우저 접속 - **포그라운드(테스트)**: `npm start` → 터미널에 `Server started: http://localhost:8030` 확인 후 브라우저 접속
- **백그라운드(운영에 가깝게)**: `npm install -g pm2` 후 - **백그라운드(PM2)**: 아래 「[PM2로 실행](#pm2로-실행)」 절 참고 (`pm2 start … --name ai_platform`)
`pm2 start server.js --name webplatform && pm2 save`
6. **접속** 6. **접속**
같은 Mac에서: `http://127.0.0.1:8030` (또는 `.env`의 `PORT`). 다른 기기에서 접속하려면 `HOST=0.0.0.0`이 기본이므로, **macOS 방화벽**에서 Node 허용 여부를 확인합니다. 같은 Mac에서: `http://127.0.0.1:8030` (또는 `.env`의 `PORT`). 다른 기기에서 접속하려면 `HOST=0.0.0.0`이 기본이므로, **macOS 방화벽**에서 Node 허용 여부를 확인합니다.
@@ -175,7 +175,7 @@ PPT 썸네일·슬라이드 이미지는 **macOS**에서는 `qlmanage`가 우선
### Linux에서 배포 (새 서버) ### Linux에서 배포 (새 서버)
배포 경로는 예시로 `/var/www/webplatform`을 둡니다. 배포 사용자·그룹(`www-data` 등)은 배포 정책에 맞게 조정하세요. 배포 경로는 예시로 `/var/www/ai_platform`을 둡니다. 배포 사용자·그룹(`www-data` 등)은 배포 정책에 맞게 조정하세요.
1. **시스템 패키지** (Ubuntu/Debian 예시) 1. **시스템 패키지** (Ubuntu/Debian 예시)
```bash ```bash
@@ -190,9 +190,9 @@ PPT 썸네일·슬라이드 이미지는 **macOS**에서는 `qlmanage`가 우선
```bash ```bash
sudo mkdir -p /var/www sudo mkdir -p /var/www
cd /var/www cd /var/www
sudo git clone <저장소 URL> webplatform sudo git clone <저장소 URL> ai_platform
cd webplatform cd ai_platform
sudo chown -R "$USER:$USER" /var/www/webplatform # 이후 작업 사용자에 맞게 조정 sudo chown -R "$USER:$USER" /var/www/ai_platform # 이후 작업 사용자에 맞게 조정
``` ```
3. **의존성·환경** 3. **의존성·환경**
@@ -210,8 +210,8 @@ PPT 썸네일·슬라이드 이미지는 **macOS**에서는 `qlmanage`가 우선
5. **프로세스 관리 (PM2 권장)** 5. **프로세스 관리 (PM2 권장)**
```bash ```bash
sudo npm install -g pm2 sudo npm install -g pm2
cd /var/www/webplatform cd /var/www/ai_platform
pm2 start server.js --name webplatform pm2 start server.js --name ai_platform
pm2 save pm2 save
pm2 startup # 부팅 시 자동 기동(출력되는 sudo 명령 실행) pm2 startup # 부팅 시 자동 기동(출력되는 sudo 명령 실행)
``` ```
@@ -228,7 +228,7 @@ PPT 썸네일·슬라이드 이미지는 **macOS**에서는 `qlmanage`가 우선
### 배포 후 확인 ### 배포 후 확인
- 터미널 또는 `pm2 logs webplatform`에서 **에러 없이** `Server started` 로그 확인 - 터미널 또는 `pm2 logs ai_platform`에서 **에러 없이** `Server started` 로그 확인
- 브라우저로 메인·`/learning`·관리자(토큰)까지 동작 확인 - 브라우저로 메인·`/learning`·관리자(토큰)까지 동작 확인
- PostgreSQL 사용 시 `npm run db:schema`는 **최초 1회**(또는 스키마 변경 시); 백업·마이그레이션 정책은 운영 환경에 맞게 별도 수립 - PostgreSQL 사용 시 `npm run db:schema`는 **최초 1회**(또는 스키마 변경 시); 백업·마이그레이션 정책은 운영 환경에 맞게 별도 수립
@@ -260,13 +260,61 @@ npm start
정상 기동 시 터미널에 `Server started: http://localhost:8030` (또는 설정한 `PORT`)가 출력됩니다. **이 상태에서만** 브라우저로 접속할 수 있습니다. 정상 기동 시 터미널에 `Server started: http://localhost:8030` (또는 설정한 `PORT`)가 출력됩니다. **이 상태에서만** 브라우저로 접속할 수 있습니다.
운영/배포 환경에서는 예: ### PM2로 실행
프로젝트 루트에서 실행해야 `server.js`가 같은 디렉터리의 `.env`를 읽습니다( `dotenv` 기준).
**1) PM2 설치 (전역, 한 번)**
```bash ```bash
# PM2 사용 시 npm install -g pm2
pm2 restart webplatform
``` ```
**2) 프로젝트 디렉터리로 이동 후 의존성**
```bash
cd /Users/dsyoon/workspace/ai_platform
npm install
cp .env.example .env # 최초 1회 — 값 편집
```
**3) 앱 기동**
```bash
pm2 start server.js --name ai_platform
```
`npm start`와 동일하게 `server.js`를 띄웁니다. 이름만 PM2에서 `ai_platform`으로 관리합니다.
**4) 재부팅 후에도 유지 (선택)**
```bash
pm2 save
pm2 startup
```
`pm2 startup`이 출력하는 `sudo env PATH=...` 한 줄을 그대로 실행한 뒤, 다시 `pm2 save`를 하면 부팅 시 자동 기동에 맞춰집니다.
**5) 자주 쓰는 명령**
| 목적 | 명령 |
|------|------|
| 상태 확인 | `pm2 list` |
| 로그(실시간) | `pm2 logs ai_platform` |
| 재시작 | `pm2 restart ai_platform` |
| 중지 | `pm2 stop ai_platform` |
| 목록에서 제거 | `pm2 delete ai_platform` |
**환경 변수**: 포트·DB 등은 프로젝트 루트의 `.env`에 두고, 변경 후 `pm2 restart ai_platform`으로 반영합니다. 별도 경로에 두었다면 해당 디렉터리에서 `pm2 start` 하거나, `ecosystem` 설정으로 `cwd`를 지정하세요.
운영/배포 환경에서 이미 PM2로 띄운 경우 재시작 예:
```bash
pm2 restart ai_platform
```
로컬에서 포그라운드로만 확인할 때:
```bash ```bash
node server.js node server.js
``` ```
@@ -315,9 +363,9 @@ pkill -f "node server.js"
```bash ```bash
pm2 list pm2 list
pm2 stop webplatform pm2 stop ai_platform
# 완전히 제거하려면 # 완전히 제거하려면
pm2 delete webplatform pm2 delete ai_platform
``` ```
Windows에서는 작업 관리자에서 `Node.js` 프로세스를 종료하거나, PowerShell에서 `Get-NetTCPConnection -LocalPort 8030` 등으로 점유 프로세스를 확인한 뒤 해당 PID를 종료합니다. Windows에서는 작업 관리자에서 `Node.js` 프로세스를 종료하거나, PowerShell에서 `Get-NetTCPConnection -LocalPort 8030` 등으로 점유 프로세스를 확인한 뒤 해당 PID를 종료합니다.