Skip to content

ON-AIR-mate/Node.js

Repository files navigation

ON-AIR mate Backend

πŸ’‘ ν”„λ‘œμ νŠΈ μ†Œκ°œ

ON-AIR mateλŠ” 친ꡬ, 팬, ν˜Ήμ€ μƒˆλ‘œμš΄ μ‚¬λžŒλ“€κ³Ό 유튜브 μ˜μƒμ„ ν•¨κ»˜ 보며 μ‹€μ‹œκ°„μœΌλ‘œ μ†Œν†΅ν•  수 μžˆλŠ” μ†Œμ…œ λΉ„λ””μ˜€ ν”Œλž«νΌμž…λ‹ˆλ‹€. μ˜μƒμ˜ μˆœκ°„μ„ 뢁마크둜 κΈ°λ‘ν•˜κ³ , 감상 포인트λ₯Ό λͺ¨μ•„ λ‚˜λ§Œμ˜ μ•„μΉ΄μ΄λΈŒλ₯Ό λ§Œλ“€λ©°, AIκ°€ λŒ€ν™” λ‚΄μš©μ„ μš”μ•½ν•΄ λ†“μΉ˜κΈ° μ‰¬μš΄ μˆœκ°„μ„ μ •λ¦¬ν•΄μ€λ‹ˆλ‹€.

✨ μ£Όμš” κΈ°λŠ₯

  • μ‹€μ‹œκ°„ λ™μ˜μƒ μ‹œμ²­ + μ±„νŒ…: μ—¬λŸ¬ μ‚¬λžŒμ΄ λ™μ‹œμ— μ‹œμ²­ν•˜κ³  λŒ€ν™”ν•˜λ©° μƒμƒν•œ λ°˜μ‘ 곡유
  • νƒ€μž„λΌμΈ 뢁마크 & μ•„μΉ΄μ΄λΈŒ: νŠΉμ • μˆœκ°„μ„ κΈ°λ‘ν•˜κ³  μ»¬λ ‰μ…˜μœΌλ‘œ 정리
  • 친ꡬ & DM: μƒˆλ‘œμš΄ 친ꡬ μΆ”μ²œ, 1:1 λ©”μ‹œμ§€, μ»¬λ ‰μ…˜ 곡유
  • AI μ±„νŒ… μš”μ•½: μ±„νŒ…λ°© μ’…λ£Œ μ‹œ λŒ€ν™” λ‚΄μš© μžλ™ μš”μ•½ 및 감정 뢄석

πŸ§‘β€πŸ’» νŒ€μ› μ†Œκ°œ

κΉ€λ‹€μœ€ 민동일 μ΄μ„œμ§„ μž„κ°€ν¬

✨ Server Architecture

Server Architecture

πŸš€ 배포 정보 (운영 쀑) 🌐 ν”„λ‘œλ•μ…˜ μ„œλ²„

☁️ 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

πŸš€ 둜컬 개발 ν™˜κ²½ μ„€μ •

  1. ν”„λ‘œμ νŠΈ 클둠 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 μ„€μ •

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 μ„€μ • (개발 ν™˜κ²½μš©)

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

πŸš€ μžλ™μœΌλ‘œ EC2에 λ°°ν¬λ©λ‹ˆλ‹€!

배포 ν”„λ‘œμ„ΈμŠ€:

βœ… μ½”λ“œ ν’ˆμ§ˆ 검사 (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 μž¬μ‹œμž‘

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

Nginx μž¬μ‹œμž‘ (μ„€μ • λ³€κ²½ μ‹œ)

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

Prisma ν΄λΌμ΄μ–ΈνŠΈ μž¬μƒμ„±

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6

Languages