고객이 내 사이트에 사진을 올리면, 그 사진은 실제로 어디에 저장될까요?
저도 오랫동안 그냥 "앱 안에" 있는 거라고 생각했어요. 그런데 그렇지 않아요. 앱은 식당의 홀이자 주방이에요. 사진은 무겁고, 무거운 물건을 주방에 쌓아두지는 않잖아요. 코트 보관소에 맡기는 거죠.
그 코트 보관소가 바로 오브젝트 스토리지예요.
작동 방식은 이렇습니다. 이게 전부예요. 물건을 맡기면 번호표를 받아요. 물건은 수천 개가 걸린 거대한 보관실 어딘가의 번호 고리에 들어가고, 나중에 돌아와 번호표를 보여주면 맡긴 그 물건을 정확히 돌려줘요.
소프트웨어에서 번호표는 그냥 웹 주소예요. 파일을 올리면 링크를 받고, 파일이 다시 필요하면? 폴더를 뒤지지 않아요. 링크를 보여주면 파일이 바로 와요.
- 맡기는 것: 사진, 동영상, PDF, 백업, 사용자 업로드 파일.
- 받는 것: 고유한 주소, 즉 번호표.
- 번호표를 가지고 돌아오면: 파일이 그대로 돌아와요.
왜 데이터베이스에 파일을 그냥 넣으면 안 될까요? 이 부분이 핵심이에요. 데이터베이스는 앱이 늘 필요로 하는 작은 사실들을 기록하는 주방의 노트장이에요. 이메일, 주문 금액, 가입 날짜. 빠르게 쓰고 빠르게 찾는 용도죠. 그런데 4K 동영상을 그 노트장에 욱여넣으려 한다고 생각해보세요. 페이지가 뭉개지고, 모든 조회가 느려지고, 비용은 치솟아요.
그래서 역할 분담은 명확해요. 한번 이해하면 어디서든 보여요.
사물에 관한 작은 사실은 데이터베이스에 넣어요. ("사용자 88이 프로필 사진을 올렸다. 번호표는 이것이다.")
그 큰 사물 자체는 오브젝트 스토리지에 넣고, 데이터베이스는 번호표만 보관해요.
노트장은 얇고 빠르게 유지되고, 무거운 것들은 저렴한 보관실에 있어요.
실제로 저렴하고, 잃어버리기도 어려워요. 이게 조용한 장점이에요. 이런 방식의 스토리지는 파일당 비용이 아주 낮고, 파일을 잃기도 거의 불가능해요. 뒤에서는 조용히 다른 건물들에 여러 사본을 유지하고 있거든요. 어딘가 창고의 드라이브가 죽어도 느끼지 못해요. 코트는 처음부터 세 개의 고리에 걸려 있었고, 번호표는 하나만 필요했을 뿐이니까요. 그래서 백업이 잠드는 곳이 바로 여기예요.
기억해두면 좋은 것들:
- 오늘도 수만 번 사용했어요. 인터넷에서 불러오는 이미지, 동영상, 다운로드 파일의 거의 전부가 오브젝트 스토어에서 전달돼요. 대표적인 건 Amazon의 S3이고, 지금 이 순간 웹 파일의 상당 부분이 거기에 있어요.
- 일부러 "단순하게" 만들었어요. 코트 보관소는 가방을 열거나 코트를 수선하거나 주머니를 뒤지지 않아요. 물건 전체를 받아두었다가 그대로 돌려줘요, 전부 아니면 전무. 스토리지 안의 파일을 직접 수정하지는 않고, 꺼내서 바꾼 다음 새 버전을 다시 넣어요. 이 단순함이 저렴하고 믿을 수 있는 이유예요.
- 번호표는 공개 또는 비공개로 설정할 수 있어요. 누구나 열 수 있는 주소도 있고(쇼핑몰의 상품 사진), 잠겨 있어 앱이 몇 분짜리 임시 번호표를 발급하는 경우도 있어요(구매한 개인 파일). 보관실은 같고, 번호표의 종류가 두 가지인 거예요.
가장 간결하게 말하면: 데이터베이스는 사실을 기억하고, 오브젝트 스토리지는 물건을 보관해요. 무거운 것은 보관소에 맡기고 번호표만 챙기면, 앱은 가볍게 움직여요.