[AWS] Private EC2에서 Oauth2.0 네이버 로그인 구현 ?!

2025. 5. 8. 01:49·백엔드 개발
반응형

들어가며

Private EC2는 Private VPC Subnet 환경으로, 외부 인터넷 연결이 되지 않는다.

이는, AWS Cloud에서, 가상 공간인 "VPC" 에서 Private Subnet을 구성하고, 내부에 공인 IP가 할당되지 않는 EC2 서버를 구축하는 방식이다.

 

외부 인터넷과 연결이 되지않고, AWS Cloud VPC 내부에만 생성되어 있는 Private EC2는 네이버 로그인 API와 같은 외부 API와 송신을 할 수 있을까? ? ?? ? 
우리는 당연히, 이러한 의문점이 생긴다. 이번 포스팅은 이러한 의문점을 통쾌하게~ 해소되도록
AWS Private EC2 아키텍처를 실제로 운영/관리하면서 네이버 로그인 API를 구현했던 과정들을 A부터 Z까지 설명한다.


문제상황: 네이버 로그인 API 호출이 안돼요...

필자는 스프링 부트 환경이니, 구현 간 참고하길 바란다.

 

우선 인증/인가 로직을 SecurityConfig 클래스로 FilterChain 기반 Cors 설정/Oauth 로그인 설정/JWT 인증필터를 통합

모듈화 방식으로 관리하고 있다.

 

Oauth2.0 로그인 시, 접근 URL을 "/로그인_URL/"로 설정해두었다.

 

당연히~ Time Out 에러가 발생한다.

 

배포된 리소스는 "Private" 환경으로 외부 인터넷 연결이 안된다.

그러므로, Private EC2와 외부 인터넷을 연결해주는 무언가...가 필요하다.

Nginx

프록시 서버:중개서버를 통해 이와 같은 문제를 해결할 수 있다.
Nginx 서버는 프록시 서버로써 역할하여 Bastion Host EC2에 Nginx Agent를 설치했고,

Bastion Host의 인바운드 규칙에서 HTTP:80포트에 대해 0.0.0.0/0:모든 IP에 대해 허용해주었다.

 

Nginx 서버 설정 : nginx.conf

아래와 같이, Nginx의 설정파일을 편집해준다.

프록시 기능을 포트,URL 정보 및 프록시 연결대상 서버 주소를 설정해주면 된다.
(덧붙여서, 여기에 지정된 경로에 대해서만 프록시 기능을 수행하므로, 인가된 URL에 대해서만 관리가 가능하다.)

 

Private EC2 인바운드 규칙 편집

이제, Nginx가 설정한 경로로 요청건에 대해서는 프록시 대상서버:Private EC2로 전송해준다.

그럼 Private EC2는 Nginx가 보내주는 요청에 대해서 잘 받아내기? 위해서 인바운드 규칙을 허용해줘야한다.
80포트를 타고 넘어오기 때문에, Private EC2 인바운드 규칙은 8080포트에 대해서, "Bastion Host의 메인 보안그룹"을 소스로 지정하여 Private EC2 인바운드 규칙을 새로 추가한다.

(22 포트는 관리자 / 8080포트 웹 포트)


문제해결: 네이버 로그인 API 호출성공

그러면, Oauth2.0 로그인 설정에서 지정한 URL로 접근해본다.

Private EC2에서 Oauth2.0 기반 네이버 로그인 호출 구현에 성공했다.

프라이빗 환경에 존재하는 리소스인, Private EC2에서 외부 API를 구현하기 위해서,

프록시 서버 Nginx를 사용했고, 이는 여러 방법론 중 하나이니 참고하길 바란다.

(실 운영서버에서는 고가용성, 보안/확장성 측면 ALB:Application Load Balancer를 사용해 Private EC2 리소스를 활용한다.)


다음 포스팅 예고

URL을 거쳐 네이버 로그인 호출까지 성공했다.

하지만, 서비스에 필요한 로그인 서비스는 소셜 로그인 후, 최종 서비스 유저로 회원가입 후 로그인이다.
따라서, 네이버로부터 인증받은 유저 정보로직을 기반으로 네이버에게 유저 정보를 요청한다. -> |이름, 성별, 전화번호, 이메일 등등|
(이는 네이버 로그인 env 파일에 기입되어있고, 초기 프로젝트 설정 때 구성했을 확률이 높다.)

 

Private EC2는 Nginx 프록시 서버를 거쳐 네이버 및 외부 인터넷과 80포트로 통신할 수 있게 되었다.

하지만, EC2에서 가동 중인 스프링 부트 내장서버는 외부 인터넷과 송신하는 방법을 모르기에, 네이버 로그인 URL을 보낼 수는 있지만,
네이버로부터 응답을 받는 방법은 모른다.

네이버 토큰 응답이 안돼요.....

네이버에게 유저 토큰을 감싸서, 요청은 보낼 수 있지만, 네이버 응답을 못받아서

무한 로딩을 거쳐, Time Out되는 에러가 이어서 발생했다.
다음 포스팅은 이에 대한 문제상황에 대해서 상세히 설명하고 이를 해결했던 방법들을 상세히 기록할 생각이다.

(아마.. 이번주 중으로 포스팅 할 생각이다..!)

반응형

'백엔드 개발' 카테고리의 다른 글

[AWS] 클라우드 아키텍처, 왜 복잡한 걸까?  (0) 2025.05.12
[Spring Boot] HTTP 외부 Restful API를 RestTemplate로 처리하기  (0) 2025.05.10
[AWS] 스케줄러로 EC2 인스턴스 비용 절약하기  (0) 2025.04.29
[CI/CD] self-hosted runner 기반 EC2 자동화 배포 구축하기  (0) 2025.04.10
[DevOps 실무] 프로젝트 관리 효율을 2배 높이는 폴더 정리법  (1) 2025.04.06
'백엔드 개발' 카테고리의 다른 글
  • [AWS] 클라우드 아키텍처, 왜 복잡한 걸까?
  • [Spring Boot] HTTP 외부 Restful API를 RestTemplate로 처리하기
  • [AWS] 스케줄러로 EC2 인스턴스 비용 절약하기
  • [CI/CD] self-hosted runner 기반 EC2 자동화 배포 구축하기
욱22
욱22
우기의 모든 걸 기록합니다.
    반응형
  • 욱22
    우기 때 만나요
    욱22
  • 전체
    오늘
    어제
    • 우기 때 만나요 (263)
      • 💭 경험&생각 (48)
      • 🌤 일상&취미 (12)
      • 📖 북로그 (29)
      • 백엔드 개발 (27)
      • 📚 스터디 (33)
        • 비즈니스 (0)
        • 프론트엔드 (9)
        • 디자인 (4)
        • 데이터베이스 (8)
        • 데이터 분석 (0)
        • 인공지능 (2)
        • 알고리즘 (10)
      • CS 대학강의 (78)
      • 🌤 프로젝트 (0)
        • UMC 2기: 동네 (15)
        • UMC 3기: 당신의 발자취 (6)
        • ERICA: 스타트업톤 (9)
        • ERICA: 또래튜터링 (2)
      • 🌤 대외활동 (5)
  • 링크

    • Github
  • 인기 글

  • 최근 글

  • 태그

    java
    자료구조
    디자인
    객체지향 프로그래밍
    AWS
    자기계발
    대학생 개발 프로젝트
    오블완
    스폭크루
    생각정리
    대학생 대외활동
    드럼
    드럼 레슨
    백준
    Kotlin
    디자인베이스
    파이썬
    안드로이드
    창업
    티스토리챌린지
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
욱22
[AWS] Private EC2에서 Oauth2.0 네이버 로그인 구현 ?!
상단으로

티스토리툴바