웹을 지탱하는 기술

kingkk31
모이면 뭔가 하겠지(MOMU)
4 min readJan 11, 2016

‘웹 개발자를 위한 웹을 지탱하는 기술’

웹의 전반적인 모든 내용을 담은 책으로 오늘자 세미나 주제였던 책이었습니다. 책을 빌리자마자 주말내내 읽었던 책인데…어째 이해가 잘 되지않더군요…

웹은 현대에서 매우 중요한 역할을 하고 있으며 검색, 쇼핑, 게임, SNS 등 여러 분야에서 활용되고 있습니다. 웹의 용도를 크게 세 가지로 나누면 포털 사이트 같은 웹 사이트, 유저 인터페이스, 프로그램을 위한 API의 역할로 나눠 볼 수 있습니다.

이러한 웹을 지탱하는 기술로는 HTTP, URI, HTML가 있습니다. 정보적으로는 하이퍼 미디어와 분산 시스템으로 나눌 수 있습니다.

REST (다음 세미나 과제)

웹은 분산 하이퍼 미디어 시스템입니다. REST는 이러한 시스템을 위한 아키텍쳐 스타일로 필딩에 의해 소개되습니다. HTTP 프로토콜을 사용하며 URI을 다루는 리소스 중심의 모습을 보입니다.

REST는 클라이언트-서버 시스템에서 여러가지 다른 제약들이 붙어 생겨났스며 그 6가지 제한으로는

  1. 클라이언트-서버 : 유저 인터페이스와 처리를 분리
  2. 스테이트리스 : 서버측에서 애플리케이션의 상태를 가지지 않음
  3. 캐시 : 서버로부터 받은 데이터를 재사용하여 통신횟수와 양 감소
  4. 유니폼 인터페이스 : 인터페이스를 통일하여 고정
  5. 계층화 : 시스템을 계층별로 분리
  6. 코드 온 디맨드 : 클라이언트가 코드를 서버에서 다운로드 받아 실행

이 있습니다.

REST의 장점으로는 URI을 사용해 링크와 링크로 연결되어 단순하고 스테이트리스로 구현되어 서버가 부담을 가지지 않고 가벼우며 HTTP의 기본 메소드만을 사용하기 때문에 간단하고 직관적이며 호환성이 높습니다. 이것이 REST가 웹에서 선택받은 이유입니다.

단점으로는 표준이 없기 때문에 관리에 어려움이 있습니다.

URI

리소스를 가르키는 이름 같은 것. 리소스는 웹상에서 존재하는 정보로 여러 형태를 가질 수 있습니다. 리소스는 여러개의 URI를 가질 수 있으며 링크가 끊기는 것은 동작을 하지 못하는 것으로 매우 치명적이기 때문에 변하지 않고 간단한 URI일수록 좋은 URI로 평가받습니다. 만약 변경한다면 Redirect로 변경 시키는 것이 좋습니다. 종류론은 절대 URI와 상대 URI가 있습니다.

URI를 구현할 때는 주의 사항이 있습니다.

  1. 프로그래밍 언어에 의존적인 확장자를 사용하면 안됩니다. (구현에 의존하지 않는 확장자는 좋습니다.)
  2. 구현에 의존적인 경로면을 사용하면 안됩니다.
  3. 프로그래밍 언어의 매소드 명을 이용하면 안됩니다.
  4. 세션 ID를 포함하면 안됩니다.
  5. 리소스는 명사이므로 반드시 명사형이어야 합니다.

스펙상으로는 길이제한이 없으나 구현상에서는 존재합니다.

HTTP

웹에서 사용하고 있는 통신 프로토콜. 하이퍼 텍스트뿐만 아니라 각 종 데이터를 전송할 수 있습니다.

동기형 프로토콜로 클라이언트가 요청 메세지를 보내면 서버가 응답 메세지를 보낼 때 까지 기다립니다. 요청 메세지와 응답 메세지를 HTTP 메세지라고 합니다.

HTTP 메세지

요청 메세지는 요청라인과 헤더로 이루어져 있으며 바디가 존재하는 경우도 있습니다. 요청라인은 최소 ‘메소드/URI/프로토콜’로 이루어져 있으며 절대 URI인 경우는 HOST 헤더를 생략 할 수 있습니다. 헤더는 메세지의 메타 데이터를 담고 있으며 여러개일 수 있습니다.

응답 메세지는 요청라인과 헤더, 바디로 이루어져 있습니다. 요청라인은 ‘프로토콜 버전 스테이터스코드 텍스트구문’으로 이루어져 있습니다. 스테이터스 코드는 클라이언트의 요청에 따른 결과의 상태를 세 자리 숫자로 나타냅니다. 우리가 흔히 보는 “404 Not Founded”에서의 ‘404’도 스테이터스 코드입니다. 헤더는 메타 데이터를 표현하고 여러개가 될 수 있으며 미디어 타입과 문자 인코딩 타입 등을 담고 있습니다. 바디에는 실제 문서 데이터가 포함됩니다.

HTTP 메소드는 8개가 있으며 그 중 많이 사용하는 메소드는 GET, POST, PUT, DELETE 4개입니다.

GET : 지정한 URI의 정보를 가져옵니다. 가장 이용빈도가 높습니다.

POST : 리소스를 생성합니다. 생성된 리소스는 Location에 리턴되며 클라이언트가 직접 경로를 지정할 수 없습니다. 생성 성공 시 스테이터스 코드로 201이 보내집니다. PUT/DELETE를 대신 할 수 있는 만능에 가까운 메소드입니다.

PUT : 리소스를 갱신하거나 생성합니다. 리소스 생성시에 클라이언트는 경로를 알고 있기 때문에 Location이 존재하지 않습니다. 갱신과 생성의 구분에 주의하여 사용해야 합니다.

DELETE : 리소스를 삭제합니다.

가장 많이 이용되는 메소드는 GET과 POST입니다. (HTML Form에서 지정할 수 있는 메소드가 이 둘 밖에 없기 때문입니다.)

POST로 PUT/DELETE를 대신하는 방법으로는 _method와 X-HTTP-Method-Override가 있습니다.

이 뒷부분부터는 이해를 제대로 하지 못했습니다;; 다시 공부하여 추후에 수정하도록 하겠습니다.

--

--