Web


최소한 이것만은 알고 시작하자!

Index

  • 웹 개론
  • URI
  • HTTP
  • 하이퍼미디어 포맷
  • 웹서비스 설계





웹 개론

웹의 용도


  • 웹싸이트

  • 유저 인터페이스로서의 웹

  • 프로그램을 위한 API로서의 웹

웹을 지탱하는 기술


  • HTTP, URI, HTML
    • HTTP: Hypertext Transfer Protocol
    • URI: Uniform Resource Identifier
    • HTML: 정보를 표현하는 문서 형태

  • 하이퍼미디어
    다양한 미디어를 Hyper Link로 구성한 시스템

  • 분산 시스템

웹의 역사


  • 웹 이전의 인터넷
    ... 생략
  • 웹 이전의 하이퍼미디어
    ... 생략
  • 웹 이전의 분산시스템
    • 중앙 집중형 시스템 > 분산 시스템
    •  RPC - 다른 컴퓨터의 기능 이용하기
    •  CORBA, DCOM - 분산 오브젝트로의 진화
      • 성능 열화
      • 데이터형 변환 문제
      • 인터페이스 버전업 호환성 문제
      • 부하 분산의 문제

웹의 탄생


  • 하이퍼미디어로서의 웹
    불특정 다수의 정보를 서로 링크(심플한 링크)
    => 시스템을 대규모화 하기 쉬움

  • 분산 시스템으로서의 웹
    HTTP라는 심플한 프로토콜
    => 불특정 다수의 클라이언트에 서비스를 제공

웹의 표준화


  • 웹의 스펙 책정
    너무 빠른 보급으로 스팩 책정이 따라가지 못함
    브라우저 전쟁 => HTML, CSS 렌더링이 각각 다름

  • REST 탄생

  • 다양한 하이퍼미디어 포맷의 탄생
    HTML, Atom
    microformats
    JSON

=> HTTP1.0 > HTTP1.1

웹 API


  • SOAP & WS-*

  • SOAP vs. REST

  • REST의 오해와 보급





모든것은 웹으로!

REST 웹의 아키텍처 스타일


  • 아키텍처 스타일로서의 REST
    클라이언트/서버 + @(몇가지 제약)

  • Resource
    웹상에 존재하는 이름을 가진 모든 정보
    • 리소스 명칭으로서의 URI
    • 리소스의  Addressing 가능성
      ftp://example.com/public/data/sample_file.gz
    • 복수의 URI를 가진 리소스
    • 리소스의 표현과 상태

REST 아키텍처 구성하기

  • Client / Server
    유저 인터페이스와 처리를 분리
  • Client / Stateless Server
    서버 측에서 애플리케이션의 상태를 가지지 않음
  • Client / Cache / Stateless Server
    클라이언트와 서버의 통신 횟수와 양을 감소시킴
  • Uniform / Client / Cache / Stateless Server
    인터페이스를 고정시킴
  • Uniform / Layered / Client / Cache / Stateless Server
    시스템을 계층별로 분할
  • Uniform / Layered / Code on Demand / Client / Cache / Stateless Server
    프로그램을 클라이언트에 다운로드하여 실행

REST의 2가지 측면


  • REST와 하이퍼미디어
    리소스를 링크로 연결하여 하나의 애플리케이션을 구성
    (애플리케이션 상태 엔진으로서의 하이퍼미디어)

  • REST와 분산 시스템
    심플한 인터페이스
    하위 호환성 보증
    => 서버 확장 용이




URI

URI의 스펙


  • URI
    Uniform Resource Identifier

    • 유니폼 리소스 식별자
    • 리소스를 통일적으로 식별하는 ID

URI의 스펙


  • URI 구문
    http://blog.example.com/entries/1
    • URI Scheme: http
      URI가 이용하는 프로토콜
    • 호스트명: blog.example.com
      도메인명 or IP
    • 패스: /entries/1
      경로 (호스트 안에서 오로지 하나의 리소스를 가르킴)

URI의 스펙


  • URI 구문
    http://yohei:pass@blog.example.com:8000/search?q=test&debug=true#n10
    • URI Scheme: http
    • 사용자 정보: yohei:pass
      리소스에 접근할 때 이용할 사용자 이름과 패스워드
    • 호스트명: blog.example.com
    • 포트번호: 8000
    • 패스: /search
    • 쿼리 파라미터: q=test&debug=true
    • URI 프래그먼트: #n
      URI가 가리키는 리소스 내부에서 더 세세한 부분을 가르킬때 이용

URI의 스펙


  • 절대 URI & 상대 URI
  • Base URI
    상대 URI의 기준이 되는  URI
  • Base URI를 명시적으로 지정하는 방법
    <html xmlns="http://www.w3.org/1999/xhtml:>
      <head>
        <title>test web page</title>
        <base href = "http://example.com/"/>
        ...
      </head>
      ...
    </html>

URI의 스펙


    • URI에서 사용할 수 있는 문자 
      알파벳: A-Za-z
      숫자: 0-9
      기호: -.~:@!$&'()
      그 외의 문자들은 %인코딩으로 처리됨
      (특별한 이유가 없는 한 UTF-8로 %인코딩 처리)
    • URI 길이 제한
      스펙상으로는 제한 없음 . 하지만 구현상으로는 제한이 존재(IE: 2,038byte)
    • 다양한 스키마
      j.mp/uri_schemes
      j.mp/uri_scheme_w

URI의 스펙


  • URI를 다룰때 특히 주의해야 할 것
    • 상대 URI해석
      클라이언트에서 상대 URI를 해석하기 위해선 번거러운 처리가 필요
      웹서비스와 웹 API를 구현할때는 가능한 절대 URI 사용
    • %인코딩 다루기
      가능한 UTF-8 이용

URI설계


  • 쿨(Cool)한 URI는 변하지 않는다
  • 변하지 않는 URI 만들기(URI설계지침)
    Cool URI = 심플한 URI
    • URI에 프로그래밍 언어에 의존적인 확장자를 이용하지 않는다(.pl, .rb, .do, .jsd 등)
    • URI에 구현에 의존적인 경로명을 이용하지 않는다.(cgi-bin, servlet 등)
    • URI에 프로그래밍 언어의 메서드명을 이용하지 않는다
    • URI에 세션 ID를 포함하지 않는다
    • URI는 해당 리소스를 표현하는 명사이다
  • URI를 변경해야 할 때
    Redirect...

URI설계


  • URI 설계 테크닉
    • 확장자로 표현을 지정
      http://example.com/2010/05/01/press.ko
      http://example.com/2010/05/01/press.en

    • 매트릭스 URI
      계층 구조를 표현하는 슬래시(/) 대신 
      세미콜론(;)이나 콤마(,)를 통해 매트릭스  URI로 표현
      http://example.com/map/lat-35.34523;lng=139.324451
      http://example.com/map/35.34523,139.324451


Web. 최소한 이것만은 알고 시작

By bbugguj

Web. 최소한 이것만은 알고 시작

  • 462