웹을 지탱하는 기술
in Computer Science on Network
야마모토 요헤이의 웹을 지탱하는 기술을 읽고 학습한 내용을 기록한 글
배달의 민족 이동욱 개발자님께서 추천하신 웹을 지탱하는 기술을 읽어보기로 하였다.
지금부터 책의 내용을 정리하면서 공부하려고 한다.
웹?
우리는 브라우저를 통해 인터넷에 존재하는 웹 서버와 통신을 하며 쇼핑을 하거나 뉴스를 읽을 수 있게 되었다.
웹은 크게 세가지로 나뉘어 진다.
웹사이트로써의 웹
- google.com이나 블로그, 소셜 네트워크처럼 다양한 서비스를 제공하는 웹 사이트로써의 웹
유저 인터페이스로써의 웹
- 브라우저를 통해 라우터나, TV, 공유기 등의 설정을 할때도 우리는 웹을 사용함
프로그램 API로써의 웹
- 프로그램을 위한 인터페이스인 API는 JSON같은 해석,처리하기 쉬운 데이터 타입으로 데이터를 주고받을 수 있음
웹을 지탱하는 기술
- HTTP
- URI
- HTML
웹은 HTTP,URI,HTML을 기반으로 한 시스템이다.
크게 하이퍼미디어 시스템과 분산 시스템이라는 두가지 측면으로 볼 수 있다.
하이퍼미디어
하이퍼미디어란 텍스트 이미지,음성,영상 등 다양한 미디어를 하이퍼 링크로 연결하여 구성한 시스템을 의미한다.
웹은 하이퍼미디어의 한 예이다.
HTML로 기술한 웹 페이지에는 다른 웹페이지와 삽입된 이미지,동영상으로의 링크가 포함된다.
사용자는 브라우저를 통해 자유롭게 이것을 따라갈 수 있다.
분산 시스템
한 대의 중앙 컴퓨터가 모든 것을 처리하는 형식을 ‘중앙 집중형 시스템’이라고 부른다.
이 의미와 반대로 복수의 컴퓨터를 조립하여 처리를 분산시키는 시스템을 ‘분산 시스템’이라고 부른다.
웹은 전 세계에 배치된 서버에 전 세계의 브라우저가 액세스하는 분산 시스템이다.
분산 시스템으로서의 웹의 특징은 프로토콜이 심플하다는 점이다.
프로토콜이 심플하기 때문에 방대한 시스템을 실현할 수 있게 되었다.
웹의 역사
웹 이전의 인터넷
- 최초의 인터넷은 1969년에 구축된 ARPANET
- 리얼타임으로 상대와 통신하는 TCP/IP 사용
웹 이전의 하이퍼 미디어
- 최초의 하이퍼미디어의 기원은 1945년의 Vannevar Bush가 발표한 Memex라는 정보검색 시스템에 대한 논문
- Memex에 영감을 받은 Ted Nelson은 Xanadu라는 하이퍼미디어를 구상하고 개발, 그러나 복잡성으로 인해 구현에는 실패함
- Apple에서 개발한 HyperCard는 최초의 실용적인 하이퍼미디어
- 웹 이전의 하이퍼미디어의 문제점은 복잡성
- 웹은 가장 성공한 하이퍼미디어, 그 이유는 최소한의 링크 기능만 갖추고 있기 때문에 단순함
웹 이전의 분산 시스템
- 1960년대에는 중앙 집중형 시스템을 주로 사용
- 1970년대 이후 복수의 컴퓨터를 조합하여 처리하는 분산 시스템이 등장
- RPC는 대표적인 분산 시스템을 실현하기 위한 기술중 하나
- RPC를 이용하면 원격 서버에 실행하고 있는 프로그램을 클라이언트 쪽에서 호출 가능
- CORBA와 DCOM은 오브젝트의 메서드를 정의하고 구현은 네트워크를 경우해 Serialize된 메시지를 교환하는 점에서는 RPC와 같았으나 매우 복잡한 스펙을 갖고 있음
웹 이전의 분산 시스템의 문제점
- 성능열화의 문제
- 네트워크를 경유한 함수의 호출은 동일 프로세스 내에서 함수를 호출하는데에 비해 몇배나 시간이 걸림
- 데이터형 변화의 문제
- 인터페이스 버전업 시 호환성 문제
- 부하 분산의 문제
- RPC 기반의 시스템은 서버 상에 클라이언트의 어플리케이션 상태를 갖고 있다. 이로 인해 다수의 서버에서 부하를 분산하는 것이 어려워짐
웹의 탄생
- 최초의 웹 브라우저는 1993년 일리노이 대학의 NSCA가 발표한 ‘Mosaic’
- Mosaic으로 인해 웹의 보급을 단번에 앞당길 수 있었음
- 웹에서의 하이퍼미디어는 심플한 단방향 링크기 때문에 사용자 입장에서는 이해가기 쉽고 구현이 간단하기 때문에 전 세계로 웹이 보급 될 수 있었음
- RPC와는 반대로 웹은 불특정 다수의 유저들이 웹 서비스에 접근할 수 있도록 HTTP라는 심플한 프로토콜로 고정함으로써 분산시스템으로써 사용될 수 있었음
웹의 표준화
- 웹을 구성하는 기술 세가지 HTTP URI HTML에 대한 표준화 진행
- 웹 아키텍처를 결정한 중요한 사건은 REST의 탄생
- REST를 만든 사람은 Roy Fielding
- 그는 HTTP를 활용한 대규모 시스템을 위한 아키텍처 스타일을 REST(Representational State Transfer)라 이름 붙이고 박사학위 논문으로 제출
- HTML 뿐 아니라 다양한 하이퍼미디어 포맷들이 탄생
- 웹 상의 하이퍼 미디어 포멧의 defacto standard(사실상 표준)가 된 것은 JSON
SOAP VS REST
- SOAP는 서비스 별로 별도의 프로토콜을 정의하여 사용해야 했고 각 벤더마다 제각기 정의하게 되면서 표준화가 정립되지 않게 되었음
- 로이 필딩은 REST의 이론을 바탕으로 SOAP를 부정하고 웹 아키텍처로 REST를 권장
- REST는 간결함을 장점으로 내세우며 Google과 Amazon같은 기업들이 사용하기 시작하면서 시장에 퍼짐
- SOAP의 패인은 두가지
- 기술적 이유
- SOAP는 RPC가 갖고 있던 기술적 문제를 그대로 갖고 있음
- 벤더 간 인터페이스 호환성 결여
- 복잡한 프로토콜 스택
- 네트워크를 통한 인터페이스 호출에 의한 오버헤드
- 정치적 이유
- SOAP의 표준화 정책이 제대로 이루어지지 못했음
- 기술적 이유
REST란 무엇인가
- REST는 웹의 아키텍처 스타일이자 네트워크 아키텍처 스타일
- 아키텍처 스타일은 복수의 아키텍처의 공통적 성질,양식,규정 혹은 독특한 방식을 가르키는 말
- 아키텍처 스타일의 예로는 MVC,Pipe and Filter, Event System등이 있다.
- REST는 리소스 중심으로 행위를 표현
- 리소스의 표현은 URI
REST의 특징
- 클라이언트/서버 구조
- 클라이언트/서버의 장점은 클라이언트와 서버로 분리하여 처리가 가능하다는 점
- 클라이언트를 멀티 플랫폼으로 구성 가능
- Stateless Server
- 서버가 클라이언트의 상태를 관리하지 않음
- HTTP를 Stateful하게 만드는 것은 Cookie의 사용
- Cache
- 캐시를 사용함으로써 서버와 클라이언트 사이의 통신량을 줄여 네트워크 대역 이용과 처리시간 단축 가능
- Uniform Interface
- URI로 지정한 리소스에 대한 조작을 통일
- HTTP에는 메서드 수가 정해져 있고 이는 인터페이스의 유연성에 제약을 줌으로써 전체 아키텍처를 간결하게 만듦
- 계층화 시스템
- 시스템 계층화하기 쉬움
- 서버/클라이언트 사이에 로드밸런서를 설치해 부하를 분산시키거나 프록시를 설치하여 액세스를 제어할 수 있음
- 시스템 계층화하기 쉬움
- Code On Demand
- 프로그램 코드를 서버로부터 다운받아 클라이언트에서 실행하는 아키텍처 스타일
6가지 특성이 REST 아키텍처 스타일의 특징