inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

모든 개발자를 위한 HTTP 웹 기본 지식

HTTP API를 만들어보자

캐시가능 Cachable 질문

해결된 질문

167

영한노게임

작성한 질문수 26

1

응답 결과 리소스를 캐시해서 사용해도 되야 캐시 기능을 편하게 사용할 수 있다. GET의 경우 만약 요청 메세지가 같다면 굳이 통신까지 사용해서 서버에서 응답을 받을 것이 아니라 이전 응답에 의한 응답 메세지가 캐싱되어있다면 캐시에서 꺼내올 수 있을 것이다. 이러한 방식을 완전 캐시 히트 (Full Cache Hit)라고 한다.

캐시를 활용하여 서버와의 최소한의 통신만 하는 조건부 요청이 가능하다. 만약 캐시를 이용할 수 있는 GET요청이지만 이전 요청과 요청조건이 다르다면 서버와의 최소한의 통신으로 응답이 같을 건지 확인하고 같을 것이라면 캐시에서 이전 응답을 꺼내오는 것이다.

POST를 생각해보자. POST는 body message를 처리한다고 했다. 즉 GET과 달리 body message가 추가된다. 아래는 "만약 POST작업을 캐싱한다면"의 예시이다. 캐시는 key:value 구조를 가진다.

만약 url을 key로 사용한다면 body message가 달라질 경우 동일한 작업이 보장되지 않는다.

/api/submit: POST /api/submit {"username": "user1", "password": "pass1"}

/api/submit: POST /api/submit {"username": "user2", "password": "pass2"}

보통 HTTP 캐시는 요청을 구분하는 주요 키로 URL을 사용한다. POST 요청의 본문은 URL과는 별도로 고유한 캐시 키를 구성해야 하며, 이는 복잡성과 추가적인 관리를 필요로 한다.

즉 GET보다 POST가 다뤄야할 변수가 많기에 상태를 저장하는 것이 유리하지 않을 확률이 더 높다는 것이다. POST는 응답 메시지를 캐싱하기에도, 요청 메시지를 캐싱하기에도 난이도가 높아진다.


이해를 확인하기 위해 제가 작성한 캐시가능에 대한 설명입니다. 혹시 틀린점이 있을까요? 요청정보 캐싱과 응답정보 캐싱에 대한 제 설명이 확신이 서지 않습니다...

네트워크

답변 1

0

y2gcoder

안녕하세요. 영한노게임님, 공식 서포터즈 y2gcoder입니다.

저는 잘 정리하셨다 생각합니다.

결론을 내자면

  • GET 요청은 캐싱하기에 적합하며, 캐시된 데이터를 사용할 수 있어 서버 부하를 줄이고 성능을 향상시킬 수 있습니다.

  • POST 요청은 본문 데이터 때문에 캐싱이 복잡하며, 일반적으로 캐싱되지 않습니다. 그러나 특수한 경우에 캐싱이 필요하다면, URL과 본문 데이터를 조합하여 고유한 캐시 키를 생성해야 합니다.

정도로 정리할 수 있을 것 같습니다.

추가로 더 궁금하시면 HTTP 1.1 스펙 문서 등을 참고해보시면 좋을 것 같습니다 🙂

감사합니다.

캐시무효화시 그냥 no-store만 넣어되지 않나요?

0

68

2

API의 헤더와 바디에 대한 문의 입니다.

0

70

2

수정폼과 수정

0

66

1

쿠키에 대해 질문드려요!

0

88

2

서버에서 캐시 검증 헤더를 직접 처리해야 하나요?

0

86

1

http api get, post 멱등

0

40

1

컬렉션의 개념

0

48

1

시작라인에 들어가는 요청 대상 경로는 상대 경로 아닌가요?

0

53

1

PATCH 는 PUT처럼 멱등이여야 하지 않나요?

0

80

1

리소스 질문드립니다

0

56

1

IP 패킷 질문입니다.

0

58

1

html from, http api

0

74

2

브라우저 캐시가 60초 유효하다는게 무슨 뜻일까요

0

120

1

stateless 무상태 예제가 생각났는데. 저가 생각 한게 맞는지 궁금합니다.

0

98

1

URI 및 URL 질문, 왜 자바(스프링)에서는 이렇게 나누었는지?

0

139

1

host와 port

0

106

1

tcp/ip는 연결을 유지? 아니면 유지하지 않음?

0

144

1

다음 강의 커리큘럼 질문!!

0

130

2

캐시 개념에 대해서 설명하시지는 않으시는건가요?

0

113

1

클라이언트가 patch, delete 요청 시 알아야 하는 url

0

90

1

html form 형태 전송시 new, edit 등 컨트롤 리소스를 사용하는 이유

0

168

2

비 연결성(connectionless) 강의에서 질문입니다~

0

139

1

PATCH를 사용하지 못할 때 왜 POST?

0

161

2

협상과 우선순위3 질문드립니다.

1

130

1