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 종료 프록시로써 작동할 수 있다.
로드밸런서에 적용되는 보안 그룹에서 80번 포트와 443번 포트를 열어 준다.
마지막으로 Route 53 에서 도메인에 로드밸런서를 연결한다.
결국 모든 것들을 잘 설정해도 애플리케이션이 https 요청을 받을 수 있어야 한다면, streamlit 은 이를 위해 자체적인 솔루션을 지원하지 않기 때문에(x) nginx라는 것을 사용해야 하는 것 같은데, 이 무거워 보이는걸 꼭 써야 하는 이유는 무엇인가.
로드밸런서와 리버스 프록시의 관계가 무엇인가? 리버스 프록시가 로드밸런싱을 함께 수행할 수 있겠다는 생각이 든다. 그렇다면 로드밸런싱은 하지만 리버스 프록시가 아닐 수도 있는 것인가?
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.
None
from : 과거의 어떤 생각이 이 생각을 만들었는가?
- ‣
- 이 글에서는 앞선 글에서 로드밸런서가 하고 있는 일이 기술적으로 무엇인지 서술한다.
- ‣
- 본문에 잠시 등장한 보안 그룹에 대한 설명은 앞선 글을 참고한다.
- [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 : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는가?