초창기 웹 서버는 정적 페이들을 보여주는 것이 주된 역할이였지만, 점차 동적 페이지에 대한 요구사항이 생기고, 필요한 데이터를 저장하고 꺼내오는 등의 데이터베이스 처리에 대한 요구가 많아짐에 따라 웹 서버와는 다른 별도의 프로그램이 필요하게 되었다. 이러한 별도의 프로그램과 웹 서버 사이에 정보를 주고받는 규칙을 정의한 것이 바로 CGI 이다.

 

- CGI 방식의 단점

CGI 방식의 근본적인 문제점은 각각의 클라이언트 요청에 대하여 독립적인 별도의 프로세스가 생성된다는 것이다. 요청이 많아질수록 프로세스가 많아지고, 프로세스가 많아질수록 빌{적으로 프로세스가 점유하는 메모리 요구랑도 커져서 시스템에 많은 부하를 주는 요인이 된다. 현재는 CGI 방식을 거의 사용하지 않고 , 이러한 단점을 해결하기 위한 대안책으로 여러가지 기술이 등장했다.

 

- CGI 방식의 대안 기술

CGI 방식의 대한 기술 중 하나는 별도의 애플리케이션(CGI 프로그램과 같은 역할을 하는 프로그램)을 PHP 등의 스크립트 언어로 작성, 스트립트를 처리하는 스크립트 엔진(인터프리터)을 웹 서버에 내장시켜 별도의 프로세스를 기동시키는 오버헤드를 줄이는 방식으로 파이썬에서는 예전의 mod_python 모듈은 더 이상 사용하지 않고, 현재는 mod_wsgi 모듈을 사용

 

또 다른 하나는 애플리케이션을 처리하는 프로세스를 미리 데몬으로 가동시켜 놓은 후, 웹 서버의 요청을 데몬에서 처리하는 것이다. 이것 또한 프로세스 생성 부하를 줄일 수 있는 방법이다. 파이썬의 경우에는 데몬 방식에도 mod_wsgi 모듈을 사용한다. mod_wsgi 모듈을 앞에서처럼 웹 서버 내장 방식으로도 실행이 가능하고, 별도의 데몬 방식으로도 실행 가능하다.

 

CGI 애플리케이션을 별도의 데몬으로 처리하는 방식이 발전하여 스레드 처리 보강, 객체 지향 기술 반영으로 애플리케이션 전용 데몬인 애플리케이션 서버 방식으로 발전했다. 가장 많이 사용되고 있는 JSP(Java Server Page), ASP(Active Server Page) 기술에서 애플리케이션 서버 방식을 사용중이다.

 

파이썬에서 웹 서버 연동용으로 사용하는 mod_wsgi, uwsgi, gunicorn 프로그램들이, 웹 서버 프로그램인 httpd, nginx와는 별개의 애플리케이션 전용 데몬으로 동작한다는 점에서 웹 애플이케이션 서버라고 할 수 있다.

 

출처: 한빛미디어, Django로 배우는 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍

구분 역할 프로그램 명
웹 서버 웹 클라이언트의 요청을 받아서 요청을 처리하고, 그 결과를 웹 클라이언트에게 응답합니다. 
주로 정적 페이지인 HTML, 이미지, CSS, 자바스크립트 파일을 웹 클라이언트에 제공할 때 웹 서버를 사용합니다. 만약 동적 페이지 처리가 필요하다면 웹 애플리케이션 서버에 처리를 넘깁니다.
Apache httpd, Nginx, lighttpd,IIS 등
웹 애플리케이션 서버 웹 서버로부터 동적 페이지 요청을 받아서 요청을 처리하고, 그 결과를 웹 서버로 반환합니다.
주로 동적 페이지 생성을 위한 프로그램 실행과 데이터베이스 연동 기능을 처리합니다.
Apache Tomecat, JBoss, WebLogic, Jeus, mod_wsgi,
uWSGI, Gunicorn 등

정적 페이지:

누가, 언제 요구하더라고 항상 같은 내용을 표시하는 웹 페이지를 말한다. 웹 서비스 제공자가 사전에 준비하여 서버 측에 배치하여 놓고, 동일한 리소스의 요청에 대해서는 항상 동일한 내용의 페이지를 반환한다. 주로 HTML, 자바스크립트, CSS, 이미지만으로 이루어진 페이지가 해당된다.

 

동적 페이지:

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

 

출처: 한빛미디어, Django로 배우는 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍

'Django' 카테고리의 다른 글

6. Django 웹 프레임워크  (0) 2021.04.07
5. WSGI (Web Server Gateway Interface)  (0) 2021.04.07
4. CGI (Common Gateway Interface)  (0) 2021.04.07
2. URL 설계  (0) 2021.04.07
1. HTTP (구조, 메소드, 상태코드)  (0) 2021.04.07

URL은 보통 다음과 같이 구성됩니다.

http://www.example.com:80/services?category=2&kind=patents#n10 

  • URL 스킴: URL에 사용된 프로토콜 ex) http
  • 호스트명: 웹 서버의 호스트명, 도메인명 또는 IP 주소 ex) www.example.com
  • 포트번호: 웹 서버 내의 서비스 포트번호. 생략 시 디폴트 포트번호로 http는 80로, https는 443 ex) 80
  • 경로: 파일이나 애플리케이션 경로 ex)service
  • 쿼리스트링: 질의 문자열로, 앰퍼샌드(&)로 구분된 이름=값 쌍 형식 ex) category=2&kind=patents
  • 프라그먼트: 문서 내의 앵커 등 조각을 지정 ex)#n10

출처: 한빛미디어, Django로 배우는 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍

▶HTTP(Hypertxt Transfer Protocol): 웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 통신 방식, TCP/IP 프로토콜 위에서 동작한다. HTML, XML 등과 같은 하이퍼텍스트 뿐만 아니라 이미지, 음성, 동영상, 자바스크립트, PDF 등 컴퓨터에서 다룰 수 있는 데이터라면 무엇이든 전송할 수 있다.

 

HTTP 메시지의 구조

스타트라인(Start LIne)
헤더(Header)
빈 줄(Blank LIne)
바디(Body)

스타트라인(Start LIne): 요청라인 또는 상태라인

헤더(Header): 헤더는 생략 가능

빈 줄(Blank LIne): 헤더의 끝을 빈 줄로 식별

바디(Body): 바디는 생략 가능

 

 

 

- HTTP 메소드 종류

메소드명 의미 CRUD와 매핑되는 역할
GET 리소스 취득 Read(조회)
POST 리소스 생성, 리소스 데이터 추가 Create(생성)
PUT 리소스 변경 Update(변경)
DELETE 리소스 삭제 Delete(삭제_
HEAD 리소스가 헤더(메타데이터) 취득  
OPTIONS 리소스가 서포트하는 메소드 취득  
TRACE 루프백 시험에 사용  
CONNECT 프록시 동작의 터널 접속으로 변경  

 

- 상태 코드

메소드명 의미 CRUD와 매핑되는 역할
1xx Informational(정보 제공) 임시적인 응답으로, 현재 클라이언트의 요청까지 처리되었으니 계속 진행하라는 의미
2xx Success(성공) 클라이언트의 요청이 서버에서 성공적으로 처리
3xx Redirection(리다이렉션) 완전한 처리를 위해서 추가적인 동작을 필요로 하는 경우입니다. 주로 서버의 주소 또는 요청한 URI의 웹 문서가 이동되었으니, 그 주소로 다시 시도해보라는 의미
4xx Client Error(클라이언트 에러) 없는 페이지를 요청하는 것처럼 클라이언트의 요청 메시지 내용이 잘못된 경우
5xx Server Error(서버 에러) 서버 측 사정에 의해서 메세지 처리에 문제가 발생한 경우입니다. 서버의 부하, DB 처리 과정 오류, 서버에서 익섹션이 발생하는 경우

 

 

- 자주 사용되는 상태 코드

상태코드 상태 텍스트 응답문구 서버 측면에서의 의미
2xx Success 성공 클라이언트가 요청한 동작을 수신하여 이해했고, 승낙했으며 성공적으로 처리함
200 OK 성공 서버가 요청을 성공적으로 처리
201 Created 생성됨 요청이 처리되어서 새로운 리소스가 생성
202 Accepted 허용됨 요청은 접수했지만 처리가 완료되지 않음

 

상태코드 상태 텍스트 응답문구 서버 측면에서의 의미
3xx Redirection 리다이렉션 클라이언트는 요청을 마치기 위해 추가적인 동작을 취해야 함
301 Moved
Permanently
영구 이동 지정한 리소스가 새로운 URI로 이동
303 See Other 다른 위치 보기 다른 위치로 요청하라
307 Temporary
Redirect
임시 리다이렉션 임시로 리다이렉션이 요청이 필요하다

 

 

상태코드 상태 텍스트 응답문구 서버 측면에서의 의미
4xx Client Error 클라이언트 에러 클라이언트의 요청에 오류가 있다.
400 Bad Request 잘못된 요청 요청의 구문이 잘못되었다.
401 Unauthorized 권한 없음 지정한 리소스에 대한 액세스 권한이 없다.
403 Forbidden 금지됨 지정한 리소스에 대한 액세스가 금지되었따.
404 Not Found 찾을 수 없음 지정한 리소스를 찾을 수 없다.

 

 

상태코드 상태 텍스트 응답문구 서버 측면에서의 의미
5xx Serer Error 서버 에러 클라이언트의 요청은 유효한데, 서버가 처리에 실패했다.
500 Internal
Server Error
내부 서버 오류 서버쪽에서 에러가 발생했다.
502 Bad Gateway 불량 게이트웨이 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 잘못된 응답을 받았다.
503 Service
Unavailable
서비스 제공불가 현재 서버에서 서비스를 제공할 수 없다. 보통은 서버의 과부하나 서비스 점검 등 일시적인 상태이다.

출처:한빛 미디어 Django로 배우는 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍

'Django' 카테고리의 다른 글

6. Django 웹 프레임워크  (0) 2021.04.07
5. WSGI (Web Server Gateway Interface)  (0) 2021.04.07
4. CGI (Common Gateway Interface)  (0) 2021.04.07
3. 웹 애플리케이션 서버 (정적 페이지, 동적 페이지)  (0) 2021.04.07
2. URL 설계  (0) 2021.04.07

+ Recent posts