초당 2만 요청을 전부 우리 서버가 받아야 할 이유는 없습니다. 이 시스템에는 캐시가 유례없이 잘 듣는 조건이 갖춰져 있습니다.
조건이 셋 다 맞는다
| 조건 | 자동완성 |
|---|---|
| 답이 사용자마다 같은가 | 같다 |
| 답이 자주 바뀌는가 | 하루 1회만 바뀐다 |
| 같은 질문이 반복되는가 | 반복이 매우 많다 |
세 번째를 숫자로 봅니다.
짧은 접두사는 요청이 많은데 종류가 적습니다. 한 글자와 두 글자 접두사는 가능한 조합이 한정돼 있고, 그것이 요청의 대부분을 만듭니다.
즉 적은 수의 답이 요청의 대부분을 덮습니다. 이보다 캐시에 유리한 구조는 드뭅니다.
사용자에 가까울수록 크게 듣는다
같은 캐시라도 어디에 두는지에 따라 효과가 다릅니다.
| 위치 | 아끼는 것 |
|---|---|
| 브라우저 안 | 요청 자체가 안 나간다 |
| 엣지 | 우리 서버까지 오지 않는다 |
| 우리 서버 앞 | 트라이 조회를 안 한다 |
답이 모두에게 같으므로 가장 앞까지 밀 수 있습니다. 개인화가 있으면 브라우저 밖으로는 나눠 쓸 수 없는데, 그것을 범위 밖으로 둔 이유가 여기서 회수됩니다.
브라우저 안에서 특히 값싼 경우가 있습니다. 사용자가 글자를 지울 때입니다. 방금 본 답이므로 다시 물어볼 필요가 없습니다.
캐시 키를 무엇으로 하나
접두사 문자열이 키가 됩니다. 그런데 그대로 쓰면 같은 뜻의 요청이 다른 키가 됩니다.
대문자와 소문자
앞뒤 공백
같은 글자의 다른 표현
키로 쓰기 전에 한 형태로 맞춥니다. 이것을 하지 않으면 적중률이 눈에 보이지 않게 떨어지고, 원인을 찾기도 어렵습니다.
그리고 키에 언어나 지역을 넣어야 할 수도 있습니다. 같은 접두사에 다른 답을 줘야 한다면 그것은 키의 일부입니다. 키에 넣지 않으면 다른 지역의 답이 섞입니다.
유효 기간과 갱신의 관계
트라이가 하루 1회 바뀌므로 캐시 유효 기간도 그 주기에 맞춥니다. 더 짧게 잡으면 바뀌지도 않은 답을 다시 만들고, 더 길게 잡으면 갱신이 반영되지 않습니다.
주의할 점이 있습니다. 트라이를 교체한 직후에는 모든 캐시가 동시에 낡습니다. 유효 기간을 똑같이 두면 그 순간 요청이 한꺼번에 우리 서버로 옵니다. 유효 기간에 약간의 흔들림을 주어 만료 시각을 흩는 것이 안전합니다.