[BE Study] #3. 배포

kiteB·2021년 8월 24일
0

BE-Study

목록 보기
3/3
post-thumbnail

📌 3주차 스터디 키워드 및 질문


[키워드]

  • Django WSGI
  • Web Server
  • Web Application Server
  • Django deploy
  • Django runserver deploy

[질문리스트]

  • 웹 서버란 무엇일까요?
  • 웹 어플리케이션 서버란 무엇일까요?
  • Django에서 제공하는 Runserver로 배포를 하면 안되는 이유는?

🌸목표
배포에 대한 깊이있는 이해


✔ 웹 서버란?


웹 서버(Web Server)란?

웹 서버는 소프트웨어하드웨어로 구분된다.


소프트웨어 측면에서 웹 서버는

인터넷을 기반으로 클라이언트로부터 HTTP 요청을 받아들이고, 정적 콘텐츠를 반환하는 프로그램

정적 콘텐츠누가 언제 서버에 요청하더라도 동일하게 내용을 보여주는 것을 말한다.
HTML 문서, CSS, JavsScript, 이미지 파일 등 서버에 미리 저장되어 있어, 즉시 응답이 가능한 콘텐츠를 말한다.


하드웨어 측면에서 웹 서버는

위에서 언급한 기능들을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터


✔ 웹 애플리케이션 서버란?


웹 애플리케이션 서버(Web Application Server)웹 서버 + 웹 컨테이너로,
클라이언트가 URL을 통해 서버에 페이지를 요청하면 그 요청을 받아 동적 콘텐츠를 제공하는 서버이다.

웹 컨테이너(Web Container)동적인 데이터들을 처리하여 정적인 페이지로 생성해주는 소프트웨어 모듈이다. 수행한 결과를 다시 웹 서버로 보내준다.
동적 콘텐츠누가, 언제, 어떻게 서버에 요청했는지에 따라 각각 다른 내용이 보여지는 콘텐츠를 말한다.
기기마다 조금씩 요소들의 위치가 바뀌는 것이나, 넷플릭스에서 기기마다 다른 영상을 추천해주는 것도 동적 콘텐츠이다.
✔ 위에서 언급한 웹 서버동적인 콘텐츠를 요청받으면, WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과클라이언트에게 다시 보여주는 것이다!


정적/동적 콘텐츠를 모두 제공할 수 있는 WAS

WAS는 동적 콘텐츠를 제공하는 것이 목적이지만, 정적 콘텐츠도 제공할 수 있다.
그러면 굳이 Web Server를 사용하지 않고, WAS만 사용해도 되지 않을까?

가능하기는 하지만, 이렇게 분리하는 이유가 있다.

✔ 서버 부하 방지

WAS는 DB 조회 및 다양한 로직을 처리하기 때문에, 모든 요청을 처리하게 된다면 WAS가 감당하는 부담이 너무 커지게 된다. 그래서 정적 콘텐츠는 웹 서버에서 처리하도록 하는 것이다.

✔ 보안 강화

뿐만 아니라, WAS에는 실제 Web Application이 올라가 있어서 요청이 WAS로 바로 들어오면 보안 문제가 발생할 수 있다. 이를 막기 위해 웹 서버를 WAS 앞단에 배치해서 WAS 내부의 주요 설정 파일이나 리소스들을 보호할 수 있도록 한다.

✔ 여러 대의 WAS 연결 가능

규모가 커지면 WAS 하나만으로는 버거울 수도 있다. 그래서 웹 서버에 WAS를 여러 개 연결하여 웹 서버로 들어오는 요청들을 적절하게 분배해주면, 안정적으로 서비스를 운영할 수 있게 된다.


Django에서 제공하는 runserver로 배포를 하면 안되는 이유는?


django를 이용하여 개발할 때,python manage.py runserver를 통해 테스트를 한다.
하지만 이렇게 runserver로 서버를 띄우는 것은 단지 테스트용일 뿐이며, 배포용은 아니라고 공식문서에도 나와있다.

프로덕션 세팅으로 서버를 사용하지 마라. 보안과 성능 테스트를 거치지 않았다. ~

대충 이런 내용이다.

정리하자면, runserver의 성능은 매우 느리며, 보안 문제도 발생할 수 있기 때문에 하지 말라는 것이다.

우리는 이제 runserver 대신 서버를 실행시킬 것을 찾아야 한다. 이를 위해 WSGI에 대해 알아보자.

WSGI란?

WSGI(Web Server Gateway Interface)는 웹 서버 소프트웨어와 파이썬으로 작성된 웹 응용 프로그램 간의 표준 인터페이스이다.

조금 더 쉽게 설명하자면, WSGIpython으로 작성한 django와 같은 웹 프레임워크를 웹 서버와 통신하도록 도와주기 위한 규칙이다.

WSGI의 필요성

그런데 이러한 WSGI는 왜 필요한걸까?

일단 웹 서버는 python 코드를 이해하지 못하기 때문에 웹 서버와 웹 애플리케이션이 소통할 수 없다. 그 사이에서 통신할 수 있도록 WSGI가 인터페이스 역할을 해주는 것이다.

아래 글을 참고하면 WSGI를 이용하여 배포할 수 있다.

🔗 WSGI를 이용하여 django 배포하기

정리

runserver는 테스트용으로 만들어진 것이기 때문에 성능도 나쁘고, 사용하면 보안상의 문제도 발생할 수 있다. WSGI를 사용하면 성능도 훨씬 빨라지니까 WSGI를 사용하자!


📌 참고자료


https://charliecharlie.tistory.com/247
https://gyoogle.dev/blog/web-knowledge/Web%20Server%EC%99%80%20WAS%EC%9D%98%20%EC%B0%A8%EC%9D%B4.html
https://codechasseur.tistory.com/25
https://uiandwe.tistory.com/1268
https://dailyheumsi.tistory.com/19

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글