이 가이드는 okdevtv와 odevtube를 하나의 통합 애플리케이션으로 운영하기 위한 방법을 설명합니다.
- 단일 데이터베이스: 두 프로젝트가 같은 MariaDB/MySQL 데이터베이스 사용
- 통합 인증: 공유 사용자 계정 및 Passport.js 설정
- 확장 라우팅:
/- okdevtv 메인 페이지/video- 새로운 비디오 관리 API/user- 사용자 관리- 기타 기존 라우트들
통합 데이터베이스에는 다음 테이블이 포함됩니다:
Accounts - 사용자 정보 (GitHub OAuth)
Channels - 유튜브 채널
Videos - 유튜브 비디오
Transcripts - 비디오 자막/요약
UserChannels - 사용자-채널 관계 (M:N)
UserVideos - 사용자-비디오 관계 (M:N)
# .env 파일 생성
cp .env.example .env
# 필수 설정 항목:
DB_HOST=localhost
DB_NAME=okdevtv_integrated
DB_USER=devuser
DB_PASS=devpass
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret
YOUTUBE_API_KEY=your_youtube_api_key# MariaDB/MySQL에서 데이터베이스 생성
mysql -u devuser -p
> CREATE DATABASE okdevtv_integrated CHARACTER SET utf8mb4;
> EXIT;npm installnpm run migrate:db이 명령어는:
- 모든 데이터베이스 테이블 생성
- 필요한 인덱스 생성
- 테이블 구조 동기화
# 개발 모드 (nodemon으로 자동 재시작)
npm run dev
# 프로덕션 모드
npm startGET /video?category=dev&lang=ko&page=1&pageSize=60
파라미터:
category: 카테고리 (dev, food, kpop, actor 등)lang: 언어 (ko, en)page: 페이지 번호pageSize: 한 페이지의 비디오 수search: 검색 키워드 (선택사항)format: 응답 형식 (json 또는 html)
응답:
{
"videos": [...],
"totalCount": 100,
"totalPages": 2,
"currentPage": 1
}GET /video/category/:category?page=1&pageSize=60
GET /video/stats/category
GET /video/stats/yearly
GET /video/stats/monthly?months=12
GET /video/top-channels?limit=10
GET /- 메인 페이지GET /okdevtv-list- 개발팁 목록GET /apis- API 관련 페이지GET /hq- HQ 페이지GET /mib- 문제은행GET /645- 로또번호
GET /user- 사용자 정보 조회GET /users- 전체 사용자 목록POST /user/update- 사용자 정보 수정GET /login- 로그인 페이지GET /login/github- GitHub OAuth 로그인
기존 프로젝트의 데이터를 옮기려면:
기존 okdevtv 데이터는 계속 사용 가능합니다.
odevtube 데이터베이스를 통합 데이터베이스로 마이그레이션하려면:
-- 기존 odevtube 데이터 마이그레이션 예시
INSERT INTO okdevtv_integrated.Accounts
SELECT * FROM odevtube.Accounts;
INSERT INTO okdevtv_integrated.Channels
SELECT * FROM odevtube.Channels;
INSERT INTO okdevtv_integrated.Videos
SELECT * FROM odevtube.Videos;
-- 이미 같은 스키마를 사용하므로 직접 복사 가능okdevtv/
├── bin/
│ └── www # 앱 진입점
├── routes/
│ ├── index.js # 메인 라우트
│ ├── video.js # 비디오 관리 라우트 (통합)
│ ├── user.js # 사용자 라우트
│ ├── login.js # 로그인 라우트
│ └── ...
├── models/
│ ├── Account.js # 사용자 모델
│ ├── Channel.js # 채널 모델 (from odevtube)
│ ├── Video.js # 비디오 모델 (from odevtube)
│ ├── Transcript.js # 자막 모델 (from odevtube)
│ └── index.js # 데이터베이스 설정
├── dao/
│ ├── videoDao.js # 비디오 DAO (통합)
│ ├── channelDao.js # 채널 DAO (통합)
│ ├── accountDao.js # 계정 DAO (통합)
│ └── transcriptDao.js # 자막 DAO (통합)
├── lib/ # okdevtv 라이브러리
├── public/ # 정적 파일
├── views/ # EJS 템플릿
├── app.js # Express 앱 설정
├── package.json # 의존성 정의
└── .env.example # 환경변수 템플릿
- GitHub OAuth 기반 로그인
- 공유 사용자 세션
- Passport.js 통합
- odevtube의 모든 비디오/채널 기능
- okdevtv의 기존 기능과 함께 작동
- 통일된 API 인터페이스
- Account 테이블을 통한 사용자 관리
- 채널/비디오 구독 기능
- 사용자별 구독 채널 조회
# MySQL 연결 확인
mysql -h localhost -u devuser -p devdb
# 데이터베이스 재생성
npm run migrate:db모든 Node.js 파일이 CommonJS 형식으로 변환되었습니다.
ES6 import/export 문법을 사용하려면 package.json에서 "type": "module"을 추가하고 모든 코드를 수정해야 합니다.
환경변수 PORT로 다른 포트 설정:
PORT=3001 npm start- View 통합: odevtube 뷰들을 okdevtv 디렉토리로 병합
- 전체 라우트 통합: 남은 odevtube 라우트 기능 추가
- Admin 패널: 통합 관리자 대시보드 구현
- 테스트: 통합 테스트 스위트 작성
- Runtime: Node.js
- Framework: Express 5.2.1
- ORM: Sequelize 6.37.8
- Database: MariaDB 3.4.5
- Authentication: Passport.js
- Template Engine: EJS
- Module System: CommonJS (require/module.exports)
MIT
문제나 질문사항이 있으시면:
- 깃허브 이슈 작성
- 메일 연락