이건 뭐 비단 Django 뿐 아니라 모든 시스템에 적용되는 내용입니다. 2scoops of django 책을 읽다가 좋은 내용이 있어 글을 적어봅니다.

데이터베이스에 Binary 필드 또는 BLOB(Binary Large Object) 필드가 있는 경우가 있는데요, 가끔 이런 의문이 들 때가 있습니다.

구글의 blob 이모지. 글과는 관계 없음

???: blob에다가 이미지 때려박으면 귀찮게 cdn, s3 쓰지 않아도 되겠네? 와!

하지만 여러가지 문제가 있는데, PostgresSQL 전문가인 Frank Wiles에 따르면 데이터베이스를 파일 저장소로 쓰는 것의 문제점은 대략 아래와 같습니다 (원문: Three things you should never put in your database)

  • 데이터베이스의 '읽기/쓰기' 속도는 항상 파일 시스템의 '읽기/쓰기' 속도보다 느리다
  • 데이터베이스 백업에 드는 공간, 시간이 점점 증가하게 된다
  • 파일 자체에 접근하는 데 앱(장고) 레이어와 데이터베이스 레이어 둘 다 거쳐야만 한다

그러니 BinaryField에다가 파일을 때려넣는 것이 아니고, FileField로 만들어서 s3, cdn의 주소 등 파일의 레퍼런스만 저장하는 식으로 하는게 좋은 디자인이라고 할 수 있겠습니다.

반응형