먼저
웹 프로그래밍이란,
'클라이언트-서버'로 이루어진다.
1장은 웹 클라이언트와 웹 서버, 통신규약인 HTTP 프로토콜, 주고받는 메시지 중에서 가장 중요한 URL,
웹 서버와 웹 어플리케이션 서버 간의 차이점과 각각의 특징을 알게됩니다.
1.1 웹 프로그래밍
웹 프로그래밍이란,
간단히 말하여 'HTTP(S) 프로토콜로 통신하는 클라이언트와 서버를 개발하는 것'
1) 웹 클라이언트와 웹 서버를 같이 개발
2) 웹 클라이언트 만 개발
3) 웹 서버 만 개발
보통은,
Django 같은 웹 프레임워크를 사용하여 3) 웹 서버 만 개발 하는 것을 떠올림.
아래는 웹 브라우져 ( 웹 클라이언트 )를 통하여 HTTP 프로토콜에 의거한 웹서버와의 통신을 그린 것!
1.2 다양한 웹 클라이언트
1.2.1 웹 브라우져를 사용하여 요청
웹 브라우져에서 URL : http://www.example.com 결과 보기!
1.2.2 리눅스 curl 명령을 사용하여 요청
리눅스 curl 명령은 HTTP/HTTPS/FTP 등 여러 가지 프로토콜을 사용하여 데이터를 송수신할 수 있는 명령이다.
shell prompt 에서 curl 명령을 입력한다!
Command : $ curl http://www.naver.com
curl 명령은 인자로 넘어온 URL로 HTTP 요청을 보내는 웹 클라이언트의 역할을 수행한다.
위 네이버 주소의 curl 명령 결과는 HTML 태그들로 보이는데,
즉, 어떤 방법으로 호출하여도 웹 서버는 동일한 요청을 받을시 동일한 응답을 돌려준다!
1.2.3 Telnet을 사용하여 요청
리눅스의 telnet 프로그램을 사용하여 HTTP 요청도 가능하다!
$ telnet www.example.com 80
telnet 명령은 터미널 창에서 입력하는 내용을 그대로 웹 서버에 전송한다.
telnet 프로그램이 웹 클라이언트의 역할을 수행한다.
1.2.4 직접 만든 클라이언트로 요청
python 프로그램으로도 간단한 웹 클라이언트를 만들어 보겠다.
$ notepad example.py
> 결과 <
import urllib.request
print(urllib.request.urlopen("http://www.example.com").read().decode('utf-8'))
(직접 만드는 방법은 '2.2 웹 클라이언트 라이브러리' 에 나옴)
1.3 HTTP 프로토콜
HTTP(Hypertext Transfer Protocol)는 웹 서버아 웹 클라이언트 사이에서
데이터를 주고받기 위해 사용하는 통신 방식
TCP/IP 프로토콜 위에서 동작! -> IP가 필요!
HTTP는 HTML이나 XMl 과 같은 하이퍼텍스트 뿐만 아니라 영상, 이미지, 스크립트, PDF 같은
컴퓨터에서 다룰 수 있는 데이터면 무엇이든 전송 가능하다.
1.3.1 HTTP 메시지의 구조
Start-line (요청메시지일때 : 요청라인 or 응답메시지일때 :상태라인)
Header (헤더는 생략 가능)
Blank Line (헤더의 끝을 빈 줄로 식별)
Body (바디는 생략 가능)
스타트라인에 이어 헤더는 줄바꿈 문자인 : CRLF(Carriage Return Line Feed) 가 있음
헤더와 바디는 빈 줄로 구분gka.
Body가 없는 요청메시지 예시
GET /book/shakespeare HTTP/1.1
Host: www.example.com:8080
첫 번째 줄 : 요청라인 > '요청방식(method)-GET, 요청URL-/book/shakespeare, 프로토콜 버전-HTTP/1.1'으로 구성
두 번째 줄은 Header > '이름-Host : 값-www.example.com:8080
Host 항목은 필수이다.
Host를 요청URL에 넣어서
아래와 같이도 표시 가능.
GET http://www.example.com:8080/book/shakespeare HTTP/1.1
다음은 응답 메시지 예시
HTTP/1.1 200 OK
Content-Type: application/xhtml+xml; charset=utf-8
<html>
...
</html>
첫 번째 줄 : 상태라인 > '프로토콜 버전-HTTP/1.1, 상태코드-200, 상태 텍스트-OK'
두 번째 줄은 Header ~ HTML 포함
1.3.2 HTTP 처리 방식
HTTP 메소드를 통해서 클라이언트가 원하는 처리 방식을 서버에 알려준다.
총 8가지로 되어 있음.
GET, POST, PUT, DELETE 4개가 가장 많이 쓰임
CRUD와 매핑된다.
GET-Read (조회)
POST-Create (생성)
PUT-Update (변경)
DELETE-Delete (삭제)
** POST와 PUT 용도 구분은,
새롭게 생성한 리소스에 대한 URL 결정권이
서버 측에 있을 때 POST 사용.
클라이언트에 있을 때 PUT 사용.
예를 들어, 트위에 글 포스팅시 URL은 서버에서 결정하므로 POST 사용.
위키처럼 클라이언트가 결정한 타이틀이 그대로 URL이 되는 경우는 PUT 사용이 적합.
1.3.3 GET과 POST 메소드
실제 GET, POST 메소드가 가장 많이 쓰임.
HTML Form에서 지정할 수 있는 메소드가 둘 밖에 없는 이유가 가장 큼.
<GET 예시>
GET http://docs.djangoproject.com/search/?q=forms&release=1 HTTP/1.1
<POST 예시>
POST http://docs.djangoproject.com/search/ HTTP/1.1
Content-Type: application/x-www-form-urlencoded
q=forms&release=1
위와 같이 GET는 ? 물음표로 변수 이어 붙이기로 URL 길이 제한에 걸릴 수 있음
**보안에도 취약!
따라서,
폼을 사용하거나 추가적인 파라미터를 서버로 보내는 경우 GET보다 POST 방식을 선호
** 파이썬의 장고 프레임워크에서도 폼의 데이터는 POST 방식만을 사용하고 있다! **
위 단점들이 영향없을 경우만 GET 사용 무방
1.3.4 상태 코드
서버에서의 처리 결과는 응답 메시지의 상태라인에 있는 상태 코드를 보고 파악 가능
'200 OK'가 기본적인 정상 코드
코드는 별도 검색하여 참고 요망.
'IT 툴툴' 카테고리의 다른 글
[Django파이썬웹프로그래밍] 04 Django의 핵심 기능 - 4.1~4.3 (0) | 2021.11.22 |
---|---|
[Django파이썬웹프로그래밍] 03 Django 웹 프레임워크 - 3.6~3.7 (0) | 2021.11.22 |
[Django파이썬웹프로그래밍] 03 Django 웹 프레임워크 - 3.4~3.5 (0) | 2021.11.22 |
[Django파이썬웹프로그래밍] 03 Django 웹 프레임워크 - 3.1~3.2 (0) | 2021.11.22 |
[Django파이썬웹프로그래밍] 01 웹 프로그래밍의 이해 - 1.4~1.5(중) (0) | 2021.11.22 |