SSL 종료(SSL Termination)는 외국어(HTTPS)가 한국어(HTTP)로 번역되는 순간을 의미한다(참고5). 이것을 내가 직접(애플리케이션 내에서 처리) 할 수도 있지만, 번역가를 고용하고(프록시 서버에서 처리) 한국어만 들을수도 있다. 일례로 파이썬의 고수준 웹 프레임워크 Streamlit은 Streamlit 애플리케이션 내에서 이러한 번역 작업을 처리할 수 있는 기능을 제공한다. 간단한 상황에서는 이 방법이 간편할지 모르지만, 권장되는 방법은 아니다(참고2:Streamlit 문서).

권장되지 않는 이유에는 여러 가지가 있겠지만, 직관적으로 생각할 때 번역가가 있다면 나는(애플리케이션) 한국어로 생각하는 것에만 집중하면 되기 때문에 훨씬 편하지 않겠는가(참고4:이 작업의 기술적 효용). 외국인과 대화를 나누는 한국인이 여러 명인 경우(애플리케이션 사이에 HTTP 통신을 주고받는 경우)에도 이러한 장점이 더욱 두두러질 수 있다. 외국인 한 명 때문에 모두가 외국어로 대화를 해야 하는 상황이 얼마나 불편한가. 한 명의 번역가를 앞에 세워 두고 외국인이 하는 말을 번역가를 통해 한국어로 전달받은 뒤, 한국인들이 하고 싶은 말을 한국어로 의사소통하고 정리하여 한국어로 전달하는 것이 **훨씬 편하다. 이렇게 번역가에게 번역의 짐을 떠안도록 만들어서 생각을 편하게 만드는 일을 SSL 오프로딩(SSL Offloading)이라고 한다(참고4,참고5).

HTTP-HTTPS 번역 작업을 떠넘길 SSL 종료 프록시가 필요하다면 nginx를 이용해 직접 구축해도 좋고(참고1), AWS 로드밸런서의 기능(참고3:로드밸런서는 비싸다)을 이용해도 좋다.

아키텍처는 위와 같이 구성된다.

아키텍처는 위와 같이 구성된다.

AWS 로드밸런서에 http 요청(80번포트)이 들어오면 URL의 전반적인 뼈대는 유지한 채 https 요청(443번포트)으로 변경한다. 이 설정을 통해 로드밸런서가 SSL 종료 프록시로써 작동할 수 있다.

AWS 로드밸런서에 http 요청(80번포트)이 들어오면 URL의 전반적인 뼈대는 유지한 채 https 요청(443번포트)으로 변경한다. 이 설정을 통해 로드밸런서가 SSL 종료 프록시로써 작동할 수 있다.

로드밸런서에 적용되는 보안 그룹에서 80번 포트와 443번 포트를 열어 준다.

로드밸런서에 적용되는 보안 그룹에서 80번 포트와 443번 포트를 열어 준다.

마지막으로 Route 53 에서 도메인에 로드밸런서를 연결한다.

마지막으로 Route 53 에서 도메인에 로드밸런서를 연결한다.


결국 모든 것들을 잘 설정해도 애플리케이션이 https 요청을 받을 수 있어야 한다면, streamlit 은 이를 위해 자체적인 솔루션을 지원하지 않기 때문에(x) nginx라는 것을 사용해야 하는 것 같은데, 이 무거워 보이는걸 꼭 써야 하는 이유는 무엇인가.

로드밸런서와 리버스 프록시의 관계가 무엇인가? 리버스 프록시가 로드밸런싱을 함께 수행할 수 있겠다는 생각이 든다. 그렇다면 로드밸런싱은 하지만 리버스 프록시가 아닐 수도 있는 것인가?


parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.

  1. None

from : 과거의 어떤 생각이 이 생각을 만들었는가?

  1. [mlops.1_3.1__1__2. title: 전처리-예측 패턴([[[SW Best practice](https://janghoo.notion.site/Best-practice-abce5d7978db47529300bea6c37419f2) Design pattern](https://janghoo.notion.site/Design-pattern-0dc0e08622d3478bb6b85720c7392626) Preprocess-prediction pattern](https://janghoo.notion.site/Preprocess-prediction-pattern-3f61258f7fa54499a5c3437be314b953))은 독립성을 유지하기 위해 모델-뷰-컨트롤러 패턴([[[SW Best practice](https://janghoo.notion.site/Best-practice-abce5d7978db47529300bea6c37419f2) Design pattern](https://janghoo.notion.site/Design-pattern-0dc0e08622d3478bb6b85720c7392626) Model-View-Controller (MVC)](https://janghoo.notion.site/Model-View-Controller-MVC-7727467447b24e34b40e63e15d0b14c3))의 컨트롤러같은 존재가 필요하다. 프록시가 컨트롤러의 역할을 수행한다.](https://janghoo.notion.site/mlops-1_3-1__1__2-title-0c8901bbcb784fe7801b31a5739b71ca)

supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는가?