본문 바로가기
와이즈픽

[📚서비스 개발기] "장고의 wsgi와 asgi 기술의 차이"

by mangji12 2025. 11. 30.

현재 한국소비자원의 제품 시험 리포트를 분석해 제공하는 데이터 정보 플랫폼을 개발하고 있습니다.

저는 Python 활용이 주력이기 때문에 백엔드 프레임워크로 Django를 선택하여 개발하고 있습니다.

프로젝트 진행 중, Django가 두 가지 실행 방식을 모두 지원한다는 것을 알게 되었습니다. 그에 대한 글을 작성해 봅니다.

 

  1. WSGI: 우리가 알던 전통적인 방식
  2. ASGI: Node.js처럼 비동기로 동작하는 최신 방식

 

"장고는 특이하게 WSGI와 ASGI를 나누었네?"

이 글은 이 질문에 대한 답을 찾기 위해, CS(Computer Science) 관점에서 두 아키텍처를 비교하고 공부해 보겠습니다.


1. Node.js가 빠르다는 이유 (ASGI를 이해하기 위한 비유)

Django의 ASGI가 무엇인지 이해하려면, 먼저 Node.js의 동작 방식을 잠깐 짚고 넘어가야 합니다. (물론 저는 Python 개발자라 Node.js로 갈아탈 생각은 없습니다)

 

Node.js는 싱글 스레드(Single Thread), 즉 '직원 한 명'이 일을 하는데도 처리 속도가 굉장히 빠릅니다. 비결은 '기다리지 않음(Non-blocking)'에 있습니다.

 

  • Node.js (Async): DB 조회 같은 오래 걸리는 일을 시키면, 결과가 나올 때까지 멍하니 기다리지 않고 즉시 다른 요청을 처리합니다.
  • 이걸 Django로 가져온 게 ASGI: 파이썬도 Node.js처럼 "기다리지 말고 일하자"는 컨셉을 도입한 것이 바로 ASGI입니다.

 

그럼 무조건 기다리지 않는 ASGI가 좋은 걸까요? AI/데이터 중심 프로젝트에서는 이야기가 다릅니다.

 


2. WSGI vs ASGI (CS 관점의 차이)

🆚 WSGI: "직원을 계속 늘리는 방식" (Multi-Thread)

WSGI는 전통적인 동기(Synchronous) + 블로킹(Blocking) 모델입니다.

 

  • 작동 원리: 요청 하나당 스레드 하나를 배정합니다. 이 스레드는 DB에서 데이터가 올 때까지 가만히 기다립니다(Blocking).
  • 비용: 트래픽이 몰리면 스레드를 수백 개로 늘려야 하는데, CPU가 이 스레드들을 관리하고 교체하는 문맥 교환(Context Switching) 비용이 꽤 듭니다.

 

🆚 ASGI: "이벤트 루프 방식" (Asynchronous)

ASGI는 비동기 + 논블로킹 모델입니다.

 

  • 작동 원리: 적은 수의 스레드가 이벤트 루프를 돌며, 대기 시간 없이 쉴 새 없이 움직입니다.
  • 장점: I/O(입출력) 대기가 극단적으로 많은 경우, 리소스 효율이 매우 좋습니다.

 


3. 의사결정: 따라서 프로젝트에 적용되어야 하는 기술은?

설명만 보면 ASGI가 효율적으로 보이지만, 저는 WSGI (wsgi.py)를 선택했습니다. Python 개발 환경 때문입니다.

 

이유 1: 데이터 생태계는 아직 "동기(Sync)"다

이게 가장 결정적인 이유입니다.

 

파이썬 프로젝트에서 사용하는 핵심 라이브러리들(Pandas, NumPy, Scikit-learn)과 대부분의 데이터 전처리 로직은 CPU를 많이 쓰는 동기(Synchronous) 방식으로 설계되어 있습니다.

 

Node.js 스타일의 비동기(ASGI) 환경은 I/O(대기 시간)가 많을 때 유리한 것이지, CPU 연산(데이터 분석)이 많을 때는 오히려 불리할 수 있습니다.

 

심지어 비동기 루프 안에서 무거운 연산(Pandas 데이터 프레임 처리 등)을 돌리면, 이벤트 루프 전체가 멈춰버리는(Blocking the Loop) 치명적인 문제가 발생할 수 있습니다.

 

이유 2: 프로젝트의 본질 (Reliability)

제 서비스는 "실시간 채팅"이나 "주식 틱 데이터 스트리밍"이 아닙니다.

 

사용자가 요청하면 안정적으로 데이터를 가공해서 리포트를 보여주는 정적 조회 서비스입니다.

 

굳이 복잡하게 async/await를 신경 쓰며 코드를 짜는 것보다, 검증된 WSGI(Gunicorn) + Multi-Thread 모델이 데이터 분석 로직을 처리하기엔 훨씬 직관적이고 안전합니다.

 


4. 결론: 도구는 목적에 맞게

기술 선택의 기준은 "내 프로젝트의 성격""내가 사용하는 언어의 생태계"여야 한다고 생각합니다.

 

  • Python/AI/데이터 분석 프로젝트: CPU 연산이 많고 라이브러리가 동기 위주임 → WSGI (Good Choice) 👍
  • 실시간 채팅/알림 서비스: I/O 대기가 많음 → ASGI (이때 고려해 볼 만함)

반응형