본문 바로가기

백앤드 개발

웹 서비스 구성 형태(파이썬 기준)

반응형

출처 : https://datascienceschool.net/view-notebook/f9b09998601441f4a7026e62353cf751/


처음에 백엔드 개발시 다소 햇갈리는 부분이다. 

웹 앱 프래임워크 , 웹 서버, WSGI 등등등  비슷한 게 머리를 휘젓는다. 그게 그거 같고


시스템 몇개의 구조를 예를 들어보자


1.기본(그냥 장고로 만들고 runserver해버렸을 때)

클라이언트 <---> 웹 어플리케이션 서버(django로 만들어진 web application)


기본 장고로 앱을 만들어서 돌리면 기본 WSGI가 앱을 사용가능하게(callable) 만들어준다.

단일 쓰레드로 대용량 처리가 불가능하고 웹어플리케이션이 전방에 나와있어 보안에 취약하다.


웹서버와 WSGI 웹 어플리케이션 서버 선택이 필요하다. nginx, uwsgi/gunicorn을 많이 쓰는 것 같다.


2. 신경 쓴 형태

클라이언트 <---> nginx 웹 서버가 돌아감 <----> gunicorn로 실행된  웹 어플리케이션 서버(내부 앱은 django로 만들어짐)


1. 클라이언트는 아파치나 nginx로 만들어진 웹서버에 요청을 한다.

2. 그 웹서버는 적당히 잘 분배하여 웹어플리케이션 서버에 다시 요청을 한다.

3. 토네이도 또는 gunicorn으로 돌아가고 있는 웹 어플리케이션은 장고, 플라스크로 만들어짐.


일단 아래 그림을 보자





1. 웹 서버(리버스 프록시 서버) ex. 아파치, nginx, 

클라이언트 --- 요청 ---> 리버스 프록시 ----- 요청-----> 내부 서버

클라이언트 <--- 응답 --- 리버스 프록시 <----- 응답----- 내부 서버

다이렉트로 안하고 이런식으로 하는 이유는 보안 때문이다. 일종의 버퍼라고 생각하면 된다.

웹 어플리케이션 서버가 최전방에 있으면 털릴 위험이 증가 하기 때문이다. 

또한 로드 밸런싱, 정적 파일 제공 등에 사용한다.


https://www.lesstif.com/pages/viewpage.action?pageId=21430345


2. WSGI 웹 어플리케이션 서버 ex. 토네이도, uwsgi, gunicorn, 톰캣

실제 클라이언트 호출에 대응하여 결과물을 내놓는 곳이다. 

웹 어플리케이션은 돌리는 아이로 생각하면 된다. 

WSGI는 웹 서버와 웹 어플리케이션을 연결하는 다리이다.

이게 왜 필요한가??

1. wsgi server는 많은 request들을 다룰 수 있도록 설계되었다. framework들은 스스로 수천개의 request들을 실행하고 최고의 방법으로 처리할 수 있도록 설계되어있지 않다.

2. 개발 효율을 증가시킨다.

3. 유연한 형태를 손대지 않고 만들어진다.




3. WSGI 웹 어플리케이션

웹 어플리케이션 서버 내에서 돌아가는 애로써

이는 Django, flask, pyramids 등과 같은 웹어플리케이션 프레임워크로 만들어진 부분을 의미한다. 

요청에 따라 함수를 실행하고 응답을 내어주는 역할이다.


4. ORM

데이터베이스 구조를 python 클래스 정의로 표현할 수 있게 해줘서

쉽게 데이터베이스에 접근하게 해준다.


5. Template engine

json, txt, html을 파일 독적으로 생성하여 제공해줌.





반응형