해결된 질문
작성
·
95
·
수정됨
0
안녕하세요! 강의 잘 보고 있습니다. 강의를 보는 중에 헷갈리는 개념이 있어서 질문드려요!
올려주신 강의 중 미들웨어 챕터 부분을 보고 있어요. 그런데 문득 미들웨어와 uvicorn, gunicorn, hypercorn 과 같은 WSGI, ASGI 서버 간의 관계에 대해서 궁금증이 들었습니다.
보통 언어에 상관없이 웹 통신을 한다라고 하면 아래와 같은 구조로 통신한다고 볼 수 있잖아요?(DB가 있다고 가정)
"""
Client(Web Browser) ---> Web Server ---> Web Application Server ---> DB
"""
그리고 파이썬에서는 uvicorn, gunicorn 과 같은 WSGI, ASGI 서버들이 Web Server 역할을, Flask, FastAPI 와 같은 프레임워크 서버들이 Web Application Server의 역할을 한다고 알고 있습니다. 그리고 저 Web Server 요소가 미들웨어라고 정의한다고 알고 있었는데요!
그런데 FastAPI 공식문서 상에서는 미들웨어라는 것을 소개할 때, "모든 요청 또는 응답에 대해서 사전 또는 사후 처리 로직을 추가할 때 사용하는 것" 이라고 소개를 하면서 문득 "그러면 여기서 이야기하는 미들웨어랑 uvicorn, gunicorn 과는 어떤 차이점이 있는거지?" 하면서 헷갈리더라구요.
자바에서는 미들웨어라는 개념이 JVM 위에서 동작하면서 DB 연결, TCP/IP 연결 등과 같이 다른 소프트웨어(ex.애플리케이션)가 잘 동작하도록 지원해주는 소프트웨어라고 알고 있는데요! 만약 이러한 관점에서 본다면 uvicorn, gunicorn 과 같은 WSGI 또는 ASGI 서버들도 미들웨어라고 볼 수는 없는 걸까요?
ChatGPT 한테 물어보았을 때는 엄연히 다른 개념이라고 하는데.. 정확히 차이점을 잘 모르겠어서요. 답변 해주시면 감사하겠습니다! (참고로 저는 파이썬으로만 오랫동안 개발해와서 자바나 다른 언어 관련해서는 잘 모를 수도 있어서 다른 언어에 대한 비유로 답변 주시면 제가 잘 이해를 못할 수도 있습니다!)
답변 1
1
안녕하십니까,
잘 듣고 계시다니, 저도 기분이 좋군요.
네, 전통적으로(?) 시스템 아키텍처 상에서 미들웨어는 말씀하신 게 맞습니다. 그러니까, web이나 client에서 DB로 바로 연결하지 않고 중간에 연결관리 및 비즈니스로직 분산등을 수행하는 시스템을 미들웨어라고 합니다 . 일반적으로 Java 계열에서는 Tomcat, Weblogic 같은 시스템들은 미들웨어에 속합니다.
근데, express라고 node js 기반의 웹 프레임워크에서 미들웨어를 다르게 지칭합니다. 웹 프레임워크의 request 객체에 client의 요청을 전달하기 전에 사전 처리를 가능하게 하는 모듈을 미들웨어로 지칭합니다. 완전 다른 의미로 부르기 시작하면서 미들웨어가 동음이의어가 됩니다.
javascript 기반의 웹 프레임워크에서는 미들웨어를 이런 개념으로 통용해서 사용합니다. 그리고 fastapi의 미들웨어도 express의 미들웨어를 본따서 만든 것입니다. 그래서 알고 계시는 시스템 아키텍처 개념의 미들웨어랑은 완전히 다른 개념입니다.
uvicorn, guvicorn은 알고 계시는대로 파이썬 기반 HTTP 서버 역할을 합니다. Starlette/FastAPI가 시스템 아키텍처 적으로는 미들웨어 역할을 합니다.
감사합니다.
아하.. 그렇군요! 그래서 강의에서 express 프레임워크를 언급하신 거군요! 이해가 너무 잘되었습니다! 빠른 답변 감사합니다 (__)