본문 바로가기

Python/Django

웹 프로그래밍 이해하기

1. 웹 프로그래밍이란?

간단히는 HTTP(S) 프로토콜로 통신하는 클라이언트와 서버를 개발하는 것

(보통은 웹 서버를 개발하는 경우가 많기에 Django와 같은 웹 프레임워크로 웹 서버 개발하는 것을 떠올린다.)

웹 프로그래밍에서 클라이언트와 서버의 관계

예를 들면, 웹 브라우저를 실행해 네이버에 접속하는 것이 바로 웹 프로그램이 동작하는 것이다.
이 경우 [웹 브라우저 = 웹 클라이언트, 네이버 서버 = 웹 서버] 이다.
대표적인 웹 브라우저는 Chrome, Internet Explorer, Firefox 등이 있다.

 

 

2. HTTP 프로토콜

2.1 HTTP 프로토콜의 정의

HTTP (Hypertext Transfer Protocol) : 웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 통신 방식

HTTP란 이름대로라면 hypertext 전송용 프로토콜이지만, 실제로는 컴퓨터에서 다룰 수 있는 데이터라면 무엇이든 전송할 수 있다. 

예를 들면, 웹 브라우저의 주소창에 http://www.naver.com을 입력하고 Enter
→ 웹 클라이언트와 웹 서버 사이에 HTTP 연결이 맺어짐
→ 웹 클라이언트는 웹 서버에 HTTP request 메세지를 보냄
→ 웹 서버는 요청에 따른 처리를 진행, 그 결과를 웹 클라이언트에게 HTTP response 메세지로 전송
→ 반복

 

2.2 HTTP 처리 방식

가장 많이 사용되는 메소드는 HET, POST, PUT, DELETE

→데이터 조작의 기본인 CRUD(Create, Read, Update, Delete)와 매핑된다.

 

메소드명 의미 CRUD와 매핑되는 역할
GET 리소스 취득
(지정한 URL의 정보를 가져옴)
Read (조회)
POST 리소스 생성, 리소스 데이터 추가 Create (생성)
PUT 리소스 변경
(리소스 생성에 이용될 수 있지만, 혼동을 줄 수 있기에 리소스 생성은 POST, 변경은 PUT으로 사용하는 것을 권장)
Update (변경)
DELETE 리소스 삭제 Delete (삭제)

 

 

3. 웹 애플리케이션 서버

3.1 웹 서버의 분류

 

웹 서버 : 웹 클라이언트(일반적으로 웹 브라우저)의 요청을 받아서 처리하는 서버를 통칭한다.

웹 서버를 세분화하면 웹 서버와 웹 애플리케이션 서버로 분류 가능하다.

 

구분 역할 프로그램명
웹 서버 웹 클라이언트의 요청을 받아 처리,
그 결과를 웹 클라이언트에게 응답함

주로 정적페이지(HTML, 이미지, CSS, Javascript 파일)를 웹 클라이언트에게 제공할 때 사용함

동적 페이지 처리는 웹 애플리케이션 서버에게 처리를 양도함
Apache httpd, Nginx, lighttpd, IIS 등
웹 애플리케이션 서버 웹 서버로부터 동적 페이지 요청을 받아 처리하고, 결과를 웹 서버에 반환함

주로 동적 페이지 생성을 위한 프로그램 실행과 DB 연동 기능을 처리함
Apache Tomcat, JBoss, WebLogic, WebSphere, Jetty, Jeus, mod_wsgi, uWSGI, Gunicorn 등

 

3.2 정적페이지와 동적페이지의 구분

정적/동적 : 사용자가 페이지를 요청하는 시점에 페이지의 내용이 유지되는가 or 변경되는가를 구분하는 용어

정적 페이지 : 누가 언제 요구해도 항상 같은 내용을 표시하는 웹 페이지(주로 HTML, Javascript, css, 이미지만으로 구성)

동적 페이지 : 동일한 리소스 요청이라도 누가, 언제, 어떻게 요구했는지에 따라 각각 다른 내용이 반환되는 페이지

동적 페이지 예제 : 현재 시각을 보여주는 페이지, 온라인 쇼핑몰의 장바구니

 

3.3 애플리케이션 서버 방식

애플리케이션 서버 방식 : 웹 서버가 직접 프로그램을 호출하지 않고, 웹 애플리케이션 서버를 통해서 간접적으로 웹 애플리케이션 프로그램을 실행한다. 웹 애플리케이션 서버는 애플리케이션 프로그램의 실행 결과를 웹 서버에 전달해주고, 웹 서버는 웹 애플리케이션 서버로부터 전달받은 응답 결과를 웹 클라이언트에 전송한다.

 

웹 서버는 정적 페이지를, 웹 애플리케이션 서버에서 동적 페이지만을 담당해서 처리하도록 역할을 분담하는 이유는, 정적 페이지를 처리하는 경우에 비해 동적 페이지를 처리하는 경우가 훨씬 많은 메모리를 소비하기 때문이다. 이렇게 역할 분담을 하면 훨씬 더 많은 요청을 처리할 수 있어 효율적이다.

애플리케이션 서버 방식에서의 서버 간 구성도

웹서버와 웹 애플리케이션 서버를 묶어서 같은 HW 박스에 배치할 수도 있고, 다른 HW 박스에 배치할 수도 있다.

이때, HW 박스를 분리해서 구성하면 메모리 효율을 높일 수 있다. 그 이유는, 정적 페이지를 처리하는 웹 서버 박스와 동적 페이지를 처리하기 위한 웹 애플리케이션 서버 박스 간의 메모리 사이즈 비율이 조정가능하기 때문이다.