티스토리 뷰
**웹 개발자를 위한 웹을 지탱하는 기술 - 야모모토 요헤이 저 - 에서 발췌
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의 설계에 있어서
가장 중요시해야 할 부분!
'Web & Networks' 카테고리의 다른 글
SPA와 SPA 라우팅 원리 (10) | 2017.05.05 |
---|---|
[웹을 지탱하는 기술] URI 스펙 (0) | 2015.08.17 |
[웹을 지탱하는 기술] REST 아키텍쳐 스타일 구성 (0) | 2015.08.15 |
HTTP Protocol / Cookie 정리 (0) | 2014.06.28 |
- Total
- Today
- Yesterday
- 사누르
- 실수노트
- 웹
- container
- 웹을 지탱하는 기술
- spring
- AWSKRUG
- html
- javascript
- ecma6
- springboot
- sanur
- spring boot
- 객체지향
- 발리
- 개발자
- 도커
- 독후감
- 컨테이너
- S68
- ChatGPT
- rest
- hands-on
- Docker
- 한달살기
- 회고
- Clean code
- ES6
- AWS
- Bali
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |