Foundry
URL 단축기 설계
심화
핵심

남용과 도메인 지키기

감추는 성질이 남용의 도구가 된다

이 서비스의 핵심 가치는 목적지를 짧게 감추는 것입니다. 그 성질이 그대로 남용의 도구가 됩니다.

사용자가 판단할 수 없다

단축 링크는 목적지를 감추므로 사용자가 눌러 보기 전에 판단할 수 없다 사용자가 보는 것 짧은 링크 하나 목적지를 알 수 없다 눌러야 알게 된다 그 순간 이미 도착했다 그래서 우리가 대신 판단한다 만들 때 검사하고, 신고를 받고, 사후에도 다시 본다 만들 때만 검사하면 뒤에 바뀐 목적지를 놓친다 우리 도메인이 차단되면 모든 링크가 함께 죽는다

짧은 링크를 받은 사람은 목적지를 알 수 없습니다. 눌러서 알게 되는데 그때는 이미 도착했습니다.

긴 주소라면 사용자가 스스로 판단합니다. 단축 링크는 그 판단 기회를 없애는 것이고, 그래서 판단을 우리가 대신해야 합니다.

세 시점에서 검사한다

시점하는 일
만들 때알려진 위험 목록과 대조한다
신고를 받을 때사용자와 외부 신고로 알게 된다
만든 뒤에도이미 만든 링크를 다시 검사한다

만들 때만 검사하면 부족합니다. 정상 사이트를 등록해 두고 나중에 그 사이트의 내용을 바꾸는 방식이 있습니다. 목적지 주소는 그대로인데 내용이 달라지므로 우리 기록으로는 알 수 없습니다.

그래서 만든 뒤에도 주기적으로 다시 봅니다. 누적 300억 개 을 모두 볼 수는 없으므로 조회가 많은 것부터 봅니다. 피해 규모가 조회 수에 비례하기 때문입니다.

도메인이 차단되면 전부 죽는다

우리 도메인 하나가 모든 링크를 대표합니다. 그 도메인이 위험한 것으로 분류되면 정상 링크까지 함께 막힙니다.

대응내용
신고 경로를 눈에 띄게 둔다우리가 먼저 알고 지운다
대응 속도를 지표로 관리한다신고에서 차단까지의 시간
브랜드별로 도메인을 나눈다한 곳이 막혀도 나머지가 산다

이 위험이 단축 서비스의 가장 큰 사업 위험입니다. 기술적으로 완벽해도 도메인이 막히면 서비스가 멈춥니다.

키를 훑어 보는 시도

키가 7자이므로 무작위로 넣어 맞히는 것은 어렵습니다. 3조 5천억 중에서 300억이 쓰였으므로 100번에 한 번 미만입니다.

그래도 대량으로 시도하면 남의 링크를 찾을 수 있습니다. 그래서 요청량을 제한합니다. 앞의 처리율 제한 설계가 그것입니다.

그리고 링크에 비밀이 담기지 않게 안내합니다. 단축 링크는 누구에게 전달돼도 동작하는 값입니다. 접근 제어가 필요한 자료에는 맞지 않습니다.

번호 변환을 고르지 않은 이유가 여기서 이어진다

앞에서 무작위를 고른 이유가 추측 가능성이었습니다. 번호 변환이면 다음 키를 알 수 있어 훑어 보기가 거의 확실히 성공합니다.

이 요구사항에서는 링크에 접근 제한이 없지만, 사용자가 사적인 자료를 공유하는 것을 막을 수 없습니다. 감출 수 있으면 감춰 두는 것이 이 경우의 판단입니다.

면접에서 이렇게 나옵니다

Q.단축 링크의 남용을 어떻게 다루시겠습니까

세 시점에서 검사합니다. 만들 때, 신고를 받을 때, 만든 뒤에도.

짧은 링크를 받은 사람은 목적지를 알 수 없습니다. 긴 주소라면 사용자가 스스로 판단하는데, 단축 링크는 그 판단 기회를 없애는 것이라 판단을 우리가 대신해야 합니다.

시점하는 일
만들 때알려진 위험 목록과 대조
신고를 받을 때사용자와 외부 신고
만든 뒤에도조회가 많은 것부터 다시 검사

흔한 실수: 만들 때만 검사하는 것. 정상 사이트를 등록하고 나중에 내용을 바꾸는 방식이 있습니다. 목적지 주소는 그대로인데 내용이 달라지므로 우리 기록으로는 알 수 없습니다.

Q.이 서비스의 가장 큰 위험은 무엇인가요

도메인 차단입니다. 우리 도메인 하나가 모든 링크를 대표합니다.

그 도메인이 위험한 것으로 분류되면 정상 링크까지 함께 막힙니다. 기술적으로 완벽해도 서비스가 멈춥니다.

대응내용
신고 경로를 눈에 띄게 둔다우리가 먼저 알고 지운다
대응 속도를 지표로 관리한다신고에서 차단까지의 시간
브랜드별로 도메인을 나눈다한 곳이 막혀도 나머지가 산다

흔한 실수: 이것을 기술 문제로 보지 않는 것. 처리량과 지연을 아무리 맞춰도 도메인 평판이 서비스의 생존 조건입니다. 그래서 대응 속도가 성능 지표만큼 중요합니다.

Q.키를 훑어 보는 시도는 어떻게 막나요

요청량을 제한하고, 링크에 비밀을 담지 않게 안내합니다.

키가 7자이므로 무작위로 맞히기는 어렵습니다. 3조 5천억 중 300억이 쓰였으니 100번에 한 번 미만입니다. 그래도 대량으로 시도하면 남의 링크를 찾을 수 있습니다.

요청량을 제한한다
링크는 누구에게 전달돼도 동작하는 값임을 안내한다

접근 제어가 필요한 자료에는 단축 링크가 맞지 않습니다.

흔한 실수: 키를 더 길게 만들어 해결하려는 것. 길이는 곧 서비스 가치이므로 그 방향으로 밀 수 없습니다. 추측을 어렵게 하는 것과 접근을 통제하는 것은 다른 문제입니다.

Q.무작위 키를 고른 것이 이 문제와 어떻게 이어지나요

번호 변환이면 훑어 보기가 거의 확실히 성공합니다.

앞에서 무작위를 고른 이유가 추측 가능성이었습니다. 번호가 순차적이면 다음 키를 알 수 있으므로 남의 링크를 하나씩 확인할 수 있습니다.

이 요구사항에서 링크에 접근 제한은 없습니다. 그런데 사용자가 사적인 자료를 공유하는 것을 막을 수 없습니다.

감출 수 있으면 감춰 두는 것이 이 경우의 판단이다

흔한 실수: 요구사항에 없으니 고려하지 않는 것. 요구사항에 없는 것을 다 하려 하면 과설계지만, 무작위와 번호 변환의 비용이 거의 같다면 안전한 쪽을 고르는 것이 맞습니다. 비용이 비슷할 때가 이런 판단을 할 수 있는 순간입니다.

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

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

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