카테고리 없음
[웹사이트 개발] 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 설치 문제
- 초기 서버에 설치된 Node.js 버전이 낮아 오류 발생:
-
(javascript) Error: Cannot find module 'node:events'
- 해결: nvm 설치 후 Node.js 최신 LTS 버전 재설치.
-
(bash)curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bashnvm install --lts
- nvm use --lts
- ✅ 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).