2024. 6. 7. 10:10ㆍ카테고리 없음
Django를 활용한 웹개발 프로젝트 회고
개발과정
사용자 인증과 메인페이지, 각 기능별로의 이동을 구현한 후, 다음은 기능들을 구현하는 것이 목표였습니다. 기능들에 대한 백엔드를 구축하기 전에 각 기능들이 사용할 데이터들을 DB에 넣어야 했습니다. 그 때 기준으로 Django에서는 DB를 MYSQL로 선정하고 있었으며, 데이터는 CSV파일 형식으로 가지고 있었습니다. CSV파일의 크기는 적게는 50KB 정도에서 많게는 120MB 까지 많은 파일이 존재했습니다. 이런 파일들을 MYSQL에서 지원하는 Data Import Wizard를 사용하기에는 이식 속도가 너무 느리다는 문제점과 한글에 맞는 코덱이 존재하지 않는 문제점이 발생하였습니다.
도전과제와 해결책
- 도전과제 : Data Import Wizard의 느린 속도, cp949 코덱을 지원하지 않는 문제
- 해결책 : Django 커맨드를 이용한 데이터 Input
도전과제 1 : Data Import Wizard의 성능
문제 : GB단위의 매우 큰 CSV파일도 아니기 때문에 MYSQL Workbench에서 제공하는 기능을 사용해도 충분하지 않을까라는 생각을 했었지만, 데이터 파일을 하나만 돌려놓고 다른 개발 문서 작업을 하는데 도저히 끝나지 않는 작업에 매우 당황함을 느꼈고, 또 다른 몇 개의 CSV파일은 utf-8이 아니라 cp949 코덱을 사용해야 한글이 읽히는 파일들이 존재하여, 그런 파일 같은 경우는 아예 에러를 띄우는 문제가 발생했습니다.
해결책 : Django 커맨드를 작성하여 CSV 파일을 읽고 이전에 생성한 모델 인스턴스에 데이터베이스를 저장할 수 있는 코드를 작성하여 update_or_create를 이용해 데이터를 업데이트 하거나 생성하는 작업을 자동화하였습니다.
obj, created = model.objects.update_or_create(
defaults=obj_data,
**{model._meta.pk.name: row[model._meta.pk.name]}
)
결론 및 배운점
Django 커맨드를 사용하여 데이터를 전체 넣는데 얼마나 걸릴 지 예상이 안되는 시간에서 3~4시간 정도의 시간으로 단축하는데 성공하였으며, 인코딩 오류에 대해서도 해결 할 수 있었습니다. 또한 앞으로의 프로젝트에서 데이터를 넣을 때 어떤 방법을 써야하는가에 대해 공부하는 시간도 가질 수 있었습니다. 이 과정에서 현재의 아쉬운 점은 bulk_create를 사용하면 대량의 데이터를 더 효율적으로 작업할 수 있어 시간 단축에 더 도움이 될 수 있었는데, 이 부분은 그 후에 공부를 하면서 알았기 때문에 아쉬움이 존재합니다.