Foundry
검색어 자동완성 설계
중급
핵심

캐시가 가장 크게 듣는 자리

답이 모두에게 같다는 것을 최대로 쓴다

초당 2만 요청을 전부 우리 서버가 받아야 할 이유는 없습니다. 이 시스템에는 캐시가 유례없이 잘 듣는 조건이 갖춰져 있습니다.

조건이 셋 다 맞는다

조건자동완성
답이 사용자마다 같은가같다
답이 자주 바뀌는가하루 1회만 바뀐다
같은 질문이 반복되는가반복이 매우 많다

세 번째를 숫자로 봅니다.

짧은 접두사가 요청의 대부분이고 종류는 적어서 캐시가 크게 듣는다 접두사 길이별 요청량 1에서 3글자 4에서 6글자 7글자 이상 짧은 접두사는 요청이 많은데 종류는 적다 적은 수의 답이 요청의 대부분을 덮는다 그래서 캐시를 어디에 두나 답이 사용자마다 같으므로 사용자 앞쪽에 둘수록 크게 듣는다

짧은 접두사는 요청이 많은데 종류가 적습니다. 한 글자와 두 글자 접두사는 가능한 조합이 한정돼 있고, 그것이 요청의 대부분을 만듭니다.

적은 수의 답이 요청의 대부분을 덮습니다. 이보다 캐시에 유리한 구조는 드뭅니다.

사용자에 가까울수록 크게 듣는다

같은 캐시라도 어디에 두는지에 따라 효과가 다릅니다.

위치아끼는 것
브라우저 안요청 자체가 안 나간다
엣지우리 서버까지 오지 않는다
우리 서버 앞트라이 조회를 안 한다

답이 모두에게 같으므로 가장 앞까지 밀 수 있습니다. 개인화가 있으면 브라우저 밖으로는 나눠 쓸 수 없는데, 그것을 범위 밖으로 둔 이유가 여기서 회수됩니다.

브라우저 안에서 특히 값싼 경우가 있습니다. 사용자가 글자를 지울 때입니다. 방금 본 답이므로 다시 물어볼 필요가 없습니다.

캐시 키를 무엇으로 하나

접두사 문자열이 키가 됩니다. 그런데 그대로 쓰면 같은 뜻의 요청이 다른 키가 됩니다.

대문자와 소문자
앞뒤 공백
같은 글자의 다른 표현

키로 쓰기 전에 한 형태로 맞춥니다. 이것을 하지 않으면 적중률이 눈에 보이지 않게 떨어지고, 원인을 찾기도 어렵습니다.

그리고 키에 언어나 지역을 넣어야 할 수도 있습니다. 같은 접두사에 다른 답을 줘야 한다면 그것은 키의 일부입니다. 키에 넣지 않으면 다른 지역의 답이 섞입니다.

유효 기간과 갱신의 관계

트라이가 하루 1회 바뀌므로 캐시 유효 기간도 그 주기에 맞춥니다. 더 짧게 잡으면 바뀌지도 않은 답을 다시 만들고, 더 길게 잡으면 갱신이 반영되지 않습니다.

주의할 점이 있습니다. 트라이를 교체한 직후에는 모든 캐시가 동시에 낡습니다. 유효 기간을 똑같이 두면 그 순간 요청이 한꺼번에 우리 서버로 옵니다. 유효 기간에 약간의 흔들림을 주어 만료 시각을 흩는 것이 안전합니다.

면접에서 이렇게 나옵니다

Q.자동완성에서 캐시가 특히 잘 듣는 이유가 무엇입니까

적은 수의 답이 요청의 대부분을 덮기 때문입니다.

조건자동완성
답이 사용자마다 같은가같다
답이 자주 바뀌는가하루 1회만 바뀐다
같은 질문이 반복되는가반복이 매우 많다

짧은 접두사는 요청이 많은데 종류가 적습니다. 한두 글자 조합은 한정돼 있고 그것이 요청의 대부분을 만듭니다.

흔한 실수: 캐시를 성능 보조 수단으로 보는 것. 여기서는 초당 2만이라는 숫자를 실제로 감당하게 만드는 주된 수단입니다. 캐시를 뺀 용량 산정은 현실과 크게 다릅니다.

Q.캐시를 어디에 두시겠습니까

사용자에 가장 가까운 곳까지 밉니다.

위치아끼는 것
브라우저 안요청 자체가 안 나간다
엣지우리 서버까지 오지 않는다
우리 서버 앞트라이 조회를 안 한다

답이 모두에게 같으므로 가장 앞까지 밀 수 있습니다. 개인화를 범위 밖으로 둔 이유가 여기서 회수됩니다.

특히 사용자가 글자를 지울 때는 방금 본 답이므로 브라우저 안에서 끝납니다.

흔한 실수: 서버 앞 캐시만 두는 것. 그것만으로도 트라이 조회는 아끼지만 요청 수는 그대로입니다. 초당 2만을 받는 비용 자체를 줄이려면 더 앞으로 밀어야 합니다.

Q.캐시 키를 접두사 문자열 그대로 쓰면 무엇이 문제입니까

같은 뜻의 요청이 다른 키가 되어 적중률이 떨어집니다.

대문자와 소문자
앞뒤 공백
같은 글자의 다른 표현

키로 쓰기 전에 한 형태로 맞춥니다. 이것을 하지 않으면 적중률이 눈에 보이지 않게 떨어지고 원인을 찾기도 어렵습니다.

반대로 키에 반드시 넣어야 하는 것도 있습니다. 언어나 지역에 따라 답이 다르다면 그것은 키의 일부입니다.

흔한 실수: 정규화와 키 구성을 나중에 다듬으려는 것. 적중률이 낮다는 증상만 보이고 원인은 드러나지 않습니다. 키 설계는 캐시를 넣는 시점에 함께 정해야 합니다.

Q.트라이를 교체한 직후에 무엇을 주의해야 합니까

모든 캐시가 동시에 낡아서 요청이 한꺼번에 몰립니다.

유효 기간을 똑같이 두면 교체 시각을 기준으로 만료가 겹칩니다. 그 순간 초당 2만이 그대로 우리 서버로 옵니다.

유효 기간에 약간의 흔들림을 주어 만료 시각을 흩습니다.

유효 기간 자체는 갱신 주기에 맞춥니다. 더 짧으면 바뀌지도 않은 답을 다시 만들고, 더 길면 갱신이 반영되지 않습니다.

흔한 실수: 교체 직후 캐시를 한꺼번에 비우는 것. 반영을 빠르게 하려는 의도지만 가장 위험한 순간을 스스로 만드는 것입니다. 자연히 만료되게 두고 만료 시각만 흩는 편이 안전합니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

읽었으면 문제로 확인해보세요

검색어 자동완성 설계 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.