설계 면접 문제 17 · 6부 손님이 보내는 것을 받을 때

이미지 업로드 설계 면접 질문: 올리다 만 파일이 저장소에 쌓일 때

시스템 디자인 Vol.1 · 17장 「올리다 만 파일이 쌓입니다」에서

이런 화면입니다

상품 등록 화면에서 사진을 올립니다. 손님이 파일을 고르면 브라우저가 우리 서버로 보내고, 서버가 받아서 저장소에 올리고, 주소를 데이터베이스에 적습니다. 잘 돌아갑니다.

몇 달 뒤 저장소 요금이 이상하게 늘어 있습니다. 열어 보니 아무 상품도 가리키지 않는 파일이 잔뜩 쌓여 있습니다.

면접관이 이렇게 묻습니다

면접관

이미지 업로드를 설계해 보세요. 상품 하나에 사진이 최대 열 장이고, 손님이 올리다 그만두기도 합니다.

범위부터 좁힙니다

규모를 먼저 묻습니다. 상품이 하루 3,000개 등록되고 사진이 평균 네 장, 한 장이 평균 2메가라면 하루 24기가입니다. 그리고 등록을 끝까지 안 하는 비율을 묻습니다. 셋에 하나가 중간에 나갑니다.

이 숫자를 묻지 않으면 이 문제가 보이지 않습니다. 하루 24기가가 어디를 지나가는지, 중간에 나간 손님의 사진은 어떻게 되는지. 이 두 가지가 요구사항이 됩니다.

이 문제의 무게

등록을 끝내지 않고 나간 손님의 파일은 언제부터 상품 사진일까요. 이 질문에 답하지 못하면 저장소에 주인 없는 파일이 쌓입니다.

가장 많이 나오는 답

브라우저에서 우리 서버로, 우리 서버에서 저장소로 올리고, 그다음 데이터베이스에 주소를 적습니다.

브라우저 → 우리 서버   (10MB)
우리 서버 → 저장소     (같은 10MB 한 번 더)
우리 서버 → DB        (주소 저장)

업로드 한 장, 등록 한 번으로 시험하면 문제없이 돕니다.

그런데 여기서 깨집니다

같은 바이트가 두 번 흐릅니다. 그동안 우리 서버의 스레드 하나가 묶여 있고, 요청 크기 제한과 메모리와 시간 제한이 전부 이 파일에 걸립니다. 사진 열 장을 한꺼번에 고른 손님 한 명이 서버를 오래 붙듭니다.

파일을 먼저 올리고 행을 나중에 만드는 순서에서는, 중간에 그만둔 손님이 곧 쓰레기 파일입니다. 셋에 하나가 그만두면 그만큼이 매일 쌓입니다.

떨어지는 답은 이런 모양입니다

  • 서버가 받아서 올리는 그림으로 끝냅니다.
  • 중간에 그만두는 손님을 면접관이 물을 때 처음 생각합니다.
  • 손님이 준 파일 이름을 그대로 저장소 이름으로 씁니다.

면접관은 여기서 멈추지 않습니다

  1. 같은 사진을 두 번 올리면요?

    같은 파일이 두 번 붙는 일을 어디서 막을지 봅니다.

  2. .jpg로 끝나면 이미지라고 믿어도 되나요?

    확장자와 실제 형식을 구분하는지 봅니다.

  3. 상품 사진과 사업자등록증 사본을 같은 곳에 둬도 되나요?

    공개해도 되는 파일과 안 되는 파일을 가르는지 봅니다.

VOL.1 · 17장

이 다음 판단은 책에서 이어집니다

책은 파일이 어디를 거쳐 저장소에 닿을지, 쓰기로 하지 않은 파일을 어떻게 다룰지 정하고, 그 판단이 테이블과 실패 처리에 어떻게 들어가는지 풉니다. 여기서 자주 놓치는 세 가지도 같이 다룹니다.

17장에서 이어지는 것

  • 파일이 저장소에 닿는 길
  • 쓰지 않은 파일을 다루는 순서
  • 여기서 자주 놓치는 세 가지
  • 같은 파일을 두 번 올리면
시스템 디자인 Vol.1 보러 가기 →

매일 쓰는 화면에서 나온 설계 문제 22개 · 263쪽 · 현직 엔지니어와 30분 모의면접

22문제 전체 보기