3월 28일 시스템 설계 스터디

시스템 설계 스터디

지난번 시간에 이어서 실제 예시들을 더 가지고 설계를 어떻게 할 것인가를 생각하는 시간이었습니다.

URL 단축기

긴 원본 url을 특정 값에 매핑하여 길이를 줄여주는 서비스입니다.

여러 서비스들이 해당 기능을 지원하는데, 대부분은 해시된 값에 실제 주소를 매핑하는 것이기에. 짧은 영숫자 조합으로 축약을 진행합니다.
여기서 요구 사항에 따라 쓰기, 읽기 연산 등의 제한에 따라 설계를 해야 합니다.

일반적인 RESTFUL 설계로 단축, 리디렉션 엔드포인트를 구성하고
간단하게 연결을 해주는 API입니다.

로드밸런서 상에서 리디렉션을 주는 방법도 서버 부하냐 트래픽 추적이냐는 관점에서
다른 리디렉션을 취하는 경우도 있었습니다.

결국 성능과 추적 가능성의 트레이드 오프가 있을 수 밖에 없는데,
상황에 따라서 다르다보니 설계엔 역시 정답이 없습니다.

해시 자체에서도 충돌 가능성이 있다 보니, 블룸 필터(Bloom Filter)같은 방법론을 적용하는 것도 고려를 해 볼 만 합니다. 아예 Base62를 기반으로 Incremental 한 ID값을 부여하기도 합니다.

또한 접근 빈도를 생각해서 캐시 서버를 두는 것 역시 고려를 해 볼 범위입니다.

웹 크롤러

자동적으로 웹 페이지를 탐색하고 정보를 수집하는 봇입니다.

어떤 규모로 진행을 하고, 어떤 내용들을 저장할 것인지에 따라서 설계가 달라집니다.
일반적으로는 루트로부터 미방문된 url을 탐색하고, 콘텐츠를 비교하고 저장하는 과정들을 반복합니다.

이 과정에서 요청 간격이나 url 우선순위 설정 등이 주요 고려사항이고.
재수집 진행 역시도 실질적인 고려 대상입니다.
일반적으로 Robots.txt 확인을 하는 것이 가장 기본이고, 여러 크롤러용 함정 등을 피하는 것도 과제입니다.

이미 방문한 데에 대해서 빠르게 확인하기 위해 블룸 필터를 사용해 확률적으로 확인할 수 있습니다.

또한 텍스트 외에 다른 여러 콘텐츠들을 다루기 위해 이미지, pdf, 동영상 등에도 대응하도록 설계하는 것도 고려 대상입니다.