Django로 배우는 쉽고 빠른 웹개발 파이썬 웹프로그래밍 기초편 책 내용입니다.
1.1 웹 프로그래밍이란?
웹프로그래밍 : HTTP(S) 프로토콜로 통신하는 클라이언트와 서버를 개발하는 일.
ex) 웹브라우저를 실행하여 네이버에 접속하는 경우
:웹 클라이언트(브라우저)가 요청하고 웹서버(네이버서버)가 응답하는 클라이언트-서버 프로그램이 동작함.
웹서버에 요청을 보내는 웹 클라이언트는 아래와 같은 형태로 만들 수 있다.
- 웹 브라우저를 사용하여 요청
- 리눅스 curl 명령을 사용하여 요청
- 리눅스 telnet을 사용하여 요청
- 직접 만든 클라이언트로 요청
1.4 HTTP 프로토콜(Hypertext Transfer Protocol)
HTTP : 웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 통신 방식으로 TCP/IP 프로토콜 위에서 동작한다.
* 웹을 이용하려면 웹 서버와 웹클라이언트는 각각 TCP/IP 동작에 필수적인 IP주소를 가져야한다.
예를 들어 웹 브라우저 주소창에 네이버URL을 입력하면, 웹 클라이언트와 웹서버 사이에 HTTP 연결이 맺어지고 웹 클라이언트는 웹서버에 HTTP 요청 메시지를 보낸다.
웹 서버는 요청에 따른 처리를 진행한 후에 그 결과를 웹 클라이언트에 HTTP 응답 메시지로 보낸다
이처럼 요청메시지와 응답메시지가 반복적으로 오가면서 웹을 사용할 수 있다.
1.4.1 HTTP 메시지의 구조
HTTP 메시지에는 클라이언트에서 서버로 보내는 요청메시지와 서버에서 클라이언트로 보내는 응답메시지가 있다.
- 스타트라인은 요청메시지일때 요청라인(request line), 응답메시지일때 상태라인(status line)이라고 부른다.
- 스타트 라인에 이어 헤더의 각 행 끝에는 줄바꿈 문자인 CRLF(Carriage Return Line Feed)이 있으며 헤더와 바디는 빈 줄로 구분한다.
- 헤더와 바디는 생략할 수 있으며 바디에는 텍스트 뿐 아니라 2진수(binary)데이터도 들어갈 수 있다.
1.4.2 HTTP 처리방식
HTTP 메소드를 통해 클라이언트가 원하는 처리방식을 서버에 알려준다.
메소드명 | 의미 | CRUD 매핑 역할 |
GET | 리소스 취득 | Read |
POST | 리소스 생성, 리소스 데이터 추가 | Create |
PUT | 리소스 변경 | Update |
DELETE | 리소스 삭제 | Delete |
HEAD | 리소스의 헤더(메타데이터) 취득 | |
OPTIONS | 리소스가 서포트하는 메소드 취득 | |
TRACE | 루프백 시험에 사용 | |
CONNECT | 프록시 동작의 터널 접속으로 변경 |
1.4.3 GET 메소드와 POST 메소드
- GET 은 URL 부분의 ? 뒤에 이름=값 쌍으로 이어 붙여 보낸다.
- POST는 GET에서 URL에 포함시켰던 파라미터들을 요청메시지의 바디에 넣어 보낸다.
GET 방식을 사용하면 URL의 길이 제한이 있어 많은 양의 데이터를 보내기 어렵다.
또한 전달되는 사용자의 정보가 웹 브라우저의 주소창에 노출된다는 단점이 있어 보안 문제가 발생할 수 있다.
따라서 폼을 사용하거나 추가적인 파라미터를 서버로 보내는 경우에는 GET 보다 POST 방식을 많이 사용한다.
1.4.4 상태코드
서버에서의 처리결과는 응답메시지의 상태라인에 있는 상태코드(Status code)를 보고 파악할 수 있다.
상태코드 | 상태 텍스트 | 설명 |
1xx | Informational | 임시 응답으로 현재 클라이언트의ㅣ 요청까지는 처리되었으니 계속 진행하라는 의미. |
2xx | Success | 클라이언트의 요청이 서버에서 성공적으로 처리되었다는 의미. |
3xx | Redirection | 완전한 처리를 위해서 추가 동작이 필요한 경우. 주로 서버의 주소 또는 요청한 URI의 웹문서가 이동되어 다시 시도하라는 의미. |
4xx | Client Error | 없는 페이지를 요청하는 등 클라이언트의 요청 메시지 내용이 잘못된 경우를 의미. |
5xx | Server Error | 서버 사정으로 메시지 처리에 문제가 발생한 경우. 서버의 부하, DB처리과정 오류, 서버에서 익셉션이 발생한 경우를 의미. |
1.5 URL 설계
- URL 스킴 : URL에 사용된 프로토콜.
- 호스트명 : 웹 서버의 호스팅명으로 도메인명 또는 IP 주소로 표현된다.
- 포트번호 : 웹 서버 내의 서비스 포트 번호, 생략 시에는 디폴트 포트 번호로 http는 80을, https는 443을 사용한다.
- 경로 : 파일이나 애플리케이션 경로.
- 쿼리스트링 : 질의 문자열로 앰퍼샌드(&)로 구성된 이름=값 형식으로 표현한다.
- 프라그먼트 : 문서내의 앵커 등 조각을 지정한다.
1.6 웹 애플리케이션 서버
웹 클라이언트의 요청을 받아 처리하는 서버를 통칭하여 웹 서버라고 부르기도 하지만, 아래와 같이 웹서버와 웹애플리케이션 서버로 세분화 할 수 있다.
상태코드 | 역할 | 프로그램명 |
웹 서버 | 웹 클라이언트의 요청을 받아서 요청을 처리하고 그 결과를 클라이언트에 응답한다. 주로 정적 페이지로 구성된 HTML, 이미지, CSS, Javascript 파일을 웹 클라이언트에 제공할 때 웹 서버를 사용한다. 만약 동적 페이지 처리가 필요하다면 웹 애플리케이션 서버로 처리를 넘겨야한다. |
Apache httpd, NGINX, lighttpd, IIS 등 |
웹 애플리케이션 서버 | 웹 서버로부터 동적 페이지 요청을 받아서 처리하고 그 결과를 웹서버로 반환한다. 주로 동적 페이지 생성을 위한 프로그램 실행과 데이터베이스 연동 기능을 처리한다. |
Apache Tomcat, JBoss,WebLogic, WebSphere, mod_wsgi, uWSGI, Gunicorn 등 |
1.6.1 정적페이지 vs 동적 페이지
정적 페이지(Static page) : 항상 같은 내용을 표시하는 웹페이지. 동일한 리소스(URL) 요청에 대해서는 항상 동일한 내용의 페이지를 반환.
동적 페이지(Dynamic page) : 누가 언제 어떻게 요구했는지에 따라 다른 내용이 반환되는 웹페이지.(ex.현재시각/장바구니)
1.6.4 애플리케이션 서버 방식
애플리케이션 서버 방식은 웹 서버가 직접 프로그램을 호출하기보다는, 웹 애플리케이션 서버를 통해 간접적으로 웹 애플리케이션 프로그램을 실행한다.
웹 애플리케이션 서버는 실행 결과를 웹서버에 전달하며, 웹 서버는 전달받은 응답결과를 웹 클라이언트에 전송한다.
애플리케이션 서버 방식을 사용할 때 각 서버 간 구성도는 아래와 같다.
'Spec UP - Backend > Django로 배우는 쉽고 빠른 웹개발 파이썬 프로그래밍' 카테고리의 다른 글
chap 3. Django 프레임워크 (1) | 2024.02.27 |
---|---|
CGI / WSGI / ASGI (0) | 2024.02.21 |
chap 02. CGI/WSGI 라이브러리 (0) | 2024.02.20 |
chap 02. 웹 서버 라이브러리 (0) | 2024.02.20 |
chap 02. 파이썬 웹 표준 라이브러리 (1) | 2024.02.07 |
댓글