웹이란 무엇인가?
- 웹의 용도
- 웹 사이트 (예: 포털/쇼핑/검색 사이트 및 블로그 등등)
- 유저 인터페이스로서의 웹 (예: 브라우저)
- 프로그램을 위한 API로서의 웹 (예: 웹 서비스)
- 웹을 지탱하는 기술
- HTTP, URI, HTML
- 하이퍼미디어 - 비선형
- 분산 시스템
웹의 역사
- 웹 이전의 인터넷
- ARPANET
- 미국 내 대학과 연구기관 사이를 고속 회선으로 접속
- TCP/IP, UUCP 방식
- 웹 이전의 하이퍼미디어
- Memex
- 하이퍼미디어의 기원
- 전기적으로 접속한 책과 파일을 서로 링크하고 링크를 따라서 차례로 표시하는 구상
- 당시 하이퍼미디어라는 단어가 없었지만 후에 많은 연구자들에게 영향을 끼침
- Xanadu
- HyperCard
- 네트워크를 통해 데이터를 주고받는 기능 없었지만, ‘카드’라고 불리는 문서를 단위로 상호 링크하고, 스크립트 언어 HyperTalk에 의한 프로그램을 실행할 수 있는 말하자면, Stand-alone 방식의 웹 서비스
- 웹 이전의 하이퍼미디어의 문제점
- 예전 하이퍼미디어 개발자 시각으로 본 현재 웹 하이퍼미디어의 문제점
- 단방향 링크
- 링크 끊어질 가능성 있음
- 버전 관리와 트랜스클루전 기능 없음
- 웹 이전의 분산 시스템
- 웹 이전의 분산 시스템의 문제점
- 성능열화의 문제
- 데이터형 변환의 문제
- 인터페이스 버전업 시 호환성 문제
- 부하 분산의 문제
- 웹의 탄생
- 분산정보관리 시스템(Tim Berners-Lee) -> Mosaic(NCSA)
- 하이퍼미디어로서의 웹의 특징
- 하이퍼미디어로서의 웹의 장점
- 인터넷을 이용하기 때문에 불특정 다수의 정보를 서로 링크할 수 있음
- 시스템을 대규모화하기 쉬움
- 하이퍼미디어로서의 웹의 단점
- 정보의 집중적인 관리가 어려움
- 링크가 끊어지기 쉬움
- 분산 시스템으로서의 웹
- 기존 RPC는 폐쇄된 네트워크 환경에서 미리 상정한 숫자와 종류의 클라이언트를 상대로 서비스를 제공한 반면 웹에서는 통일되어 있지 않는 각 유저의 컴퓨터 환경과 다양한 브라우저를 클라이언트와 서버 간의 인터페이스를 HTTP로 고정함으로서 접근 가능
- 웹 표준화
- 급속도로 HTTP와 URI와 HTML이 보급되어 W3C에서 표준화 작업을 함
- REST 아키텍처 스타일 탄생
- 다양한 하이퍼미디어 포맷의 탄생
- HTML, microformats, RRS, Atom, XML, JSON
- 웹 API
REST 웹의 아키텍처 스타일
- REST란 웹의 아키텍처 스타일(네트워크 시스템의 아키텍처 스타일)
- REST 스타일
- 클라이언트/서버 : Request & Response
- 스테이트리스 서버 : 클라이언트의 어플리케이션 상태를 서버에서 관리 X
- 캐시 : 서버에서 가져온 리소스를 클라이언트에서 재활용
- 유니폼 인터페이스 : URI에 대한 요청이 통일되고 한정적인 인터페이스
- 계층화 시스템 : Load Balancer 또는 Proxy로 분산
- 코드 온 디맨드 : 서버에서 클라이언트로 코드를 가져온 후 해석
- Restful이란 REST의 제약을 따르고 있고, REST다운 것을 뜻함
URI의 스펙
- URI는 Uniform Resource Identifier의 약자
- URI의 구문
- URI Scheme : HTTP
- host name : www.example.com (일의성이여야함)
- path : /entries/1
- URI 지정 방법
- 절대 URI - 모든 전체 경로를 다 기술한 URI 표현 (예: http://www.example.com/entries/1)
- 상대 URI - 전체 경로 중 Base URI로부터 상대적 경로 표현 (예: /entries/1)
- Base URI - HTML 문서 내
Head
요소 안에 Base
요소에 표시
- URI의 길이는 스펙으로는 제한이 없지만 구현상 제한
URI 설계
- Cool URI
- 의존적인 확장자 포함 X (*.pl, *.jsp, *.php 등등)
- 의존적인 경로 포함 X (Servlet 등등)
- 메서드명 & 세션ID 포함 X
- 명사로 리소스 표현
- Content Negotiation
- 매트릭스 URI
HTTP
- REST의 중요 특성을 갖고 있는 프로토콜
- HTTP는 TCP/IP를 기반으로 함
- 계층형 프로토콜
- 애플리케이션 계층 (HTTP, NTP, SSH, SMTP, DNS)
- 트랜스포트 계층 (UDP, TCP)
- 인터넷 계층 (IP; Packet)
- 네트워크 인터페이스 계층 (이더넷)
- HTTP 버전은 0.9/1.0/1.1/2.0
- HTTP는 동기형 프로토콜
- 클라이언트에서 일어나는 일
- 요청 메시지 구축
- 요청 메시지 송신
- 응답이 돌아올 때까지 대기
- 응답 메시지 수신
- 응답 메시지 해석
- 클라이언트의 목적을 달성하기 위해 필요한 처리
- 서버에서 일어나는 일
- 요청을 대기
- 요청 메시지 수신
- 요청 메시지 해석
- 적절한 어플리케이션 프로그램 처리 위임
- 어플리케이션 프로그램으로부터 결과 취득
- 응답 메시지 구축
- 응답 메시지 송신
- HTTP 메시지 구성
- 요청 메시지
- 요청라인 (메서드, 요청 URI, 프로토콜 버전)
- 헤더 (메타 데이터)
- 바디
- 응답 메시지
- 스테이트스 라인 (프로토콜 버전, Status Code, Text)
- 헤더
- 바디
- HTTP는 스테이트리스한 프로토콜 (클라이언트 어플리케이션 상태 보존 X)
- 어플리케이션 상태의 다른 이름 : Session State
- 스테이트풀한 프로토콜 : FTP
- 스테이트풀의 결점
- 접속 클라이언트가 많아질수록 저장하고 있는 데이터가 많아지기 때문에 프로그램이 무거워짐
- 확장이 어려움
- 스테이트리스의 이점
- 스테이트리스의 결점
HTTP 메서드
- 메서드 종류 (GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE, CONNECT)
- 조건부 요청
- 멱등성과 안전성
Status Code
- 1xx : 처리중
- 2xx : 성공
- 3xx : 리다이렉트
- 4xx : 클라이언트 에러
- 5xx : 서버 에러
- Date & Expires
- MIME media type
- Content-Language
- Content Negotiation
- Accept
- Accept-Charset
- Accept-Language
- Content-Length & chuncked
- WWW-Authenticate
- cache
- Pragma
- Expires
- Cache Control
- etc….
읽기 전용 웹 설계
- OOL -> OOD 설계 -> Use Case/ 클래스 구조 결정
- RDBMS -> ERD
- ROA
- 웹 서비스 제공 데이터 특정
- 데이터를 리소스로 나누기
- 리소스에 URI 부여
- 리소스의 표현 설계
- 리소스끼리 연결
- 표준 코스 검토
- 에러 검토
쓰기 가능 웹 설계
리소스 설계