웹 개발자를 위한 Web Protocols 정리
- 목차
- URL (Uniform Resource Locator)
- HTTP (Hyper Text Transfer Protocol)
- HTTP GET 요청 동작과정
- HTTP 응답 헤더
- 브라우저에서 캐싱하기
- FTP (File Transfer Protocol)
- FTP 통신 방식
- SMTP (Simple Mail Transfer Protocol)
- MIME (Multi-purpose Internet Mail Extensions)
- 웹에서 웹 페이지를 정의하고 접근하기 위해 URL 을 사용한다.
URL 의 일반적인 형식은
protocol://computer_name:port/document_name?parameters여기서 각 단위의 역할을 살펴보자.
- protocol : 문서를 접근하기 위해 사용하는 프로토콜 이름
- computer_name : 문서가 있는 컴퓨터의 도메인 이름
- port : 서버가 어떤 포트 숫자를 바라보고 있는지 (선택 사항)
- document_name : 서버 컴퓨터에 있는 특정 문서의 이름
- parameters : 페이지에 넘기는 변수 (선택 사항)
위의 형식을 이용하여 예제를 보면
http://www.netbook.cs.purdue.edu/toc/toc01.htm- 위 URL 은 http 프로토콜을 이용하고, www.netbook.cs.purdue.edu 의 이름을 갖는 컴퓨터(서버)에서 toc/toc01.htm 파일을 접근한다.
- HTTP 는 브라우저가 웹 서버와 통신하기 위해 사용하는 주요 프로토콜이다.
HTTP 4가지 요청 형식은 아래와 같다.
- GET : 문서를 요청. 서버가 클라이언트에 상태 정보와 복제된 문서를 보냄으로써 응답을 함. (조회)
- HEAD : 상태 정보를 요청. GET 과 동일한 형태로 응답을 하지만, 문서를 복제하지는 않는다.
- POST : 데이터를 서버로 송신. 서버는 해당 데이터를 특정 아이템에 덧붙인다. (생성)
- PUT : 데이터를 서버로 송신. 서버가 특정 아이템을 완전히 대체한다. (수정)
- URL 에 사이트 주소를 입력하고 확인을 누르면, 브라우저에서 GET 요청으로 서버에 페이지를 요청한다.
- GET 요청을 받은 서버에서는 헤더, 빈 줄, 요청한 문서 를 클라이언트로 보낸다.
이 때 GET 의 요청 형식은 다음과 같다.
GET /item versionCRLF위 형식을 해석해보면,
- item : 요청한 문서의 URL
- version : 프로토콜의 버전을 의미. 보통은 HTTP/1.0 이나 HTTP/1.1 이다.
- CRLF : 텍스트 줄의 끝을 의미하는 2 개의 아스키 코드를 의미 (Carriage Return : 커서를 행의 맨 좌측 이동, Line Feed : 커서를 다음 행으로 이동)
- 여기서 version 이 중요한 이유가 클라이언트와 서버 모두 이해 가능한 버전으로 맞추어 호환하기 때문이다.
- 응답 헤더에서 상태 정보를 포함하기 때문에, 해당 요청이 서버에서 제대로 처리가 되었는지 확인할 수 있다.
- 자주 쓰이는 상태 정보로는 404 (해당 문서 못 찾음), 200 (요청 처리 완료) 등이 있다.
HTTP 응답 헤더의 일반적인 형태는 아래와 같다.
HTTP/1.0 status_code status_string CRLF Server: server_identification CRLF Last-Modified : date_document_was_changed CRLF Content-Length : datasize CRLF Content-Type : document_type CRLF CRLF위를 자세히 살펴 보면,
- status_code : 상태를 나타내는 숫자 값
- status_string : 사람이 식별 가능한 상태 문자 값
- server_identification : 서버정보 설명
- datasize : 데이터의 크기 (바이트 단위)
- document_type : 문서 유형 (html 문서는 text/html, jpeg 파일은 image/jpeg)
- 웹 페이지 성능을 최적화 하려면 캐시를 이용한다.
- 예를 들어, 용량이 큰 이미지가 많은 사이트를 반복 접속하는 경우에 다운로드 시간과 HTTP GET 요청수를 줄이기 위해 해당 이미지를 사용자의 디스크에 저장하고 캐시로 사용한다.
- 브라우저는 캐시가 최신 버전인지 이전 버전인지 어떻게 확인할까?
- 바로 캐시를 사용하기 전에 서버에 HEAD 요청을 날려 Last-Modified Date 를 비교해 최신임을 확인한다.
- 여기서 주의할 점은 모든 파일에 대해 캐시를 만드는 것이 더 효율적일지 아니면, HEAD 요청을 만들어 날리는 값들을 고려했을 때 캐시로 만들지 않는 것이 더 효율적일지 고민해야 한다. (캐시하려는 파일의 크기가 매우 작은 경우)
- 파일이 문서, 이미지, 프로그램 등 다양한 형태의 데이터를 갖고 있을 수 있기 때문에 컴퓨터 간의 파일 교환시에 호환성을 보장하는 프로토콜이 필요하다.
- 컴퓨터 간의 호환성이라는 것은 예를 들어, 한 컴퓨터에서는 JPEG 이미지가 .jpg 로 저장되지만 다른 컴퓨터에서는 .jpeg 로 저장될 수 있다. 또한 어떤 컴퓨터는 파일 경로를 (/) 를 사용하지만 다른 컴퓨터는 () 를 사용할 수도 있다.
- 이렇기 때문에 파일 전송에 대한 규약인 프로토콜을 이용하여 상호 컴퓨터 간에 파일 전송이 가능하다.
FTP 의 특성은 다음과 같다.
- 어떤 형태의 데이터든 전송이 가능하다.
- 파일을 다운로드 & 업로드 할 수 있다.
- 파일에 대한 권한을 설정할 수 있다.
- ASCII 문자로 메시지가 교환된다.
- 파일을 검색하고 조회할 수 있다.
- 브라우저에서 파일을 다운로드 하게 되면 바로 FTP 프로토콜을 사용하게 된다.
- HTTP 와는 다르게 FTP 는 클라이언트에서 서버로 한번 연결을 맺어놓은 상태에서 파일을 주고 받는 것이 아니라. 클라이언트에서 서버와의 연결이 맺어지면, 해당 연결은 명령어 입력을 위해 남겨놓고 (Control Connection), 파일을 보낼 때 새로운 연결을 추가하여 파일을 전송한다. (File Connection)
- 메일 전송 프로그램이 서버로 메일을 보낼 때 사용하는 프로토콜이다.
- 오직 텍스트만 전송이 가능한 것이 특징이고, 스트림 방식을 이용하여 전송한다.
- SMTP 는 한 개의 메시지를 해당 서버의 여러 수신자에게 보낼 수 있다는 특징이 있다.
- 상태 코드는 250 (수신 성공), 550 (수신자 못 찾음)
- SMTP 로 전송시 이메일에 텍스트 밖에 포함하지 못하는 단점을 보완하여, 메시지 안에 텍스트 이외의 데이터를 전송할 수 있는 프로토콜이다.
- 바이너리 파일을 출력 가능한 문자열 형태로 인코딩하고, 수신하는 부분에서 디코딩한다.
- Base64 로 인코딩 하기는 하지만, 다른 형태의 인코딩도 사용할 수 있다.
- 인코딩 방식은 메시지의 헤더 안에 정의한다.
MIME 은 이메일 헤더에 2 줄을 추가하는데, 이메일에 MIME 이 사용되었는지 여부와 MIME 정보를 바디에 어떻게 포함시킬 건지 를 정의한다.
MIME-Version : 1.0 Content-Type : Multipart/Mixed; Boundary=Mime_separator- 위의 MIME 버전은 1.0 이고, 각 메시지의 앞에 Mime_separator 가 나타남을 명시한다.
- 텍스트만 보내는 경우에 Content-Type 이 text/plain 이 된다.
- 결론적으로, MIME 은 이메일 메시지 안의 헤더에 추가 정보를 포함하여 비 텍스트 형의 데이터가 전송될 수 있도록 하는 프로토콜이다. 그리고 첨부된 데이터는 출력 가능한 형태의 문자열로 인코딩 되어 있고, 각 첨부 앞에 separator 로 구분되어 있다.

오 이거 님이 씀?
ㄴ아니 ㅋㅋㅋ
퍼가요~♡ - dc App
넵! 일단 개추주고 이따가 볼게요 ㅋ
ㄴ이따가 본다는 사람 치고 읽는 사람 못봤음
지금 다른 거 보고 있어서 그럼 ㅠㅠ