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