백엔드 호출 흐름 간단 정리

solarrrrr·2023년 12월 3일
0

Today I Learned

목록 보기
73/74

기업 과제를 aws에 배포하면서 호출의 흐름을 정리해야 할 필요를 느껴 간략하게 정리해 보았다.


aws 프리티어를 사용 중이라 ec2와 rds에 각각 1개의 인스턴스만 사용 가능한 상황이다.

도커로 기존 사이드 프로젝트 내용을 배포 중인데
기업 과제한 결과물도 별도로 도커로 이미지화해서 동일 인스턴스 내에 배포했다.

다만 호스트 포트가 (ec2) 중복되면 안 되므로
기존 서비스 1001, 기업 과제 2002로 분리했다. (실제 포트 아님)

SSL 인증서 발급을 aws에서 진행하면서 로드밸런서를 사용했는데
기업 과제도 동일 인스턴스에 배포하면서
대상그룹 지정 및 규칙 설정 부분에서 조금 헷갈리기도 했다.

  • https://도메인/엔드포인트로 호출이 오면,

  • 로드밸런서의 리스너(ec2 2002에 연결되는 대상그룹을 미리 추가해 놓음)를 통해
    대상그룹으로 연결된다.

    <리스너 리스트>

    • http 1001 -> 대상그룹 ec2 인스턴스의 1001로 연결
    • http 2002 -> 대상그룹 ec2 인스턴스의 2002로 연결(리스너에 추가)
    • https 443 -> 대상그룹 ec2 인스턴스의 2002로 연결(1001 연결에서 변경)
  • 대상그룹에 설정된 ec2 2002 포트로 호출이 넘어온다.

  • 도커를 띄울 때 2002 포트를 80번 포트로 바인딩되도록 매핑했기 때문에
    위 호출은 이제 2002:80으로 run 했던 도커 컨테이너로 연결된다.
    (기존 서비스는 1001:80으로 매핑돼 있음)

  • 도커 컨테이너에 있는 nginx는 80번 포트로 들어오는 호출을 리스닝하게 된다.

  • 리스닝된 호출은 nginx 설정에 따라 (proxy pass)
    gunicorn 웹서버로 호출을 넘기는데,
    gunicorn은 2002번 포트로 run 모듈의 app 애플리케이션을 구동하고 있고
    애플리케이션은 라우터 설정을 통해 엔드포인트 호출에 대한 응답을 반환하게 된다.

참고로 gunicorn -b 0.0.0.0:2002의 포트는 애플리케이션의 포트와 동일해야 하는데
이유는 웹서버의 포트를 애플리케이션이 리스닝하고 있기 때문이다.

그리고 현재 로드밸런서를 1개만 사용 중이기 때문에 https 호출로 들어오는 경우
기존 사이드 프로젝트 서비스로 연결은 안 되는 상황이다.
대상그룹에서 443으로의 호출이 들어오면 ec2 인스턴스의 2002번 포트로 연결되도록
설정해 놓았기 때문이다.

보통 로드밸런서를 사용할 땐 서로 다른 인스턴스로 부하를 분산하는 목적으로 쓰기 때문에
내가 구성한 현재 상황은 부하 분산의 용도는 아니고
편법으로 스위칭하도록 돼 있는 상황이다.
(과제 평가가 끝나면 해당 대상그룹은 제거하고 원래대로 돌려놓을 계획이다.)


이상이 대략적인 호출 흐름이다.

profile
몰입

0개의 댓글