Conversation
hardwoong
left a comment
There was a problem hiding this comment.
GitHub Actions와 AWS EC2를 이용한 CI/CD 배포, 그리고 EC2 환경에서의 Google 로그인 문제 해결까지 모두 잘 해결하셨습니다.
1. CI/CD 배포 파이프라인 구축
GitHub Actions와 AWS EC2를 연동하여 자동 배포 시스템을 구축하셨습니다. 스크린샷을 보니 deploy-main 워크플로우가 성공적으로 완료되었네요! 코드를 푸시하면 자동으로 배포되는 환경을 만드신 것은 정말 큰 성과입니다.
deploy-main워크플로우가 정상적으로 동작- Pull Request 머지 시 자동 배포 트리거
- 최근 워크플로우들이 성공적으로 완료됨
- 배포 단계들이 모두 성공적으로 실행됨:
- Set up job (1s)
- Checkout (0s)
- Configure SSH (0s)
- Copy Workspace (49s)
- Install dependencies (16s)
- Copy systemd service file (3s)
- Enable systemd service (6s)
- Restart systemd service (2s)
- Post Checkout (0s)
- Complete job (0s)
배포 파이프라인 구성:
- GitHub Actions를 통한 자동 배포
- EC2 인스턴스에 자동 배포되는 파이프라인 구성
- systemd 서비스를 통한 애플리케이션 관리
- 배포 환경에서 애플리케이션이 정상적으로 동작
- 총 배포 시간: 약 1분 18초
2. Google 로그인 배포 환경 문제 해결
EC2 배포 환경에서 Google 로그인이 동작하지 않았던 문제를 잘 해결하셨습니다. 스크린샷을 보니 54.180.88.153.nip.io:3000 도메인을 통해 Google OAuth 콜백이 정상적으로 동작하고 있고, "Google 로그인 및 토큰 발급 성공!" 메시지와 함께 토큰이 정상적으로 발급되고 있네요!
해결 방법:
- Google OAuth 리다이렉트 URI를 도메인 형태(
http://54.180.88.153.nip.io:3000/oauth2/callback/google)로 변경 auth.config.js에서callbackURL을 도메인으로 설정- Google Cloud Console에서 해당 도메인을 리다이렉트 URI로 등록
특히 인상적인 점:
nip.io서비스를 활용하여 IP 주소를 도메인 형태로 변환한 점이 좋습니다!nip.io는 IP 주소를 도메인으로 변환해주는 무료 서비스로, 개발/테스트 환경에서 매우 유용합니다- 예:
54.180.88.153.nip.io는54.180.88.153IP 주소를 가리킵니다
배포 환경에서의 Google OAuth 설정
핵심 포인트:
- Google OAuth는 IP 주소와 포트 번호 형태(
54.180.88.153:3000)의 리다이렉트 URI를 지원하지 않습니다 - 따라서 도메인을 사용하는 것이 필수입니다
nip.io를 사용하면 IP 주소를 도메인 형태로 변환할 수 있어 편리합니다callbackURL을 도메인 형태로 설정하고, Google Cloud Console에서도 동일한 도메인을 등록해야 합니다
현재 설정:
callbackURL: 'http://54.180.88.153.nip.io:3000/oauth2/callback/google';또는 상대 경로를 사용하는 경우:
callbackURL: '/oauth2/callback/google'; // 상대 경로 사용이 설정이 올바르게 적용되어 Google 로그인이 정상적으로 동작하고 있습니다!
도메인 설정 과정:
-
nip.io 서비스 활용
nip.io는 IP 주소를 도메인으로 변환해주는 무료 서비스입니다- 예:
54.180.88.153.nip.io는54.180.88.153IP 주소를 가리킵니다 - DNS 설정이 필요 없어 빠르게 테스트할 수 있습니다
-
Google Cloud Console 설정
- Google Cloud Console에서 OAuth 리다이렉트 URI를 도메인 형태로 등록
- 예:
http://54.180.88.153.nip.io:3000/oauth2/callback/google - IP 주소 형태는 Google OAuth에서 지원하지 않으므로 도메인을 사용해야 합니다
-
애플리케이션 코드 수정
auth.config.js에서callbackURL을 도메인 형태로 변경- 환경 변수를 사용하여 개발/프로덕션 환경을 구분하는 것도 좋은 방법입니다
nip.io 사용의 장단점:
장점:
- DNS 설정이 필요 없어 빠르게 테스트할 수 있습니다
- 무료로 사용할 수 있습니다
- IP 주소가 변경되어도 도메인만 변경하면 됩니다
단점:
- 프로덕션 환경에서는 실제 도메인을 사용하는 것이 권장됩니다
nip.io는 테스트/개발 환경에 적합합니다
마무리
이번 미션을 통해 실제 프로덕션 환경 배포의 전 과정을 경험하셨습니다. CI/CD 파이프라인 구축부터 도메인 설정, OAuth 인증까지 모두 다루셨습니다!
특히 Google OAuth 리다이렉트 URI를 도메인 형태로 변경하는 부분에서 문제를 정확히 파악하고 해결하신 점이 인상적입니다. nip.io 서비스를 활용하여 빠르게 문제를 해결하신 점도 훌륭합니다!
여러 번의 시도 끝에 성공한 GitHub Actions 워크플로우도 고생 많으셨습니다!
참고사항
HTTPS 설정 권장:
- 현재 HTTP로 동작하고 있다면, 프로덕션 환경에서는 HTTPS를 사용하는 것이 보안상 안전합니다
- AWS Certificate Manager(ACM)를 사용하여 SSL/TLS 인증서를 발급받고, Application Load Balancer나 CloudFront와 연동하여 HTTPS를 적용할 수 있습니다
- 또는 Let's Encrypt를 사용하여 무료 SSL 인증서를 발급받을 수도 있습니다 (저는 이 방법을 더 선호합니다! 더 편해서..)
보안 그룹 확인:
- AWS EC2 보안 그룹 설정에서 HTTPS(443 포트)가 열려있는지 확인하세요
- 필요하다면 HTTP(80 포트)도 열어두되, 가능하면 HTTPS로 리다이렉트하는 것을 권장합니다
환경 변수 관리:
- 개발 환경과 프로덕션 환경의
callbackURL을 환경 변수로 관리하는 것을 권장합니다 - 예:
CALLBACK_URL=http://54.180.88.153.nip.io:3000/oauth2/callback/google - 이렇게 하면 코드 수정 없이 환경에 따라 다른 URL을 사용할 수 있습니다
// src/auth.config.js
export const googleStrategy = new GoogleStrategy(
{
clientID: process.env.PASSPORT_GOOGLE_CLIENT_ID,
clientSecret: process.env.PASSPORT_GOOGLE_CLIENT_SECRET,
callbackURL:
process.env.CALLBACK_URL ||
'http://localhost:3000/oauth2/callback/google', // 환경 변수 사용
scope: ['email', 'profile'],
}
// ...
);PM2 또는 프로세스 매니저 사용:
- 프로덕션 환경에서는 PM2나 다른 프로세스 매니저를 사용하여 애플리케이션을 관리하는 것을 권장합니다
- 현재 systemd 서비스를 사용하고 계신 것 같은데, 이는 좋은 선택입니다!
- systemd를 사용하면 서버 재시작 시에도 애플리케이션이 자동으로 실행되고, 로그 관리도 편리합니다
프로덕션 환경에서의 도메인 사용:
nip.io는 테스트/개발 환경에 적합합니다- 프로덕션 환경에서는 실제 도메인을 사용하는 것이 권장됩니다
- 예:
umc-9th.kro.kr,anwls.o-r.kr등 - 실제 도메인을 사용하면 더 안정적이고 신뢰할 수 있습니다
모니터링 및 로그 관리:
- 배포 환경에서는 애플리케이션 로그를 모니터링하는 것이 중요합니다
- systemd의
journalctl을 사용하여 로그를 확인할 수 있습니다 - 예:
journalctl -u your-service-name -f(실시간 로그 확인)
🗣️ 이슈 번호
closed #85
📝 미션 번호
10주차 Misson 1,2
📋 구현 사항
📎 스크린샷
✅ 체크리스트
🤔 질문 사항