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

View File

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