Zero to Hero
Published 2021. 1. 23. 18:48
웹을 지탱하는 기술 03 Review

쿨한 URI는 변하지 않는다.

1. 프로그래밍 언어에 의존적인 확장자와 경로를 포함하지 않는다.

. jsp ,. servlet 등 서버 구현 언어나 기술 스택이 변경되면 해당 URI를 사용할 수 없게 된다.

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

. do 나 메서드명이 들어가 있으면 시스템 리팩터링 시 메서드명이 변경되면 바로 URI가 바뀌게 된다.

또 세션 ID가 URI에 있으면 URI는 매번 변경되기 때문에 바람직하지 않다.

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

HTTP는 메서드로 URI를 다룬다. 즉 메서드가 동사, URI가 명사인 관계이다. 그러므로 URI는 가능하면 명사로 설계해야 한다. 이 말은 URI에 동사가 들어가는 것을 지양하라는 말과 같다.

요약

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

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

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

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

5. URI는 해당 리소스를 표현하는 명사로 한다.

6. URI는 가능하면 짧고 심플하게 한다.

 

Content Negotiation

GET /2020/01/01/press HTTP1.1
Host: sample.com
Accept-Language:ko,en_us;q=0.7;en;q=0.3

Accept-Language 헤더에 선호하는 언어 순서대로 표시해서 요청을 보낸다. q값이 높을수록 우선순위가 높음.

매트릭스 URI

계층적으로 관리하기 어려운 정보들을 다룰 때 사용한다. 파라미터를 세미콜론, 콤마를 이용해 구분한다.

http://sample.com/map/25.3423423/139.2342142
http://sample.com/map/lat=25.3423423;lng=139.2342142
http://sample.com/map/25.3423423, 139.2342142

지도의 위도, 경도를 다루는 URI의 경우 1번은 현실적으로 너무 많은 계층구조를 가지게 된다.

이런 경우 세미콜론이나 콤마를 사용해 매트릭스 URI로 표현한다.

 

 

Stateful vs Stateless

stateful

서버가 클라이언트의 애플리케이션 상태(세션)를 기억하는 것

클라이언트의 수가 증가함에 따라 어려워진다. 서버를 증설해도 서버 간의 동기화는 어떻게 할 것이며, 어떤 서버를 메인으로 하고 동기화도 서버 대수가 늘어나면 현실적으로 어렵고 데이터를 동기화하는데 발생하는 오버헤드 또한 무시할 수 없는 상태가 된다.

 

즉 stateful 한 아키텍처는 클라이언트 수가 증가했을 경우에 scale out 하기 어렵다.

 

stateless

클라이언트가 요청 메시지에 필요한 정보를 모두 포함시키는 Self Descriptive Message(자기 기술적 메시지)를 보내는 방식. 서버 대신 클라이언트가 자신의 애플리케이션 상태를 기억하고 모든 요청을 기술적 메시지로 송신한다.

 

서버는 애플리케이션 상태를 기억할 필요가 없기 때문에 구조가 단순해지고 요청 자체를 처리하는데 집중할 수 있다.

즉 scale out이 간단해진다.

 

문제점

 

1. 송신할 데이터의 양이 많아진다.

2. 인증 등 서버에 부하가 걸리는 처리를 반복한다.

 

일반적으로 인증은 데이터베이스 액세스가 필요한데 이는 무거운 처리이기 때문에 이것을 매번 반복하면 퍼포먼스가 떨어진다.

 

3. 네트워크 문제가 발생했을 때 문제가 발생한 요청이 처리되었는지의 유무를 알 수 없다.

 

 

웹을 지탱하는 기술
국내도서
저자 : 야마모토 요헤이(Yamamoto Yohei) / 김성훈역
출판 : 멘토르출판사 2011.05.30
상세보기

'Review' 카테고리의 다른 글

웹을 지탱하는 기술 05  (0) 2021.01.23
웹을 지탱하는 기술 04  (0) 2021.01.23
웹을 지탱하는 기술 02  (0) 2021.01.23
웹을 지탱하는 기술 01  (0) 2021.01.23
코딩을 지탱하는 기술 04  (0) 2021.01.23
profile

Zero to Hero

@Doljae

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!