본문 바로가기
Project/pre-print-project

장고 media설정 & 파일 업로드, 다운로드 기능 구현 + ERD, 모델 수정

by 지식을 쌓는 개구리 2023. 7. 27.

2023 pre-print 개발일지

 

07/23~07/25

media설정

pre-print 프로젝트에서 가능해야하는 기능 중 하나가 사용자가 제출한 파일을 출력해야 하기에..

이에 대한 파일을 저장하는 부분인 media와 경로를 설정해줘야했다.

다음과 같이 media와 files폴더를 생성해주고 

settings.py 에서 미디어 경로 설정과

MEDIA_URL = 'media/'
MEDIA_ROOT = BASE_DIR / 'media'

urls.py 에서 url패턴을 추가해준다.

urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

 

이전에 OrderFile모델을 작성할 때

class OrderFile(models.Model):
    order = models.ForeignKey(Order, on_delete=models.CASCADE)
    file = models.FileField(upload_to='files/')

업로드 시 경로를 files/에 두었음으로 media하위의 files폴더에 파일이 저장되게 된다.

(미디어 경로 BASE_DIR을 'media'로 두었음으로 기본 경로는 media이다.)

 

프로젝트를 진행하는데 모델(DB) 설계에 문제를 발견했다.

=> 초반 ERD를 위의 사진과 같이 설계했었다.

단순히 User와 Order테이블을 원 투 매니의 관계로 두어 사용자가 주문을 했을 때

그 주문에 주문 전체 정보와 결제한 파일들을 다 저장하면 될 것이라 생각하고 진행하였는데

 

장고에는 다수의 파일을 한 필드에 저장할 수가 없다는 것을 프로젝트 진행 중 깨달았다...

 

DB수정

급하게 ERD를 수정하고 다음과 같이 모델을 수정하였다.

 

Order모델의 주문이 일어났을 경우 이 order_id를 OrderFile모델에 foreignkey로 두고 다량의 파일을 연속적으로

저장하는 방법을 택했다.

 

이와 같이 이용자가 파일을 저장하였을때

정상적으로 Order테이블에 주문행이 추가되고

 

그 주문행의 id에 따라 (주문행 2번 -> 3개의 파일을 올림)

=> 다음과 같이 해당 파일만큼 order_id를 참조하여 저장되는 것을 확인할 수 있다.

 

 

ERD 설계가 가장 중요하다.

프로젝트를 진행하다 모델을 수정하게 되니 코드를 모두 뒤집어 버렸는데  시간을 꽤나 낭비한 것 같다.

 

학교 전공에서 수강했던 DB설계및구현 강좌의 교수님이 항상 하시던 말씀이 프로젝트에서 데이터베이스를

설계하는데 오랜 시간을 들여야 한다며, 개발 전체 과정의 반 정도의 시간은 DB 설계와 구축에 힘을 써야한다고,,

제대로된 설계가 없으면 프로젝트 진행이 어렵다고 말씀 하셨는데.

 

오늘 그 말을 제대로 이해한 것 같다..

앞으로 프로젝트 진행 전 ERD 설계와 고찰에 시간을 많이 들여야겠다.