본문 바로가기

Development/Django

[Django] WSGI (Web Server Gateway Interface )

728x90

WSGI (Web Server Gateway Interface) 는 Callable Object를 통해 Web Server가 요청에 대한 정보를 Application에 전달한다.

더보기

Callable Object란?

A callable object, in computer programming, is any object that can be called like a function

컴퓨터 프로그래밍에서, callable object란 함수처럼 호출될 수 있는 객체를 말합니다.

Python에서는 간단히 다음처럼 표현할 수 있다.

"""

- class를 생성했으나, 내부에 __init__는 없고 __call__만 있음
- 객체로 표현했으나, 실제는 함수처럼 사용되는 경우, 이러한 경우를 callable object라고 하는 듯.

"""

class Foo(object):
    def __call__(self):
        print("Called.")

foo_instance = Foo()
print(type(foo_instance))

foo_instance()
<class '__main__.Foo'>
Called.

상황에 따라 다양한 함수를 만들 수 있도록, 객체에 일정 정보를 저장해서 알아서 새로운 함수를 생성해주는 형태로 사용가능합니다. 함수적 다양성을 확보하려는 시도입니다.

class Accumulator(object):
    def __init__(self, n):
        self.n = n
    def __call__(self, x):
        self.n += x
        return self.n

from_1 = Accumulator(1)
from_10 = Accumulator(10)

print(from_1(10))
print(from_10(200))
11
210

[참고] frhyme.github.io/others/callable_object/

 

callable object? callable 객체?

callable object? callable 객체?

frhyme.github.io

Callable Object는 Fuction이나 Object의 형태가 될 수 있으며, Web Server는 Callable Object를 통해 2가지 정보를 전해주어야 한다.

  • HTTP Request에 대한 정보 (Method, URL, Data, ...)
  • Callback 함수

Web Application 는 HTTP Request에 대한 정보를 가지고 Business Logic을 수행한 뒤에 Callback Function을 통해 결과를 웹서버에 반환한다.

이러한 WSGI Interface를 구현하는 Web Server나 Application을 WSGI compatible하다고 하며,

WSGI compatible한 Application을 WSGI Application이라고 부르기도 한다.

또한, 이 WSGI 인터페이스를 구현하기만 한다면 누구나 Python Web Server 나 Python Framework 를 만들어서 기존에 WSGI 를 지원하던 웹서버나 프레임워크와 함께 동작하게 할 수 있다.

728x90

'Development > Django' 카테고리의 다른 글

[Django] User Model 확장 (1) - 4가지 방법  (0) 2021.02.23
[Django] Web Socket  (0) 2021.02.09
[Django] URL 패턴 - 정규식과 path() 차이점  (0) 2021.02.08
[Django] Channels & Daphne  (0) 2021.02.02
[Django] Gunicorn - Threads  (0) 2021.02.02