본문 바로가기

프로그래밍(TA, AA)/개발방법론

[개념] Negative Cache란?

https://en.wikipedia.org/wiki/Negative_cache

컴퓨터 프로그래밍에서, negative cache란 negative response를 저장한 cache를 말한다. 이는 원인이 해결된 후에도 프로그램이 실패를 나타내는 결과를 기억한다는 것을 의미한다. 일반적으로 negative cache는 디자인상의 선택이지만 software 버그일 수도 있다.

Examples

네트워크를 사용할 수 없는 동안 페이지를 로드하려고 시도하는 웹브라우저를 생각해보면, 브라우저는 문제를 나타내는 오류코드를 수신하고 요청된 페이지 대신 이 오류 메시지를 사용자에게 표시할 수 있다.

 

그렇지만, 브라우저가 오류 메시지를 페이지 캐시에 배치하는 것은 올바르지 않다. 이러헥 하면 사용자가 동일한 페이지를 로드하려고 할때, 네트워크가 recovery 된 이후에도 오류를 다시 표시하게 되기 때문이다.

 

오류 메시지는 페이지 URL로 캐시되어서는 아노딘다. 브라우저가 페이지를 성공적으로 로드할 수 있을때까지 사용자가 페이지를 로드하려고 할때마다 브라우저는 새로운 시도를 해야 한다.

 

실패와 유사한 상태를 캐시해야 하는 경우가 있다. 예를 들어, DNS에서는 캐싱 네임서버가 positive response 뿐만 아니라 negative reponse도 기억하도록 요구한다. 권한 있는 네임서버가 이름이 존재하지 않는다는 negative response 을 반환하면 이는 캐시된다. positive response는 애플리케이션 수준에서 실패로 인식될 수 있다. 그러나 이를 캐싱하는 네임서버에서는 실패가 아니다. negative, positive 캐싱 시간 각각은 독립적으로 조정될 수 있다.

 

Description

Negative cache는 일반적으로 실패 비용이 매우 많이 들고, 사용자 액션과는 상관없이 자동으로 에러 상태가 발현되는 경우에만 필요하다. 이는 사용자가 실패의 원인을 분리할 수 없는 상황을 만든다. 생각할 수 있는 모든 것을 사용자 입장에서 수정했다하더라도 프로그램은 여전히 작동을 거부하게 된다. 오류가 캐시되면 프로그램은 오류 원인에 대한 설명 외에도 캐시를 지우기 위해 수행해야 하는 작업에 대한 명확한 표시를 제공해야 한다. 이러한 조건에서 negative cache는 디자인 안티패턴의 예이다.

 

캐시된 레코드가 만료되면 negative cache는 여전히 복구될 수 있다.


https://thoughtfulsoftware.wordpress.com/2013/11/17/negative-caching/

최근 캐싱을 조사하던 중 "Negative Caching"이라는 아이디어를 발견했다. Wikipedia에 따르면, negative cache는 "negative"한 응답이나 실패를 저장하는 캐시이다. 간단히 말해, 존재하는 것에 대한 정보를 저장하는 positive cache와 달리 존재하지 않는 다는 정보를 저장하는 것는 개념이다. (이 article의 나머지 부분에서는 "normal" 캐시가 'positive cache'를 나타낸다)

 

positive cache는 성공(object나 resource 검색)이 원하는 정보를 저장하는 것보다 비용이 더 많이 드는 경우 유용하다. 대조적으로 negative cache는 실패(어떤 것이 존재하지 않는다고 판단한ㄴ 것)가 매우 비용이 많이 드는 경우에 유용하다. 그러나 이는 대부분의 최신 소프트웨어의 경우 리소스 조회 실패로 인해 발생하는 비용이 그다지 높지 않기 때문에 틈새 전략이다.

 

찾을 수 있는 negative caching 애플리케이션은 DNS caching이었다. 

 

존재하지 않는 레코드에 대한 DNS 조회는 레코드가 아직 전파되지 않은 경우, 쿼리가 DNS 대규모 네트워크를 통과하기 때문에 비용이 많이 들 수 있다. 전파에는 몇시간 또는 며칠이 걸릴 수 있으므로 DNS 레코드에 대한 요청이 negative한 결과를 반환하는 경우, DNS server는 몇시간 동안 그 결과를 기억함으로써 많은 문제를 해결할 수 있다.

 

DNS 서버가 negative cache 동작을 하고 있고, 레코드를 검색하지만 결과를 얻지 못할 경우, 시스템은 실패한 검색을 기억하고 레코드가 존재하지 않음을 기억할 수 있다.

 

이렇게 하면 서버는 이 정보를 사용해서 이후 누군가가 요청할때 (비싼 비용으로) 다시 레코드를 찾으려는 대신 negative한 응답을 바로 반환할 수 있게 된다. negative한 캐시 레코드는 시간이 지남에 따라 만료되고 실제 DNS 레코드가 전파되면 검색에서 찾을수 있게 된다.

 

negative cache에 존재하지 않는 항목이 포함되어있고, 기본적인 항목이 나타나면 캐시 항목이 만료될때까지 실제로 존재하는 항목을 놓치게 될 수 있다. 다른 방법으로 확인할 수 있을때 시스템이 무언가가 존재하지 않는다고 말하는 것을 상상해보면, 캐시 만료 또는 캐시 삭제의 동작 처리가 매우 중요할 것이다.

 

존재하지 않는 것을 판단하는 것에 비용이 많이 든다면 무언가가 존재하지 않는 정보를 저장할 수 있다. 이 해결책은 매우 드물지만 올바른 상황에서 사용된다.


https://support.oneidentity.com/ko-kr/kb/4281626/what-is-the-negative-cache

 

What is the negative cache?

캐싱 데몬은 디렉토리를 검색할 때 찾을 수 없었던 사용자 및 그룹의 캐시를 유지한다. 이를 negative cache라고 한다. negativce cache가 존재하는 동안에는 negativce cache가 만료될때까지 디렉토리에서 사용자/그룹을 찾는 시도를 하지 않게된다. 기본적으로 negative cache 수명은 900초이지만 환경적 필요에 맞게 늘릴 수 있다.