티스토리 뷰

반응형

**웹 개발자를 위한 웹을 지탱하는 기술 - 야모모토 요헤이 저 - 에서 발췌

URI 설계


01. 쿨한 URI은 변하지 않는다.

- 초기 웹 페이지는 URI가 변하는 것이 일상다반사였다.

- 고생해서 모아둔 링크들이 1년 후에는 절반 이상 연결되지 않았다.

- 웹은 리소스에서 다른 리소스로 연결되는 링크가 있는 하이퍼미디어 시스템이기 때문에 링크가 끊긴다는 것은 큰 문제이다.

- 그래서 팀 버너스-리는 URI는 변하지 않아야한다고 주장했다.


02. 쿨한 URI 만들기

1) 프로그래밍 언어나 구현 (프레임워크 등)에 의존적인 확장자와 경로를 포함하지 않는다.

ex) http://example.com/cgi-bin/login.pl 

- cgi의 쇠퇴

- peal 언어로 작성됨. 만약 똑같은 서비스를 다른 언어로 재구현 한다면?

ex) http://example.com/servlet/LoginServlet

- java Servlet

- 파일명의 시작을 대문자로 하는 것. 다른 언어에서는 소문자로 시작하기도 한다.


2) 메서드명과 세션ID를 포함하지 않는다.

ex) http://example.com/Login.do?action=showPage

- Struts의 do 확장자.

- 메서드명이 들어간다는 것 -> 시스템 리펙토링 시 URI가 변경됨

ex) http://example.com/home.jsp?jsessionid=12345678

- 세션 아이디는 로그인 할 때마다 바뀜


3) URI는 리소스를 표현하는 명사로 한다.

ex) http://example.com/sample/people/show/123

- HTTP에서는 리소스에 대해서 특정 HTTP 메서드만을 적용

- 어떤 리소스를 취득할지 갱신할지는 URI로 지정하는 것이 아니라, URI에 적용하는 HTTP 메서드로 결정

- URI와 HTTP 메서드의 관계는 명사와 동사의 관계 (동사와 목적어)

- ** 그래서 URI는 전체적으로 명사가 되어야 한다.


** 구현 의존적인 URI를 생성하는 프레임 워크의 경우 Apache 모듈의 mod_rewrite 등을 사용해 사용자에게 보여주는 URI와 내부적으로 이용하는 URI를 나눌 필요가 있음. 


[정리]

URI에 프로그래밍 언어에 의존적인 확장자를 이용하지 않는다.

URI에 구현에 의존적인 경로명을 이용하지 않는다.

URI에 프로그래밍 언어의 메서드명을 이용하지 않는다.

URI에 세션ID를 포함하지 않는다.

URI는 해당 리소스를 표현하는 명사이다.


--> 그렇게 만든 심플한 URI는 간단하기 때문에 사용성이 향상된다.


03. 부득이하게 URI를 변경할 때

- 어떻게든 URI를 변경해야할 경우에는 REDIRECT를 해야한다.

- REDIRECT 응답

HTTP/1.1 301 Moved permanently

Location: http://example.com/new

- 구현은 보통 HTTP 서버에서 준비

<jsp 예시>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
response.setStatus(301);
response.setHeader( "Location", "http://www.example.com/new);
response.setHeader( "Connection", "close" );
%>


04. URI 설계 테크닉

1) 확장자로 표현을 지정한다.

ex) 언어를 지정하는 확장자

http://example.com/2010/05/01/press.ko

http://example.com/2010/05/01/press.en

2) 메트릭스 URI

- URI는 슬래시 (/) 를 이용하여 계층 표현 가능

ex) http://example.com/2010/05/01/

- 지도 서비스의 경우 계층 정보보다 계층이 같은 복수의 파라미터가 필요

- 팀 버너스 리는 각각의 파라미터를 세미콜론(;)으로 구분해 리소스를 표현하는 것을 제안

ex) http://example.com/map/lat=35.12041024;lng=123.1231243

- 이 방식은 표준화되지 못했지만, 편리하여 자주 이용

ex) http://example.com/map/35.12041024,123.1231243

- 보통 세미콜론은 순서가 의미없는 경우, 콤마는 순사가 의미를 가지지 못하는 경우 사용


05. URI의 불투명성

http://example.com/2010/05/01/press.ko

http://example.com/2010/05/01/press.en

- 위와 같은 URI가 있다고 하더라도, press.fr, press.jp 가 있으란 법은 없다.

- 이렇게 URI 를 클라이언트 쪽에서 구성하거나 확장자로 리소스의 내용을 추단하거나 할 수 없는 특성을
    'URI는 클라이언트에 있어 불투명(Opaque)하다' 라고 합니다. 


06. URI의 중요성

- URI는 리소스의 이름이다.

- URI는 수명이 길다. (길어야 한다.)

- URI는 브라우저가 어드레스 란에 표시한다.


**** URI는 웹 서비스와 웹 API의 설계에 있어서 

가장 중요시해야 할 부분!


반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함