오늘은 카카오if 에서들은 캐시 스템피드에 대한 내용을 정리하도로 하겠습니다.
일반적으로 레디스에 원하는 캐시가 있을시 아래 그림과 같이 데이터를 IMDB에서 가져오게 됩니다.
캐시에 데이터가 없다면 DB에서 조회후 캐시에 저장한 다음 데이터를 제공합니다.
보통 캐시를 저장할 때 일관적인 시간데이터 기준으로 데이터를 저장하기 때문에 사용자의 요청 + 다량의 캐시 갱신으로 인해 서버의 부하가 발생 될 수 있는데 이것을 캐시스템피드 현상이라고 합니다. 실시간 데이터를 중요로하는 서비스일수록 이러한 현상으로 인해 사용자에게 안좋은 이미지를 전달 할 수 있습니다.
스템피드 "동물 무리가 한 방향으로 몰려가는 현상"을 의미합니다. 마치 많은 동물들이 갑자기 놀라서 한 방향으로 무질서하게 몰려가듯이, 캐시가 만료되었을 때 다수의 클라이언트 요청이 동시에 캐시를 갱신하려고 몰리면서 원본 서버에 과부하가 발생하는 현상을 가리킵니다.
해결책으로
2.
캐시웜업
a.
3.
확률적 접근
이외에 다양한 방법이 있겠지만 3가지 방식에 대해 정리하도록 하겠습니다.
@DisplayName("신규회원은 권한이 없는 상태로 만들어진다.")
@Test
void 신규회원은_권한이없는상태로_만들어진다() {
String id = "test1";
String password = "test2";
String userIp = "127.0.0.1:8080";
NaverUser naverUser = new NaverUser(ldapId, password, userIp);
String json = "{\"result\": {\"memberlist\": [{\"deptName\": \"naver\",\"accountId\": \"test1\",\"deptMainYn\": \"Y\",\"location\": \"\",\"identityDisplayName\": \"coby.typark(박태영)/dkt\",\"personName\": \"박태영\",\"companyCodeAccount\": \"dkt\",\"concurrentOffice\": [],\"gradeName\": \"팀원\",\"employeeNo\": \"O2327\",\"emailId\": \"coby.typark@kakaocorp.com\",\"nicknameEng\": \"coby\",\"deptPathName\": \"카카오 패밀리컴퍼니;디케이테크인;커넥트CX사업부문;CX솔루션팀;\",\"companyCodeDept\": \"dkt\",\"deptPathCode\": \"25;340100;342150;342180;\",\"parentDeptCode\": \"342150\",\"gradeLevel\": \"67\",\"deptCode\": \"342180\",\"displayName\": \"coby(박태영)\",\"parentDeptName\": \"커넥트CX사업부문\"}],\"code\": \"success\"}}\n";
FakeNaverUserHandler fakeNaverUserHandler = new FakeNaverUserHandler();
fakeNaverUserHandler.putNaverUserData(id, json);
naverUser.getMemberData(fakeNaverUserHandler);
Member member = new Member();
member.initLdapData(naverUser);
member.initMemberData();
Assertions.assertThat(member.getRole()).isEqualTo(Member.Role.ROLE_NONE);
}
Java
복사