2024/01/22 2

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 5장(안전 해시 설계)

수평적 규모 확장성을 달성하기 위해서는 요청 or 데이터를 서버에 균등하게 나눠야한다. 안정해시는 이 목표를 달성하기 위해 보편적으로 사용하는 기술인데, 이 해시기술이 어떤 문제를 해결할 수 있는지 부터 알아본다. 해시 키 재배치(rehash) 문제 N개의 캐시서버가 있다고 할 때, 이 서버들에 부하를 균등하게 나누는 보편적 방법은 아래의 해시 함수를 사용하는 것이다. serverIndex = hash(key) % N (N은 서버의 개수이다) 4대의 서버를 사용한다면 해시 값이 18358617은 1(서버인덱스)이다. 이런식으로 나머지연산(%)을 이용해서 각 서버에 저장한다. 그러나, 해당 방법은 서버가 추가되거나 삭제될 때 문제가 발생한다. 만약 0번 서버가 장애가 발생하여, 위 해시함수를 이용해서 해시..

레거시 프로젝트 리팩토링 하기 feat SpringBoot + JPA

개요 2년전에 우리 팀이 인수인계 받은 프로젝트가 있었다. 해당 프로젝트 역할은 원래 웹에서 게임DB을 사용하기 위해 만든 API 시스템이였는데, 게임서버, 회원 등 여러 도메인에서 게임DB을 이용하면서 규모가 커졌다. 이 프로젝트는 2018년 ~ 2019년 즈음에 구축되어, 새로 들어가는 이벤트 or 기능들 제외하고는 오래된 레거시 코드로 이루어져 있었다. 이슈가 있을 때, 코드를 수정하면서, 리팩토링도 같이 하곤 했는데, 이번에 request로 받는 파라미터 중 유저 ID을 유저 No로 받도록 수정해야하는 이슈가 있었다. 70% 정도의 API가 ID을 Request Param으로 받고 있었기 때문에, 대부분 코드를 수정했어야했다. 이때다 싶어, 리팩토링 작업도 같이 진행하면 어떻겠냐고 팀장님께 제안드..

728x90