【제18회】 이미지 업로드의 명암! 서버 부하와 법적 리스크로 내린 '기능 폐지'의 결단
요약
개발자가 구현했던 이미지 업로드 기능을 서버 부하와 법적 리스크 문제로 폐지하고, 대신 외부 URL을 활용하여 썸네일을 표시하는 방식으로 전환했습니다. 이는 웹 서비스의 장기적인 생존과 안정성을 위한 아키텍처적 결정입니다.
핵심 포인트
- 이미지 직접 호스팅은 막대한 저장 비용 및 트래픽 리스크를 초래합니다.
- 법적 책임 문제(불법 이미지)는 외부 전문 호스팅에 맡기는 것이 안전합니다.
- 핵심은 '직접 보유'가 아닌, '외부 URL을 통한 썸네일 전개'로 경험을 유지하는 것입니다.
「애써 3일 동안 구현한 이미지 업로드 기능을, 나 스스로 손으로 한 줄도 빠짐없이 전부 삭제했다」
레이와(令和)에 직접 만든 2채널 스타일 게시판 「츠우바이채널(つゔぁいちゃんねる, 2ch.biz)」 개발 비화의 제18편입니다. 이번에는 엔지니어가 가장 빠지기 쉬운 '다기능화 함정'과 개인 개발자가 웹 서비스를 건강하게 생존시키기 위해 내린 '이미지 보관 완전 폐지 및 URL 전개로의 대전환' 의사결정 과정을 공개합니다.
웹 앱 개발에 조금 익숙해지면, 누구나 이렇게 생각합니다.
「레이와 게시판이니까, 텍스트뿐만 아니라 스마트폰으로 찍은 사진을 그 자리에서 업로드할 수 있는 게 훨씬 편리하잖아」
실제로 저는 개발 초기 단계에서 자랑스럽게 '이미지 업로드 기능'을 구현했습니다.
- 게시글 작성 양식에 「📷 이미지 첨부」 버튼 설치
- 클라이언트 측에서의 드래그 앤 드롭 및 즉시 썸네일 미리보기
- 서버 측에서의 파일 형식 검증 (MIME 체크)
uploads/디렉터리로의 WebP 자동 리사이즈 저장
테스트 환경에서 스마트폰으로 라면 사진을 업로드하고, 스레드에 멋진 썸네일이 표시되었을 때, '최고로 모던한 게시판이 완성되었다!'라며 자화자찬했습니다.
……하지만 불과 며칠 후, 저는 이 기능을 통째로 쓰레기통에 버리게 됩니다.
본격 운영을 염두에 두고 리스크 시뮬레이션을 진행하는 순간, 등골이 오싹해지는 현실들이 연이어 드러났습니다.
최근 스마트폰으로 촬영한 사진은 1장당 5MB~10MB를 넘는 경우가 드물지 않습니다.
만약 하루에 100장의 사진이 게시된다면, 그것만으로도 월간 수십 기가바이트의 스토리지가 소모됩니다. 저렴한 VPS의 SSD 용량(수십 GB~100GB) 등은 몇 달 만에 포화 상태가 됩니다.
더욱 무서운 것이 '이미지 전송 트래픽' 입니다.
인기 스레드에 붙은 사진이 1만 번 조회되면, 그것만으로도 수십 기가바이트의 전송량이 발생하여 클라우드 파산(수만 원~수십만 원 청구)을 초래합니다.
이것이 최대의 결정타였습니다.
익명 게시판인 이상, 악의적인 사용자가 불법적인 이미지나 타인의 사생활 사진을 업로드해 올
2ch의 서버는 텍스트(수킬로바이트)만 전송하기 때문에, 초경량·초고속 응답을 유지할 수 있습니다. 이미지 저장 비용과 배포 트래픽은 외부 이미지 호스팅 회사에 맡길 수 있고, 불법 이미지 보관 책임은 이미지 호스팅 쪽에 있으므로, 2ch 측은 'URL 텍스트 삭제'만으로 충분합니다.
이것은 단순한 게으름이 아니라, **웹 서비스가 장기간 생존하기 위한 궁극의 지혜(아키텍처)**였습니다.
이미지 업로드를 전면 폐지했다고 해서 이미지 공유를 포기한 것은 아닙니다.
'이미지 파일을 직접 보유하지 않고, 사용자가 본문에 붙인 외부 URL을 안전하게 인라인으로 펼쳐서 썸네일로 표시하면 됩니다.'
직접 호스팅하는 것을 버림으로써, 오히려 '모던한 이미지 미리보기 경험'을 무위험(No-risk)으로 구현할 수 있는 새로운 길이 열렸습니다.
제18회에 걸쳐 엔지니어로서 가장 힘들었지만, 동시에 가장 가치 있었던 결정인 **'이미지 업로드 기능의 완전 철폐'**에 대해 설명했습니다.
'구현 가능함(Can be built)'과 '운영 가능함(Can be operated)'은 완전히 다릅니다: 저장 비용과 법적 리스크를 개인의 역량과 저울질할 용기. -
매몰비용을 두려워하지 않고 버리기: 위험한 기능은 아무리 많은 시간을 들여 만들었더라도 조기에 폐기하는 것이 프로의 판단입니다. -
본가 2ch의 위대한 빼기(Subtraction): 텍스트에 특화하고 무거운 미디어는 외부 URL에 맡기는 설계 사상의 강인함.
그리고 이미지 업로드를 버린 다음 날, 저는 게시판에 새로운 마법을 걸었습니다.
**'본문에 붙여진 이미지 URL을 감지하여 안전하게 썸네일을 펼치는 클라이언트 파서(Client Parser)'**입니다.
다음 편에서는 【제19회】 본문 내 이미지 URL 자동 썸네일 전개! 안전한 프록시 경유와 모달 미리보기로 이어집니다!
실제 서비스: https://2ch.biz/
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기