이건 뭐 비단 Django 뿐 아니라 모든 시스템에 적용되는 내용입니다. 2scoops of django 책을 읽다가 좋은 내용이 있어 글을 적어봅니다.
데이터베이스에 Binary 필드 또는 BLOB(Binary Large Object) 필드가 있는 경우가 있는데요, 가끔 이런 의문이 들 때가 있습니다.
???: blob에다가 이미지 때려박으면 귀찮게 cdn, s3 쓰지 않아도 되겠네? 와!
하지만 여러가지 문제가 있는데, PostgresSQL 전문가인 Frank Wiles에 따르면 데이터베이스를 파일 저장소로 쓰는 것의 문제점은 대략 아래와 같습니다 (원문: Three things you should never put in your database)
- 데이터베이스의 '읽기/쓰기' 속도는 항상 파일 시스템의 '읽기/쓰기' 속도보다 느리다
- 데이터베이스 백업에 드는 공간, 시간이 점점 증가하게 된다
- 파일 자체에 접근하는 데 앱(장고) 레이어와 데이터베이스 레이어 둘 다 거쳐야만 한다
그러니 BinaryField에다가 파일을 때려넣는 것이 아니고, FileField로 만들어서 s3, cdn의 주소 등 파일의 레퍼런스만 저장하는 식으로 하는게 좋은 디자인이라고 할 수 있겠습니다.
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[Django] 모델의 clean()이 자동으로 호출되지 않는 이유 (0) | 2021.02.12 |
---|---|
[Django] queryset을 합치면서 순서도 보존하는 방법 (2) | 2021.01.23 |
[Python] dict를 복사하면서 특정 필드를 빼고 복사하는 법 (0) | 2021.01.13 |
[Python] enum value로 @dataclass 사용하기 (0) | 2021.01.13 |
[Django] nullable 필드를 기본값 없는 non-nullable 필드로 변경할 때 유의사항 (0) | 2021.01.07 |