카테고리 없음

[웹사이트 개발] EP.3 유튜브 구독자 인증 -> 교환학생 가계부 노션 템플릿 제공

햣둘 2025. 5. 10. 10:52

1. EC2 서버 환경 구성

  • ✅ EC2 서버 구축
    AWS EC2에 Ubuntu 22.04 인스턴스를 생성하고 퍼블릭 IP 연결.
  • ✅ 도메인 연결
    jjangdaye.com 구입 후 Route 53, ACM 인증 없이 직접 A 레코드로 퍼블릭 IP 연결.
  • ✅ Nginx 설치 및 HTTPS 세팅
    • sudo apt install nginx
    • Let's Encrypt(3개월 전 발급) 인증서 적용하여 SSL(TLS) 완료.
    • 80, 443 포트 오픈 및 리버스 프록시 설정.
  • ✅ SSH 접근 보안 강화
    • EC2 보안 그룹에서 SSH(22번 포트)는 내 현재 IP만 허용.
    • 임시로 0.0.0.0/0 전체 오픈 → 세팅 완료 후 내 IP만 다시 허용.

2. Node.js 서버 준비 및 배포 자동화

  • ✅ 프로젝트 업로드
    • [로컬] 노트북에서 GitHub에 소스 업로드 (.env 파일 제외).
    • [서버] EC2에 Git 설치 → GitHub에서 프로젝트 clone.
  • ✅ Node.js 설치 문제
  • ✅ GitHub Actions로 자동 배포 구성
    • .github/workflows/deploy.yml 작성.
    • EC2에 SSH 접속해 git pull 및 서버 재시작(pm2 사용) 설정.

3. 배포 중 만난 문제 & 해결

(1) GitHub Actions에서 pm2 명령어 인식 실패

  • 문제:
    GitHub Actions가 SSH 접속 후 pm2 명령어를 인식 못함.
  • (bash) bash: pm2: command not found
  • 원인:
    SSH 세션에서는 .bashrc 등이 자동으로 적용되지 않아서 pm2 설치 경로가 PATH에 등록되지 않음.
  • 해결:
    .bashrc 읽어오는 대신 deploy.yml에 직접 PATH 추가.
  • (bash) export PATH=$PATH:/home/ubuntu/.nvm/versions/node/v22.15.0/bin

(2) Node.js 서버 포트 충돌 문제

  • 문제:
    Node.js 서버를 443번 포트에 띄우려다가 에러:
  • (perl) Error: listen EADDRINUSE: address already in use :::443
  • 원인:
    Nginx가 이미 443 포트를 점유 중.
  • 해결:
    Node.js 서버를 기본 3000번 포트로 변경:
  • (javascript) const port = process.env.PORT || 3000;

(3) 구글 OAuth 인증 실패 문제

  • 문제:
    OAuth 로그인 시 client_id 오류:
  • (sql) Missing required parameter: client_id
  • 원인:
    서버에 .env 파일이 없어서 환경변수 세팅이 누락됨.
  • 해결:
    서버 내부에 .env 파일 직접 작성 후 적용.
  • (bash)
  • nano .env
  • (GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET 등 작성)

(4) 404 Not Found (Nginx) 에러

  • 문제:
    구글 로그인 리다이렉트 시 nginx 404 에러 발생.
  • 원인:
    Nginx가 리버스 프록시 설정이 되어있지 않아 요청을 Node.js에 전달 못 함.
  • 해결:
    nginx 설정 파일 수정.
  • (bash)
  • sudo nano /etc/nginx/sites-available/default
  • location / 안에 프록시 패스 추가:적용:
  • (nginx)
    proxy_pass http://127.0.0.1:3000;
  • proxy_set_header Host $host;
  • proxy_set_header X-Real-IP $remote_addr;
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • proxy_set_header X-Forwarded-Proto $scheme;
  • (bash) 
  • sudo nginx -t
  • sudo systemctl reload nginx

4. 현재 상태 (작성 시점)

항목상태
EC2 서버 구축 ✅ 완료
도메인 연결 ✅ 완료
Node.js 서버 구축 및 실행 ✅ 완료
nginx HTTPS 프록시 설정 ✅ 완료
GitHub Actions 통한 자동 배포 ✅ 완료
YouTube API 호출 시 403 오류 ⚠️ 인증 문제로 해결 필요
 

✍️ 한 줄 요약

"EC2에 직접 Node.js 서버를 띄우고, nginx 리버스 프록시 + HTTPS 적용 + GitHub Actions 자동배포까지 성공했지만, 최종 API 인증 문제만 남았다."


🛠️ 다음 목표 (계획)

  • Google OAuth 권한 범위 재설정 및 YouTube API 인증 문제 해결.
  • pm2 프로세스 관리 최적화 (restart, logs 관리).
  • HTTPS 인증서 자동 갱신 스크립트 추가 (Certbot renew).