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 에서 도메인에 로드밸런서를 연결한다.
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.
None
from : 과거의 어떤 생각이 이 생각을 만들었는가?
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는가?