ON-AIR mate는 친구, 팬, 혹은 새로운 사람들과 유튜브 영상을 함께 보며 실시간으로 소통할 수 있는 소셜 비디오 플랫폼입니다. 영상의 순간을 북마크로 기록하고, 감상 포인트를 모아 나만의 아카이브를 만들며, AI가 대화 내용을 요약해 놓치기 쉬운 순간을 정리해줍니다.
- 실시간 동영상 시청 + 채팅: 여러 사람이 동시에 시청하고 대화하며 생생한 반응 공유
- 타임라인 북마크 & 아카이브: 특정 순간을 기록하고 컬렉션으로 정리
- 친구 & DM: 새로운 친구 추천, 1:1 메시지, 컬렉션 공유
- AI 채팅 요약: 채팅방 종료 시 대화 내용 자동 요약 및 감정 분석
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|
| 김다윤 | 민동일 | 이서진 | 임가희 |
🚀 배포 정보 (운영 중) 🌐 프로덕션 서버
- 서버 URL: https://onairmate.duckdns.org/
- Swagger URL: https://onairmate.duckdns.org/
- 헬스체크: https://onairmate.duckdns.org/health 상태: 🟢 ONLINE (24시간 운영) 보안: 🔒 HTTPS 활성화 (자체 서명 인증서)
☁️ AWS 인프라
EC2: i-0a91a4de26d731d88 (t2.micro, Amazon Linux 2023) RDS: MySQL 8.0 (db.t3.micro) 리전: ap-northeast-2 (서울) 보안그룹: HTTP(80), HTTPS(443), SSH(22) 오픈 웹서버: Nginx (리버스 프록시)
🔄 배포 상태
프로세스 관리: PM2 자동 재시작: 활성화 로그 로테이션: 활성화 GitHub Actions: 자동 배포 설정 완료 HTTPS: 자체 서명 SSL 인증서 적용
🛠️ 기술 스택
Language: TypeScript Runtime: Node.js 20.x Framework: Express.js ORM: Prisma Database: MySQL 8.0 (AWS RDS) Process Manager: PM2 Web Server: Nginx (리버스 프록시) CI/CD: GitHub Actions
개발 도구
Linting: ESLint Formatting: Prettier API 문서: Swagger UI
🚀 로컬 개발 환경 설정
- 프로젝트 클론 bash# 레포지토리 클론 git clone https://github.com/ON-AIR-mate/Node.js.git cd Node.js
npm install 2. 환경 변수 설정 .env 파일 내용 (팀원별로 별도 공유): env# 서버 설정 PORT=3000 NODE_ENV=development
JWT_ACCESS_SECRET=your_jwt_access_secret_key_here JWT_REFRESH_SECRET=your_jwt_refresh_secret_key_here
DATABASE_URL="mysql://username:password@host:3306/database" DB_HOST=localhost DB_USER=root DB_PASSWORD=your_password DB_NAME=onairmate_dev DB_PORT=3306
AWS_REGION=ap-northeast-2 AWS_ACCESS_KEY_ID=your_dev_access_key AWS_SECRET_ACCESS_KEY=your_dev_secret_key S3_BUCKET_NAME=your_dev_bucket 3. 개발 서버 실행 bash# 개발 서버 시작 (자동 재시작) npm run dev 접속 URL:
API 서버: http://localhost:3000 API 문서: http://localhost:3000/api-docs 헬스체크: http://localhost:3000/health
🔄 배포 가이드 🤖 자동 배포 (권장) GitHub Actions 사용 - main 브랜치 push 시 자동 배포 bash# 로컬에서 작업 git add . git commit -m "[feat] 새로운 기능 추가" git push origin main
배포 프로세스:
✅ 코드 품질 검사 (ESLint) ✅ TypeScript 빌드 ✅ EC2 SSH 접속 ✅ 코드 pull 및 의존성 설치 ✅ 프로덕션 빌드 ✅ PM2 재시작 ✅ 헬스체크 확인
GitHub Actions 설정:
Settings → Secrets and variables → Actions에서 설정 완료 EC2_KEY: SSH 키 파일 설정 완료 ✅ EC2_HOST: 54.180.254.48 ✅ EC2_USER: ec2-user ✅
👨💻 수동 배포 (비상시) bash# EC2 접속 ssh -i your-key.pem ec2-user@54.180.254.48
cd /home/ec2-user/on-air-mate
git pull origin main
npm ci npm run format npm run build
pm2 restart onairmate-api
pm2 status curl https://localhost:3000/health
🔒 HTTPS/SSL 설정 Nginx 리버스 프록시 구성
Nginx: 80/443 포트 → Node.js 3000 포트로 프록시 SSL: 자체 서명 인증서 사용 (개발/테스트 환경) 위치: /etc/nginx/conf.d/app.conf
인증서 관리 bash# 인증서 위치 /etc/nginx/ssl/certificate.crt /etc/nginx/ssl/private.key
sudo systemctl restart nginx 향후 계획
Let's Encrypt 무료 인증서 적용 (도메인 구매 후) AWS Certificate Manager + ALB 고려
🔧 개발 도구 설정 VS Code 자동 포맷팅 (권장) 프로젝트에 VS Code 설정이 포함되어 있어 파일 저장 시 자동 포맷팅됩니다:
필수 확장 프로그램:
esbenp.prettier-vscode (Prettier) dbaeumer.vscode-eslint (ESLint)
저장 시 자동 적용 ✨
코드 품질 관리 bash# 🔥 포맷팅 + 린팅 (한번에) npm run format
npm run check
npm run build
npm run dev
NODE_ENV=production npm start
🗄️ 데이터베이스 Prisma 설정 bash# 스키마 변경 후 마이그레이션 npm run db:migrate
npx prisma migrate dev --name migration_name
npx prisma generate
npx prisma studio MySQL 연결 정보
호스트: AWS RDS (서울 리전) 엔진: MySQL 8.0 (db.t3.micro) 포트: 3306 데이터베이스: onairmate 연결 풀: 10개 연결 제한
🎯 운영 관리 PM2 명령어 bash# 상태 확인 pm2 status
pm2 logs onairmate-api
pm2 monit
pm2 restart onairmate-api
pm2 stop onairmate-api pm2 start onairmate-api
pm2 show onairmate-api
NODE_ENV=production pm2 start ecosystem.config.js Nginx 관리 bash# 상태 확인 sudo systemctl status nginx
sudo nginx -t
sudo systemctl restart nginx
sudo tail -f /var/log/nginx/access.log sudo tail -f /var/log/nginx/error.log 시스템 모니터링 bash# 서버 리소스 확인 htop # CPU/메모리 실시간 free -h # 메모리 사용량 df -h # 디스크 사용량
sudo ss -tulpn | grep :3000 # Node.js 포트 sudo ss -tulpn | grep :443 # HTTPS 포트 netstat -an | grep :443 # HTTPS 연결 상태
ps aux | grep node ps aux | grep nginx




