Programming/Django 9

[Django, AWS S3] S3를 사용해서 django static파일 관리하기

배경 이야기 지금 운영중인 서비스에는 대용량 파일(10MB~2GB)을 업로드/다운로드 해야하는 작업이 있다. 이 작업을 기존에는 django의 static으로 자체 관리하였는데 두 가지 문제가 있었다. 1. 백엔드(api) 서버의 저장공간의 부족을 일으킬 수 있다. 2. 대용량 업로드/다운로드는 네트워크 비용을 증가시킨다. 이 2가지 문제는 Cloud Server가 제공해주는 Storage 서비스를 통해 쉽게 해결 될 수 있다. 따라서 우리는 Azure의 'Azure Storage' 서비스를 사용하고 있었는데, 이번에 aws로 서버를 옮기면서 Storage 서비스도 'Amazon S3'로 변경하기로 했다. 본 게시글은 이 이전작업에 기초하여 작성됨을 알고 읽기를 바란다. 참고한 글 aws s3 미디어 서..

Programming/Django 2022.01.21

[DRF] 귀찮은건 싫어! ViewSet 사용해보기

지금까지는 필자는 처음 백엔드를 구현할 때, nodejs + express + MariaDB(MySQL)로 시작했었다. 그걸 하면서 느낀건... 귀찮다. 너무. 진짜 너무 단순한 로직들인데 그걸 일일이 post, get, patch 나누어서 검증하고, 반복되는 코드를 적는게 정말이지 싫었다. 그런데 django의 존재를 알게 되었고, 귀찮은 작업을 하지 않고 필요한 로직과 모델만 짜면 api가 생긴다고 생각해서 환상을 가지고 왔으나, 그냥 똑같았다. 모델을 만들어서 db를 파이썬으로 작업한다는것 정도 말고는 이게 정말 더 좋은가... 생각했지만, 그건 DRF를 잘 몰라서 그랬던 것이었다. [Django] APIView, Mixins, generics APIView, ViewSet을 알아보자 django ..

Programming/Django 2021.11.21

[DRF] Serializer로 역참조의 역참조 모델 가져오기

https://stein-log.tistory.com/27 Django foreign key를 사용했을 때 역참조(DRF) 결론부터 말하자면 참조하는 모델(ohlcv)과 참조되는 모델(share_announce)가 있을 때, 참조되는 모델.참조하는모델_set으로 접근가능하다. 이때, 참조하는 모델 foreign key 설정시 related_name을 설정해주 stein-log.tistory.com 지난 게시글에서는 1뎁스 역참조 필드를 어떻게 가져오는지 알아보았다. 이번에 만난 문제는 부모 모델을 참조하는 자식 모델을 참조하는 손자 모델을 부모 모델의 serializer에서 참조하는 방법이다. (복잡도 하다...) 아마 이렇게 까지 뎁스가 있는걸 굳이 serializer에서 해야하나 싶지만, 해당 ser..

Programming/Django 2021.10.22

[Django, Docker] gunicorn에 vscode debugger 붙이기

※ gunicorn을 쓰지 않더라도 적용가능하니, 읽은 후 게시글 하단을 참고 What I want. django 작업을 하다보면 당연히 에러가 생기고, 어떤 변수에 어떤 값이 들어있는지 확인하는 경우가 많다. 현재 필자는 django가 docker container 내부에 있기 때문에 다음과 같은 일련의 과정을 거친다. 1. 해당 컨테이너의 로그를 띄워놓음(또는 docker-compose log) 2. 에러가 발생하는 지점 근처에 "감으로" 변수를 출력하는 print문을 출력 3. 코드를 저장 -> 코드를 실행 -> 코드를 저장(저장을 해야 로그가 다시 뜬다) 4. 변수 확인후 "아 이게 아니구나" 후 다른 변수 출력하는 print 추가 5. 2~5무한반복 꽤나 귀찮고 은근히 시간이 많이 드는 일이다...

Programming/Django 2021.10.20

[DRF] get_queryset에서 벗어나기(get 사용)

drf에서 api를 구현할 때, 필자는 get_queryset을 메인으로 하여 api를 구성하였다. get_queryset을 사용하는건 아래의 docs를 참고하고 진행하였다. https://www.django-rest-framework.org/#quickstart Home - Django REST framework www.django-rest-framework.org https://www.django-rest-framework.org/api-guide/filtering/ Filtering - Django REST framework www.django-rest-framework.org 다만 이렇게 get_queryset만 사용하면 결론적으로 [sql로 할 수 있는것 + serializer의 보조] 만을 사..

Programming/Django 2021.10.15

Django foreign key를 사용했을 때 역참조(DRF)

결론부터 말하자면 참조하는 모델(ohlcv)과 참조되는 모델(share_announce)가 있을 때, 참조되는 모델.참조하는모델_set으로 접근가능하다. 이때, 참조하는 모델 foreign key 설정시 related_name을 설정해주면 해당 이름으로 접근할 수 있다.(필자는 ohlcv로 설정) 그러니까.. django가 알아서 해준다. 구글링을 했을 때, 정참조를 할 때는 select_related를 역참조를 할 때는 prefetch_related를 쓰라는 얘기를 보았다. 하지만 두 방식 모두 cache에 미리 담아둬서, db에 한 번 더 쿼리를 보내지 않게 해주도록 support하는 역할이지, 해당 function을 쓴다고 해서 return되는 query_set에 해당 내용이 담겨져있는게 아니다. ..

Programming/Django 2021.10.15

postgres에 django를 활용해 csv 업로드 하기

필자는 mysql-nodejs로만 DB-API를 다루어 보았다. django를 사용하면 DRF(Django REST Framwork)와 ORM(Object Relational Mapping)이 매우 편하다는 얘기를 들어, 회사에서 새롭게 진행하는 프로젝트의 구조를 django-postgres를 사용해보기로 했다. 이번 작업은 기존에 정리해놓은 csv를 postgres로 업로드 하는 일이었다. 우선 처음 고민했던 사항은 1. 이걸 postgres로 바로 업로드해야하는가? 2. django를 통해 업로드해야하는가? 첫 번째 방법은 django의 ORM이 어떻게 구성되는지 모르겠으나, DB와 django가 독립적으로 돌아버리니 충돌이 날 수 있다고 생각이 들었고, 두 번째 방법은 csv와 같이 큰 파일을 업로..

Programming/Django 2021.09.29