웹을 지탱하는 기술 스터디 2회차

Chapter06

HTTP의 기본

HTTP의 중요성

HTTP란?

  • 컴퓨터에서 다룰 수 있는 데이터라면 무엇이든지 전송할수 있는 프로토콜이며, REST의 중요한 특징인 Uniform 인터페이스, 스테이트리스서버, 캐시 등을 구현하고 있는 web의 기반이 되는 프로토콜입니다.

TCP/IP란?

  • HTTP는 TCP/IP를 기반으로 하고있다.
  • 계층형 프로토콜
  • 네트워크 인터페이스 계층
  • 인터넷 계층
  • 트랜스포트 계층
  • 애플리케이션 계층

HTTP의 버전

  • HTTP-0.9 : 헤더가없고, 메서드는 GET뿐
  • HTTP-1.0 : 헤더의 도입, GET이외의 메서드 추가 등 HTTP 1.1로 이어지는 기본적인 요소들이 도입
  • HTTP-1.1 : 채널 전송, Accept 헤더에 의한 콘텐트 네고시에이션, 복잡한 캐시 컨트롤, 지속적 연결 등의 기능이 추가되었다.

클라이언트와 서버

  • 웹은 아키텍처 스타일로 클라이언트/서버를 채용하고있다.
  • 클라이언트가 서버에 접속하여 요청을 보내면 응답을 받는 구조다.

요청과 응답

  • 위와같은 프로콜을 가리켜 요청/응답형 프로토콜이라 한다.
  • HTTP는 동기형 프로토콜이다.
  • 클라이언트에서 일어나는 일들

    1. 요청 메시지 구축
    2. 요청 메시지 송신
    3. 응답이 돌아올 때까지 대기
    4. 응답 메시지 수신
    5. 응답 메시지 해석
    6. 클라이언트의 목적을 달성하기 위해 필요한 처리
  • 서버에서 일어나는 일들

    1. 요청을 대기
    2. 요청 메시지 수신
    3. 요청 메시지 해석
    4. 적절한 애플리케이션 프로그램으로 처리를 위임
    5. 애플리케이션 프로그램으로부터 결과를 취득
    6. 응답 메시지 구축
    7. 응답 메시지 송신

HTTP의 스테이트리스성

  • 스테이트리스란 ‘서버가 클라이언트의 애플리케이션 상태를 보존하지 않는다’ 라는 제약이다.
  • 스테이트풀이란 서버가 클라이언트의 애플리케이션 상태를 기억하고 있는것
  • 애플리케이션 상태는 ‘세션상태’라고도 한다.
  • 스테이트풀의 결점은 클라이언트의 수가 증가함에 따라 서버가 클라이언트의 애플리케이션 상태를 기억하는 것이 어려워짐 ex) 오버헤드
  • 스테이트리스의 이점은 애플리케이션 상태를 기억할 필요가 없기 때문에 시스템이 단순해진다.
  • 스테이트리스의 결점은

    1. 송신한 데이터의 양이 많아진다.
    2. 인증 등 서버에 부하가 걸리는 처리를 반복한다.

결론

HTTP의 가장 큰 특징인 심플함은 강력한 무기이다. 심플하기 때문에 브라우저는 PC뿐만 아니라, 그 밖의 다양한 디바이스에서도 구현될 수 있게 되었고, 웹서비스와 웹 API가 같은 프로토콜로 실현될 수 있는 것이다.

Chapter08

HTTP 메서드

  • GET : 리소스 취득
  • POST : 서브 리소스의 작성, 리소스의 데이터의 추가, 그 밖의 처리
  • PUT : 리소스의 갱신, 리소스의 작성
  • DELETE : 리소스의 삭제
  • HEAD : 리소스의 헤더(메타 데이터) 취득
  • PATCH : 리소스의 수정, 일부를 교체
  • OPTIONS : 리소스가 서포트하는 메서드의 취득
  • TRACE : 자기 앞으로 요청 메시지를 반환(루프 백) 시험
  • CONNECT : 프록시 동작의 터널 접속으로 변경

대표적인 메서드 GET POST PATCH DELETE

조건부 요청

  • HTTP 메서드와 갱신일자 등으로 헤더를 구성하면 메서드의 실행 여부를 리소스의 갱신일자를 조건으로 서버가 선택할 수 있다. 이렇나 요청을 ‘조건부 요청’이라 한다

멱등성과 안정성

  • 멱등성: 어떤 조작을 몇 번을 반복해도 결과가 동일한 것
  • 안정성: 조작대상의 리소스의 상태를 변화시키지 않는것

웹의 성공의 이유는 HTTP 메서드에 있다.

  • 메서드를 한정하여 고정시켰기 때문에 결국 프로토콜이 심플하게 유지되었고 웹은 성공했다.

Chapter08

스테이터스 코드

스테이터스 코드의 중요성

  • 스테이터스 라인 : 응답 메시지의 첫째 줄에 있는 프로토콜 버전, 스테이터스 코드, 텍스트 프레이즈로 이루어집니다. 이 중 가장 중요한 것이 바로 스테이터스 코드입니다.

스테이터스 코드의 분류와 의미

  • 1XX : 처리중

    • 처리가 계속되고있음을 나타냄
  • 2XX : 성공

    • 요청의 성공
  • 3XX : 리다이렉트

    • 다른 리소스로의 리다이렉트
  • 4XX : 클라이언트 에러

    • 클라이언트 에러를 나타냄. 원인은 클라이언트의 요청에 있다.
  • 5XX : 서버 에러

    • 서버 에러를 나타낸다.

Chapter09

HTTP 헤더

  • 헤더는 메시지의 바디에 대한 부가적인 정보, 즉 메타 데이터를 표현합니다.
  • 클라이언트와 서버는 헤더를 보고 메시지에 대한 동작을 결정한다.
  • 리소스에 대한 접근권한을 설정하는 인증이나 클라이언트와 서버의 통신횟수와 양을 감소시키는 캐시 같은 HTTP의 기능을 헤더로 실현합니다.

날짜와 시간

날짜와 시간을 가지는 헤더

Date: Tue, 06 Jul 2010 03:21:05 GMT

MIME 미디어 타입

  • 메시지로 주고받는 리소스 표현의 종류를 지정하는 것이 MIME미디어 타입입니다.
  • Content-Type 헤더는 그 메시지의 바디 내용이 어떠한 종류인가를 미디어 타입으로 나타낸다.
  • 미디어 타입은 charset 파라미터를 가질 수 있습니다.
  • Content-Language 헤더는 리소스의 표현의 자연언어를 지정한다.

콘텐트 네고시에이션

  • 미디어 타입과 문자 인코딩, 언어 태그는 서버가 일방적으로 결정하는 것뿐만 아니라, 클라이언트와 교섭해서 정할수있다. 이 방법을 콘텐트 네고시에이션 이라한다.
  • Accept - 클라이언트가 처리할수 있는 미디어 타입을 전달한다.
  • Accept-Charset - 처리할 수 있는 문자 인코딩을 전달한다.

인증

  • Basic 인증 - 유저 이름과 패스워드에 의한 인증방식, 유저 이름과 패스워드는 Authorization 헤더에 넣어 요청마다 전송합니다. Basic 인증을 사용할 때는 SSL,TLS,HTTPS 통신을하고 통신선로 상에서 암호화할 것인지 검토해야한다.
  • Digest 인증 - Basic 인증보다 보안이 강화된 인증 방식이다. 메시지에 해시함수를 적용한 해시값을 말하며 요즘은 쓰지않는다.

개념탄탄

OpenID와 OAuth

OpenID와 Oauth 모두 인증을 위한 오픈 스탠더드 프로토콜로, 이를 이용하면, Facebook과 같은 인터넷 서비스의 기능을 다른 어플리케이션 등에서도 사용할 수 있다.

OAuth 사용 이전에도 다른 어플리케이션에 사용자의 아이디와 암호가 노출되지 않도록 하는 API 접근 위임이 가능한 여러 접근 방법이 있었지만 서로 통일되어있지 않았었고, 표준으로써 제정된 것이 OpenID와 Oauth 인증방식이다.

OpenID와 Oauth 방식은 몇가지 공통점과 차이점을 갖고 있다. 일단 알아야 할 것은 두방식 모두 로그인과는 조금 다른 권한이라는 것을 의미하는 것이다.

그 중에서도 OpenID의 주요 목적이 인증(Authentication)이라면 OAuth의 주요 목적은 허가(Authorization)이다.

OAuth의 인증과정

  1. Request Token의 요청과 발급
  2. 사용자 인증 페이지 호출
  3. 사용자 로그인 완료
  4. 사용자의 권한 요청 및 수락
  5. Access Token 발급
  6. Access Token을 이용해서 서비스 정보를 요청

캐시

  • 캐시란, 서버로부터 가져온 리소스를 로컬 스토리지에 저장하여 재사용하는 방법이다.
  • 로컬 스토리지에 캐싱한 데이터 자체를 ‘캐시’라고 부른다.
  • 클라이언트가 저장한 캐시는 그 캐시의 유효기간 내에 다시 그 리소스에 접근하려고 했을 때 재사용된다.
  • Pragma - 캐시를 억제한다.
  • Expries - 캐시의 유효기한을 나타낸다.
  • Cache-Control - 상세한 캐시 방법을 지정한다.

HTML이란 무엇인가.

  • Hypertext Markup Language의 줄임말이다.
  • 마크업 언어란 태그로 문서의 구조를 표현하는 컴퓨터 언어이다.
  • HTML의 미디어타입

    • test/html
    • SGML 베이스의 HTML
    • application/xhtml+xml
    • XML 베이스의 XHTML
  • .html 또는 .htm이라는 확장자를 사용한다.