반응형 Django13 Django + FastAPI 혼합하여 백엔드 만들기 (개요) 이번에는 공부 차원에서 실험적인 포스팅을 진행할까 합니다. RESTful API 백엔드 개발을 FastAPI만 사용하려다보니 몇가지 걱정이 앞섰습니다. 1. RESTful API 서비스에서 웹 서비스까지 추가 확장될때 세션 구현을 어떻게 하지? 2. Django의 장점인 미들웨어를 얼마나 직접 구현해야 하지? 3. 마이그레이션을 잘 관리할 수 있나? 4. 종속성이 없는 FastAPI 구조를 일관되게 끝까지 잘 유지할 수 있나? 뭐 생각해보면 더 많겠을수도있고 제가 언급한게 아니라고 생각할 수도 있을것 같습니다. 개인적으로는 위에 언급된 부분을 처음부터 고민한것은 아닙니다. 각자의 장점이 될만한것만 잘 조합해서 사용해보면 어떨까?가 궁금증에서 해당 포스팅의 시작이 되었습니다. 그렇다면 바로 mkdir 해야.. 2022. 6. 8. Django ALB unhealthy가 계속 뜬다면 Health checks failed with these codes: [400] ALB를 적용하였는데 Health_check를 실패하는 경우가 있습니다. 그런데 400 에러가 발생을 합니다. 헬스 체크를 위해 django-health-check를 설치 해보았지만 여전히 400 status가 발생하였습니다. 해당 400 호스트 화이트 리스트의 문제 였습니다. EC2의 PrivateIP를 적용하니 해결되었습니다. 참고 블로그 https://lhy.kr/elb-healthcheck-for-django 2021. 10. 13. Cookie 등록 후에도 axios.post에 403 에러가 계속 뜨는 경우 Django에서 ajax나 axios 와 같은 호출을 하는 경우 흔하게 403 에러를 볼 수 있습니다. 그 이유는 django에서 기본적으로 csrf를 기본적으로 검수하고 있기때문입니다. csrf에 대한 제사한 설명은 아래 블로그에서 자세히 설명하여 링크 걸어둡니다~ CSRF 공격이란? 그리고 CSRF 방어 방법 CSRF 공격(Cross Site Request Forgery)은 웹 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 itstory.tk 일반적으로 csrf전달할 token을 포함시키는 .js 파일하나 만들어서 import 하는 경우가 대부분입니다. // cookie_csrf.js // us.. 2021. 8. 22. bulk_create가 id 값을 리턴해 주지 않는다면~? 한번에 대량의 데이터를 저장하거나 업데이트를 해야하는 경우가 많이 있습니다. 그럴때 쉽게 생각해볼 수 있는 방법이 아래와 같은 방법일것입니다 # 아래와 같이 하면 엄청난 성능 저하를 맛 볼 수 있게 됩니다 for data in data_list: models.CartDesign.objects.create( user=self.request.user, order_product=product.id, order_info_id=order_info.id, uuid=data.uuid)) 하지만 엄청난 성능 저하를 경험하게됩니다. for문을 돌면서 N번 만큼 SQL에 쿼리를 날리기 때문입니다. 중간에 롤백이라도 하게 된다면 정말 비효율적이겠죠? 데이터가 적은 수라면 상관 없겠지만 데이터도 많고 사용자도 많다면 엄청난 .. 2021. 7. 24. django mysqlclient error # mysqlclient 설치하기전에 미리 설치 sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pip install mysqlclient 2021. 6. 1. Django image URL을 통해 model에 저장하기 디자인 에디터 API에게 이미지 결과를 돌려 받는 작업을 하게 되었습니다. 전달해주는 이미지는 임시 파일로 저장되어 일정 시간이 지나면 해당 API에서 사라지는 것이였습니다. 그렇기때문에 URL만 저장하면 소용이 없었고, 이미지를 Django media 서버에 저장해야했습니다. 간단하게 이미지를 메모리에 적재시켰다가 저장하면 될줄 알았습니다. from django.core.files.uploadedfile import InMemoryUploadedFile 제가 몰라서 그런건지 이미지를 가져오는것까지는 순탄하게되었지만 model에는 저장이 되질 않았습니다. 그렇다고 Error를 뱉는것도 아닌 모든게 동작하면서 파일만 존재하지 않았습니다. 그래서 파일로 임시로 저장했다가 다시 업로드하는 방식을 찾다가 쉽고 .. 2021. 5. 18. Django 다수 업데이트할때 bulk_ 활용하기 다수의 데이터를 저장할때, 예를 들어 이렇게 대량의 이미지를 저장한다고 해보겠습니다. # ex len(data_list) = 100개 for count, data in enumerate(data_list): data.img = img[count] data.title = title[count] data.save() 가장 간단하게 생각해보면 이렇게 하는게 가장 쉬운 것 같습니다. 뭐 단 한번 이렇게 한다면 크게 문제될것은 없을 수 있습니다. 뭐 사용자가 이렇게하는게 아니고 관리지만 쓴다던지 그럴때도 간편하게 한번 짤 수 있을것입니다. 하지만 이때 리스트가 100개라면 쿼리는 100개가 발생 하게 됩니다. 많다면 많고 적다면 적을 수 있습니다. 그렇다면 어떻게 해야 효율적으로 짤수 있을까요?? creat_li.. 2021. 1. 3. Django에서 memcached 사용하기 (우분투, 윈도우) 이전에 작성한 캐시의 중요성을 깨닫는다는 글을 이어서 쓰려고 하는데 이전 포스팅을 다시보니 해당문제는 캐시의 문제는 아니였던것 같습니다.;;; 항상 이전에 작성한 코드를 다시 읽으면 잘못된것만 같고 왜 저렇게 했나 하는 느낌이네요 ㅎ 캐시의 중요성을 깨닫..다 Django를 공부하면서 개발까지 모든 걸 혼자 해야 하다 보니 우선순위를 정해서 진행할 수밖에 없었네요;; 처음 python을 배우고 > Django를 배우고 > HTML, CSS, Javascript를 배우고 > ubuntu 과정으로 학습하 install-django.tistory.com 이번에는 최적화를 시도해보기위해 캐싱을 사용해보기로했습니다. 노가다로 django와 제이쿼리로 상품의 셀렉트 할때마다 금액과 안내 이미지를 불러오는데 상품 안.. 2020. 6. 17. [CRITICAL] WORKER TIMEOUT (pid:00000) 이전 포스팅처럼 timeout 에러가 떴지만 변함없이 얼마지나지 않아 timeout에러가 계속 뜨는것이였습니다. 이유를 좀 찾아봐야지. 로그를 뒤져보기 시작했습니다. 서버가 스타트되면 gunicorn worker들이 일을 시작하게 됩니다~ 저는 2 core 서버를 쓰기때문에 worker가 5개가 보이네요 // worker = core * 2 + 1 [CRITICAL] WORKER TIMEOUT (pid:32200) 5개의 woker중에 pid 32200번이 아주 심각한 문제가 터졌다는 신호를 보냈습니다. 순간 정신이 번쩍 떠졌습니다. "아 timeout은 nginx에서만 있는게 아니구나!" 바로 문서를 찾아봤습니다. -t INT, --timeout INT / 보통 30초로 세팅하는것이 일반적 그래서 저는.. 2020. 5. 27. Out of range value for column (SQLite is working but MySQL is not working) 저는 고객에게 입력받는 텍스트 데이터의 경우 안전성을 위해 당연한 이야기겠지만 항상 form 검증을 거치고 있습니다. (나 혼자만 쓰는거라면 내가 공격하지 않으면 뭐 큰일이 없겠죠? ㅎ) 저는 혹시 모를 부분을 방지하기위해 한번 딕셔너리로 정리하는 편인데요 이것도 개발 방식에 따라 매번 달라지는것 같습니다. 프론트엔드와 백엔드를 나누냐 장고 개발자들이 장고 템플릿을 써서 개발하는지 그런게 많이 좌우할것 같긴합니다. 저는 독학이다 보니 협업도 안해봤고 프론트, 백엔드로 안해봤지만 혼자 REST API를 만들고 하다보니 나눌수밖에 없는 경우가 생기기는 하더라고요 order_dic = {} order_dic['order_date'] = order_date #str order_dic['company'] = co.. 2020. 5. 18. request로 전송받은 csv file 바로 읽고 데이터베이스 저장 가끔씩 csv나 엑셀 등의 내용을 DB에 넣어야 하는 경우가 존재합니다. 다들 어떻게 하시는지 모르겠지만 저는 로컬에서 테스트를 해본 후 superuser만 접근할 수 있는 페이지 하나를 임시로 만들어서 그냥. csv 파일을 올립니다. 특히 foreign key를 사용해 외래 키값을 물고 저장해야 하는 경우가 있을때는 다른 방법은 너무 복잡하고 시간이 많이 걸리는 것 같은 느낌이 있습니다. # EX post_obj = Post.objects.create(user=self.user) Like.objects.create(post=post_obj) 아무래도 프로덕션 환경이라면 배포도 다시 해야 하고 작업 프로세스도 돌아야 하니 시간대를 잘 보고 하시는 게 좋으실 듯합니다. 본론으로 돌아와 전송받은 csv를 읽.. 2020. 5. 11. 파일 삭제하면 미디어 폴더에서도 파일 삭제하기 첫 프로젝트를 만들면서 가장 걱정이 되는 부분은 아무래도 서버 관리가 아닐까 싶습니다. 파이썬 기반 장고의 경우 ORM 및 Gunicorn과 같이 간편하게 서버와 DB를 운용할 수 있도록 지원해줍니다. 실제 서비스가 진행되면 데이터를 함부로 지울 수 없기 때문에 처음에 세팅해두는 것이 중요하다고 생각이 들었습니다. 텍스트의 경우 크게 걱정이 되질 않았지만 파일과 이미지는 걱정이 많이 되었습니다. 저장 공간도 비용! 트래픽도 비용! 유지도 비용! 다 비용입니다. 그런데 장고의 경우 파일을 업로드하고 지우더라도 데이터 베이스에서는 지워지더라도 파일은 그대로 남아 있게 됩니다. 지웠다고 모든 내용과 파일이 지워지는 것도 큰일이기 때문에 해당 정책이 맞다고는 생각하지만 그래도 필요한 경우가 상당히 많이 있습니다.. 2020. 4. 14. 이전 1 2 다음 반응형