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