[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번삭제 요청, 2번삭제 요청, 커밋요청 순으로 전송)
- 일괄처리의 트랜잭션화 (한번에 1,2 을 삭제하도록 전송)
- 상위리소스의 조작을 통해 하위 리소스를 조작하는 방법 (/entry/1 삭제하면 /entry/1/comment, /entry/2/comment을 동시에 삭제 하도록 보장하도록 설계)
- 배타제어
1.비관적 잠금- 사용자를 신요하지 못하고, 경합이 발생하지 않도록 하는 배타제어 방법
- LOCK/UNLOCK 방법
배타잠금 : 한 사람의 사용자만 편집할 수 있도록 한다.
공유잠금 :자신이 리소스를 편집하려고 한다는 뜻을 표명하여 경합 발생 하지 않게 한다. - 독자적인 잠금리소스를 사용
Lock에 해당하는 기능을 웹서비스에 내장합니다.
시간과 잠금여부 파라미터로 전송, 서버에서 가능한지 성공한지 처리- 낙관적 잠금
항상 같은 문서를 여러 사람이 편집하는 경우는 거의 없다는 전제하에서 통상적인 편집에서 문서를 잠그지 않고 경합이 일어 났을 때 대처하는 구조
조건부 PUT / 조건부 DELETE 메서드 Last-modified Etag get if-modified-since if-none-match put/delete if-unmodified-since if-match
경합을 일으킨 사용자에게 확인한 후, 갱신 또는 삭제를 한다.
- 경합을 일으킨 데이터를 경합 리소스로서 별도의 리소스로 보존한다(put인 경우만)
- 경합을 일으킨 사용자에게 변경점을 전하고 병합을 촉구한다(put인 경우만)
- 낙관적 잠금
