Skip to content

Create Week10 Mission#86

Open
miinsoo wants to merge 1 commit intomainfrom
miinsoo
Open

Create Week10 Mission#86
miinsoo wants to merge 1 commit intomainfrom
miinsoo

Conversation

@miinsoo
Copy link
Contributor

@miinsoo miinsoo commented Dec 15, 2025

🗣️ 이슈 번호

closed #85

📝 미션 번호

10주차 Misson 1,2

📋 구현 사항

  • CI/CD 파이프라인 구축
  • 배포환경에서 google 로그인

📎 스크린샷

EC2로 CI:CD 파이프라인 구축 성공 배포환경에서 google 로그인 성공

✅ 체크리스트

  • Assignees에 본인을 선택 했나요?
  • Merge 하려는 브랜치가 올바르게 설정되어 있나요?
  • 로컬에서 실행했을 때 에러가 발생하지 않나요?
  • 불필요한 주석이 제거되었나요?
  • 코드 스타일이 일관적인가요?

🤔 질문 사항

@miinsoo miinsoo self-assigned this Dec 15, 2025
Copy link
Member

@hardwoong hardwoong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.io54.180.88.153 IP 주소를 가리킵니다

배포 환경에서의 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 로그인이 정상적으로 동작하고 있습니다!

도메인 설정 과정:

  1. nip.io 서비스 활용

    • nip.io는 IP 주소를 도메인으로 변환해주는 무료 서비스입니다
    • 예: 54.180.88.153.nip.io54.180.88.153 IP 주소를 가리킵니다
    • DNS 설정이 필요 없어 빠르게 테스트할 수 있습니다
  2. Google Cloud Console 설정

    • Google Cloud Console에서 OAuth 리다이렉트 URI를 도메인 형태로 등록
    • 예: http://54.180.88.153.nip.io:3000/oauth2/callback/google
    • IP 주소 형태는 Google OAuth에서 지원하지 않으므로 도메인을 사용해야 합니다
  3. 애플리케이션 코드 수정

    • 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 (실시간 로그 확인)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] Week10 Mision

2 participants