큐와 비동기 API · 소비자 멱등성 · 퀴즈
퀴즈: 멱등성
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
'정확히 한 번'을 실무에서 달성하는 방법은?
- 브로커의 exactly-once 옵션을 켠다
- 최대 한 번 전달로 바꾼다
- 2PC 를 쓴다
- 적어도 한 번 전달 + 수신 측의 중복 제거
HTTP 메서드 중 멱등하지 않은 것은?
- PUT — 보낸 표현으로 리소스를 통째로 덮어쓰기
- DELETE — 지정한 리소스를 지우기
- POST — 컬렉션에 새 리소스를 만들기
- GET — 리소스의 현재 표현을 읽기
멱등성 키 처리에서 '조회 후 없으면 저장' 구현의 문제는?
- 왕복이 두 번이라 응답이 느려진다
- 동시 도착한 두 요청이 둘 다 '처음 보는 키'로 판단해 이중 처리된다
- 키마다 조회 결과를 들고 있어야 해 메모리를 많이 쓴다
- 저장할 때 만료를 못 걸어 키가 영원히 남는다
같은 멱등성 키인데 요청 본문이 다르면?
- 새 요청으로 처리한다
- 첫 응답을 그대로 돌려준다
- 422 등으로 거부한다
- 본문을 병합한다
멱등성 키에 만료를 두는 이유는?
- 오래된 키가 유출되면 재사용될 수 있어서
- 만료가 있어야 중복 판정이 정확해져서
- 멱등성 규격이 TTL 을 필수로 정해 두어서
- 저장소가 무한히 자라는 것을 막기 위해 — 보통 24시간
확정적 실패(잔액 부족)와 일시적 실패(DB 타임아웃)를 멱등성 키에서 다르게 다루는 이유는?
- 일시적 실패는 재시도가 진짜로 다시 시도되어야 하기 때문
- 실패 로그를 종류별로 구분해 남기려고
- 확정적 실패를 캐시하면 DB 부하가 줄어 빨라져서
- 멱등성 규격이 두 실패를 나누도록 정해서