[Review] 웹을 지탱하는 기술 책 정리



서버/인프라를 지탱하는 기술 책을 보고 정리한 글입니다.

  • URI와 문자
    • 알파벳 : A-Za-z
    • 숫자 : 0-9
    • 기호 : -.~:@!$&’()
    • URI 스펙에서 허용하는 문자 이외의 것을 입력하기 위해서는 %인코딩으로 그 문자를 인코딩해야 한다. (%인코딩의 문자 인코딩은 UTF-8을 사용해야한다.)
  • URI 설계지침
    • URI에 프로그래밍 언어에 의존적인 확장자를 이용하지 않는다.(.do)
    • URI에 구현에 의존적인 경로명을 이용하지 않는다 (servlet)
    • URI 프로그래밍 언어의 매서드명을 이용하지 않는다.
    • URI에 세션ID를 포함하지 않는다.
    • URI는 해당 리소스를 표현하는 명사이다.
  • 조건부 요청
    • GET(IF-Modified-Since), PUT(IF-Unmodified-Since)
  • 멱등성과 안전성
    • GET, HEAD : 멱등이고 안전하다
    • PUT, DELETE : 멱득이지만 안전하지 않다.
    • POST : 멱등이지도 안전하지도 않다.
  • 청크 전송 - 바디를 분할하여 전송한다.
    • transfer-encoding: chunked
  • Basic 인증
    • Base64 인코딩 (데이터를 64종류의 문자열만으로 표현하는 인코딩 방식)
  • Digest 인증
    • 해시함수(MD5)를 적용한 해시값을 을 통한 인코딩방식
  • 트랜잭션 (일괄삭제 등)
    1. 트랜잭션 리소스의 도입(1번삭제 요청, 2번삭제 요청, 커밋요청 순으로 전송)
    2. 일괄처리의 트랜잭션화 (한번에 1,2 을 삭제하도록 전송)
    3. 상위리소스의 조작을 통해 하위 리소스를 조작하는 방법 (/entry/1 삭제하면 /entry/1/comment, /entry/2/comment을 동시에 삭제 하도록 보장하도록 설계)
  • 배타제어
    1.비관적 잠금
    • 사용자를 신요하지 못하고, 경합이 발생하지 않도록 하는 배타제어 방법
    • LOCK/UNLOCK 방법
      배타잠금 : 한 사람의 사용자만 편집할 수 있도록 한다.
      공유잠금 :자신이 리소스를 편집하려고 한다는 뜻을 표명하여 경합 발생 하지 않게 한다.
    • 독자적인 잠금리소스를 사용
      Lock에 해당하는 기능을 웹서비스에 내장합니다.
      시간과 잠금여부 파라미터로 전송, 서버에서 가능한지 성공한지 처리
      1. 낙관적 잠금
        항상 같은 문서를 여러 사람이 편집하는 경우는 거의 없다는 전제하에서 통상적인 편집에서 문서를 잠그지 않고 경합이 일어 났을 때 대처하는 구조
      • 조건부 PUT / 조건부 DELETE 메서드 Last-modified Etag get if-modified-since if-none-match put/delete if-unmodified-since if-match

      • 경합을 일으킨 사용자에게 확인한 후, 갱신 또는 삭제를 한다.

      • 경합을 일으킨 데이터를 경합 리소스로서 별도의 리소스로 보존한다(put인 경우만)
      • 경합을 일으킨 사용자에게 변경점을 전하고 병합을 촉구한다(put인 경우만)