주요 내용과 느낀점 등을 정리하세요.
Ch1 웹
웹을 열림 하는 소프트웨어인 브라우저 모든 것은 브라우저를 통해 인터넷 저편에 있는 웹 서버와 통신을 하면서 실현된다.
웹 용도 3가지
웹사이트, ui, api
웹사이트: naver google gmarket 등등.
웹사이트 시스템 구성은 서버 혹은 서버 다수의 조합.
클라이언트는 웹 사이트 내부가 어떤 구성으로 하고 있는지 몰라도 된다.
웹 유저 인터페이스UI: 일반적으로 리모컨이나 디바이스 버튼으로 아닌 HTML로 작성해서 브라우저에 띄운 UI.
예) 사진을 누르면 다른 사이트에 들어갈 때… 그러기 위해서 사진에 HTML 링크를 생성해야 하는데 이게 웹 기술로 UI 적용했다고 한다.
위의 예시를 버튼이 아닌 사진에 HTML을 넣음으로써 UI를 만들었는데 이것을 응용했다고 한다. 그래서 이렇게 말고도 응용이 다양하게 할 수 있고 할 수 있는 이유는 HTML 작성이 용이하고 다양한 환경에서 브라우저를 사용할 수 있어서이다.
위의 UI랑 비교하자면 UI는 사람을 위한 인터페이스 즉 사람의 편의성을 위한것. API는 프로그램을 위한 인터페이스이다.
웹의 API를 웹 서비스라고도 한다. 예를 들어 보자면 특정한 사이트에서 회원 로그인 할 떄 타 사이트 아이디로 로그인하는 기능들.
웹을 지탱하는 기술
제일 기본적인 구조의 웹은 URI(Uniform Resource Identifier), HTTP(Hypertext Transfer Protocol), HTML(HyperText Markup Language)로 이루어져 있다.
URI는 리소스의 식별자이다. 즉 그것을 보기 위한 고유 아이디 이다. HTML 은 그 웹을 작성 할 때 쓰는 언어이다. HTTP는 통신 규약이다. 보내거나 가져올 때 지키는 포맷이다.
HTTP는 HTML로 통신하고 URI로 조작 대상을 지정하고 HTML의 링크는 URI가 이용한다
이러한 웹은 하이퍼미디어와 분산 시스템 구조를 쓴다.
하이퍼 미디어란 하이퍼택스트(클릭 시 다른 링크로 통한 웹 브라우저를 열어주는 기능) 을 연장해서 그림 영상 등을 눌러도 되는 기능을 이다.
웹 브라우저에서 이미지나 동영상에 링크가 있고 브라우저로 그것을 볼 수 있다. 설정만 했다면 글이나 그림이나 클릭하여 다른 웹 페이지에 갈수도 있고 페이지에 링크를 띄워서 다른 곳에서 가져 올수도 있다. 이러한 웹에서의 기능들을 하이퍼미디어 라고 한다.
분산 시스템 반대로 말하면 중앙 집중형 시스템. 분산 시스템이란 나눠서 처리하는 시스템이다. 분산 시스템을 이용하는 이유는 분산해서 처리 함으로써 더욱 효율적으로 작업하기 위해서다. 예를 들어서 컴퓨터 한대보단 다수로 돌려서 작업하는 게 빠르듯이. 웹도 서버를 분산해서 저장하고 처리한다. 전 세계에 서버를 배치하고 전 세계에서 접속 가능한 서버이다. 이러한 거대한 시스템은 웹 프로토콜이 심플해서 가능하다.
Ch 2 웹의 역사
웹 이전에 복잡한 하이퍼미디어들이 있었는데 그 복잡성 때문에 시장됬고 결국엔 현재의 웹이 생기고 남아 있다. 웹의 단방향성. 분산 시스템을 이용하기 위해서 각 서버를 제공하는 기능을 다른 서버와 클라이언트에서 호출 할 수 있어야 한다. RPC원격 서버에 실행 하는 프로그램을 클라이언트 쪽에서 호출 할 수 있는 기능. 그러나 문제들이 많아서 예를 들어서 성능 열화 데이터형 변환, 호환성, 부하 분산 등. 그래서 나온 게 다수를 상대하는 개방적인 시스템 인 웹이다. 다양한 브라우저와 디바이스로 한 웹 서비스를 이용할 수 있다.
예전엔 API 형식이 다양했고 대중성과 유일성을 위해서 싸움도 일어났지만 결국에 남은 건 rest 형식의 API다. 다른 것들은 너무나도 복잡하고 무거웠지만, rest 형식의 API는 가벼워서 google이나 amazon 등에서 rest 형식을 채용했습니다. 왜냐하면 그때 당시에 매쉬업(웹 API 가 제공하는 정보 조합 후 하나의 애플리케이션에 실현)의 가벼움이 요구되었고 rest는 그만큼 가벼웠다.
rest가 보급되면서 유저 인터페이스는 웹으로 통일되었다. 그 이후로도 모든 소프트웨어와 데이터들이 웹으로 구현되었다.
ch3 웹 아키텍처 스타일
REST는 웹의 아키텍처 스타일이다. 아키텍처 스타일은 패턴 혹은 설계 방식이라고도 한다. 그러므로 어떠한 것을 만들 때 아키텍처 스타일은 설계 지침서라고도 할 수 있다.
웹은 REST의 아키텍처 스타일과 동시에 클라이언트/서버를 가지고 있다.
클라이언트/서버 + 제약 = REST 아키텍처 이다.
REST는 웹 전체의 아키텍처 스타일 이기도 하고 웹 서비스와 웹 API의 아키텍처 스타일이기도 하다.
리소스는 웹상에 존재하는 이름을 가진 모든 정보이다. 리소스의 이름(URI)은 어떤 리소스를 다른 리소스와 구별하기 위한 것이다. 리소스의 이름을 통하여 프로그램은 그 정보에 접근할 수 있다. 이 접근 할 수 있는 성질을 addressability 라고 부른다.
한 개의 리소스는 복수의 URI 를 가질 수 있다.
서버와 클라이언트 사이에 주고받는 데이터를 resource representation이라고 부른다.
resource 에도 상태가 있다 시간에 따라 리소스 상태가 변하는 것. 예를 들어서 일기 예보의 정보가 달라질 때.
웹은 http라는 프로토콜을 이용해 클라이언트와 서버가 서로 통신하는 클라이언트/서버의 아키텍처 스타일을 씁니다. 그래서 다양한 클라이언트로 서버에 접속 할 수 있습니다.
거기에 스테이트리스 서버를 추가해야지 rest입니다. 클라이언트 상태를 서버에서 관리하지 않는다는 것입니다. 클라이언트와 서버로 분리해서 처리 할 수 있다는 이점이 있다. client stateless server 클라이언트는 유저 인터페이스 담당
서버는 데이터 스토리지 담당
스테이트레스를 지양해야 하는데 cookie를 쓰면서 스테이트레스를 위배된다. 스타일은 무조건 지켜야 되는 게 아니라 될 수 있으면 지켜야 되는 것이다.
캐시란 한번 가져온 리소스를 클라이언트 쪽에서 저장했다가 클라이언트가 불러오면 바로 불러올 수 있게 하는 기능이다. 이걸로 인해 통신량을 줄이고 효율적으로 만든다. client cache stateless server
유니폼 인터페이스는 URI 로 지정한 리소스에 대한 조작이 통일되고 한정적인 인터페이스로 수행하는 스타일이다. 이로써 아키텍처가 간결해짐으로써 효율적이고 범용적으로 웹을 만들 수 있다. Uniform Client Cache Stateless Server
계층화를 함으로써 로드 밸런서로 부하 분산과 프록시를 설치해 액세스를 제어 함으로써 클라이언트 서버 간으 통신을 효율적으로 처리함으로써 더욱 간결해지고 빨라진다. Uniform Layered Client Cache Stateless Server
코드 온 디맨드 는 코드를 서버에서 받아 클라이언트를 실행한다. Javascript나 flash가 예제가 될 수 있다. Uniform Layered Code on Demand Client Cache Stateless Server
이 모든 것을 더한 것이 rest가 된다. 그리고 리소스를 링크로 연결하여 하나의 애플리케이션을 구성하는 개념인 접속성을 갖고 유니폼 인터페이스로 인하여 업데이트, 버전업, 추가 등을 해도 호환성 문제가 발생하지 않는다.
Ch4 URI
URI는 리소스를 통일적으로 식별하는 ID이다. 이것을 사용하면 누구나 같은 것을 같은 방식으로 볼 수 있다. URI는 계층 구조를 갖고 있다. 그래서 절대 URI 경로, 상대 URI 경로 그리고 거기에 필요한 기본 URI 경로로 표현 할 수 있다.
절대 URI를 상대 URI로 표현할 때 기본 URI에 따라 상대 URI가 달라진다.
URI를 영어가 아닌 다른 나라 언어로 표현할 때 인코딩이라는 것을 해야 한다. 인코딩은 Unicode 로 하고 UTF의 포멧 방식으로 인코딩을 한다.
namespace 란 함수나 객체 안에 이름이 같은 게 있을 수 있음으로 그것을 어디에서 나왔는지를 추가해서 구분하는 것이다. 이것으로 URI 스키마를 구분 짓고 쓴다.
URI: Uniform Resource Identifier URN: Uniform Resource Name URL: Uniform Resource Locator 웹 URI = URN + URL 그러나 이제 URN은 거의 안 쓴다
CH 5 URI의 설계
URI는 변하지 않아야 한다. 변하지 않는 URI야말로 최고의 URI이다. 이것을 Cool URI라는 명칭이 있다. 이런 것을 만들기 위해서 프로그래밍 언어에 의존적인 부분을 배제해야 한다. 메서드명과 세션 ID를 배제해야 한다. 리소스를 명시하는 명사로 해야 한다.
심플 이즈 베스트. 이렇게 만듦으로써 사용성을 향상 한다. 기억하기 쉽고, 개발자가 아닌 보통 사람들도 사용하기 쉬운 게 좋은 URI고 Cool URI이다.
URI 를 변경 하고 싶을때 redirect 를 쓰면 된다.
콘텐트 네고시에이션에 의해 클라이언트의 언어 설정에 따라 자동으로 적합한 표현을 반환하는 기능이 있다.
URI의 설계의 방식 중 하나인 매트릭스 URI. URI를 ’/’ 로 계층을 표현할 수 있고 ’;’ 로 구분 할 때도 있다. 이를 매트릭스 URI 라고 쓴다.
URI는 클라이언트에 있어 불투명하다. URI가 클라이언트에 구성되어 있으면 서버 쪽에서 URI를 변경하는 순간 시스템이 작동하지 안 되는 밀 결합 상태가 된다.
고로 분리하고 심플하게 만드는 URI가 좋다.
“API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.” — 위키백과
TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP (인터넷 프로토콜)과 전송 조절 프로토콜인 TCP (전송 제어 프로토콜)로 이루어져 있다. IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다. (unreliable datagram service) TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 부르기도 한다. — 위키백과
웹 애플리케이션 서버(Web Application Server, 약자 WAS)는 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크이다.1 인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어(소프트웨어 엔진)으로 볼 수 있다. 웹 애플리케이션 서버는 동적 서버 콘텐츠를 수행하는 것으로 일반적인 웹 서버와 구별이 되며, 주로 데이터베이스 서버와 같이 수행이 된다. 한국에서는 일반적으로 “WAS” 또는 “WAS S/W”로 통칭하고 있으며 공공기관에서는 “웹 응용 서버”로 사용되고, 영어권에서는 “Application Server” (약자 AS)로 불린다. 웹 애플리케이션 서버는 대부분이 자바 기반으로 주로 자바 EE 표준을 수용하고 있으나, 자바 기반이지만 자바 EE 표준을 따르지 않는 제품과 .NET이나 Citrix 기반인 비 자바 계열도 존재한다. — 위키백과
공용 게이트웨이 인터페이스(영어: Common Gateway Interface; CGI)는 웹 서버 상에서 사용자 프로그램을 동작시키기 위한 조합이다. 존재하는 많은 웹 서버 프로그램은 CGI의 기능을 이용할 수 있다. 웹 서버 프로그램의 기능의 주체는 미리 준비된 정보를 이용자(클라이언트)의 요구에 응답해 보내는 것이다. 그 때문에 서버 프로그램 그룹에서는 정보를 그 장소에서 동적으로 생성하고 클라이언트에 송신하려하는 조합을 작성하는 것이 불가능했다. 서버 프로그램에서 다른 프로그램을 불러내고, 그 처리 결과를 클라이언트에 송신하는 방법이 고안되었다. 이를 실현하기 위한 서버 프로그램과 외부 프로그램과의 연계법을 정한 것이 CGI이다. — 위키백과
웹 서버(web server)는 다음의 두 가지 뜻 가운데 하나이다. 웹 서버 : 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램 웹 서버 (하드웨어) : 위에 언급한 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터 웹 서버(Web Server)는 HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전송해주는 서비스 프로그램을 말한다. — 위키백과