💻 프로그래밍/Django
-
Deadlock 유발할 수 있는 Django ORM (feat. InnoDB)💻 프로그래밍/Django 2022. 8. 14. 01:52
안녕하세요! 개발자 Jay 입니다 😄 이번 포스팅에서는 데드락(Deadlock)을 유발할 수 있는 Django ORM과 InnoDB 엔진을 알아보려고 합니다. 예전에 update_or_create()하는데 갑자기 Dead Lock 너는 왜나오냐?! (feat. transaction)라는 포스팅을 업로드 했던적이 있는데, 시간이 좀 지나니까 기억이 좀 안나기도 하고 이번에 다시한번 InnoDB 부터 알아 보려고 합니다. (내용도 조금 빈약했던 것 같습니다 ㅎㅎ) 1. InnoDB란? 이노DB(InnoDB)는 MySQL을 위한 데이터베이스 엔진이며, MySQL AB가 배포하는 모든 바이너리에 내장되어 있다. MySQL과 사용할 수 있는 다른 데이터베이스 엔진에 대한 개선 사항으로 PostgreSQL을 닮은 ..
-
Django App은 어떻게 실행되는 걸까?💻 프로그래밍/Django 2022. 8. 11. 09:38
안녕하세요! 개발자 Jay 입니다! 오늘은 Django App이 어떻게 실행되는지에 대해 알아보려고 합니다! 처음 개발을 시작할때는 runserver 명령어를 치면 "알아서 되는구나"라고 생각했고 라이브 배포시 "uwsgi, gunicorn 같은 wsgi들이 django app과 연결되니까 실행이 되겠지" 정도로 약간 추상적으로 알았던 것 같아요. 그래서 오늘은 한번 전반적으로 디버깅을 해보면서 runserver 명령어가 실행되면 어떻게 django app 실행까지 되는지 확인해보겠습니다. (본 포스팅은 Django 3.2.4 기준으로 작성되었습니다!) 🏃♂️ runserver 먼저 우리는 django app을 실행시킬때 ./manage.py runserver 명령어를 사용합니다. 명령어 자체를 그냥 ..
-
Django ORM 잘 알고 쓰자! 특히 JOIN 할때!💻 프로그래밍/Django 2022. 8. 3. 16:54
안녕하세요! 개발자 Jay입니다~! 최근에 신규 서비스에 소셜 기능 피쳐를 개발했습니다. 플랜에 좋아요, 댓글을 붙이는 기능이었는데 좋아요 개수와, 댓글 개수를 함께 노출해야 하는 요구사항이 있었습니다. 위 이미지처럼 인스타그램의 좋아요 개수를 표시하는 것과 동일한데요, 추가로 댓글의 개수도 노출되는 기능입니다. 자 그러면 모델링과 ORM을 보면서 문제를 설명드리겠습니다. 1. django ORM 간단히 모델 관계를 보여드리면 이렇습니다 (세부 필드 제거) 되게 간단합니다. Plan, Account가 PlanComment(댓글), PlanLike(좋아요)에 manyTomany로 연결되어 있는 형태입니다. 요구사항에 맞게 쿼리셋을 가져올 때 댓글, 좋아요 개수를 가져오도록 ORM을 작성했습니다. annot..
-
DRF Renderer에 따라 다르게 동작되는 서버 Response💻 프로그래밍/Django 2022. 7. 10. 19:29
회사 신규 서비스를 개발하던 중 슬랙 알림으로 500 에러가 올라왔습니다!;; (500 에러 보면 경기 일으킴) 에러 메시지를 보니까 토큰 리프래시 하는 api에서 오류가 났더라고요! method를 확인해보니 GET으로 요청하고 있었습니다. 토큰 리프래시 api는 POST로만 요청이 가능했고, 해당 메서드가 없는 경우 405를 리턴하는 걸로 알고 있었습니다. postman으로 테스트를 했을 때도 500 에러가 아닌 405를 리턴해주고 있었습니다! 뭔가 이상함을 느꼈고 에러 메시지를 유심히 보다가 UserAgent를 보았습니다. Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0 음... ios, android에서 보내..
-
Session과 JWT에 대해 알아보자잇! (feat.인증, 인가)💻 프로그래밍/Django 2022. 6. 20. 02:09
안녕하세요! 개발자 JAY입니다! 오늘은 session과 jwt 에 대해서 알아보려고 합니다. 추가적으로 인증(Authentication)과 인가(Authorization)에 대해서도 이야기해보려고 해요! 1. 인증(Authentication)과 인가(Authorization)의 차이 먼저 인증과 인가에 대해서 알아보겠습니다. 그 이유는 session, jwt가 인증과 관련이 있고 간혹 인증과 인가를 헷갈리는 분들이 계시기 때문이에요! 알고 보면 정말 간단합니다! 먼저 인증(Authentication)은 말 그대로 내가 누군지 인증하는 겁니다. 예를 들어 회사에 들어갈 때 얼굴 인증 등으로 본인이 누구인지 인증을 하게 되죠? ID/PW를 통해 로그인하는 과정과 비슷합니다. 인가/권한 부여(Authoriz..
-
Redis로 Cache Server를 만들어 보자! (feat. django-cacheops)💻 프로그래밍/Django 2021. 2. 18. 07:28
안녕하세요! 운동하는 개발자 Jay입니다 😄 오늘은 이름하여 c.a.c.h.e 를 Django에서 사용해보려고 합니다. 지금 진행 중인 토이 프로젝트가 있는데, 이 프로젝트에서 캐시를 써보려고 해요! 캐시란 무엇이고 왜 사용하는지를 하나씩 알아가 보겠습니다! 1. What is Cache? 💰 (Cache is Cash.... 는 드립) 캐시(Cache)란 자주사용하는 데이터를 미리 복사해 놓은 저장소를 말합니다. 쉽게 설명하자면 내 키(key와 키를 이용해 뒤에서 설명까지 이어지기 위한 라임 this is 언어유희) 를 알고 싶은데, 매번 키를 재는 게 아닌 처음 재논 키의 정보를 저장해놔서 원할 때마다 그 정보를 보는 게 캐시입니다. 좀 더 Django와 연관 지어서 설명해보겠습니다. Django에서..
-
Django + Rest Framework 에서 Service Layer를 구성하는 방법💻 프로그래밍/Django 2021. 2. 13. 09:17
안녕하세요! 지난 포스팅에서는 비즈니스 로직을 넣는 위치에 대해 정리해봤는데요! 이번에는 그중 Service Layer를 통해 비즈니스 로직을 정리하는 과정 등에 대해 정리해보려고 합니다. 1. Service Layer 란? 🤔 간단히 말하자면 비즈니스 로직을 Service로 분리하고, 이런 비즈니스 로직들이 Class(클래스)나 Function(함수)으로 이루어진 형태(?)입니다. 예를 들어 쇼핑과 관련된 API를 호출할 때, 장바구니에 물건을 담거나, 장바구니에 담긴 아이템들의 카테고리를 나눠 카운트를 한다거나 하는 모든 것들을 비즈니스 로직이라고 할 수 있습니다. 그리고 이런 비즈니스 로직을 View, Model이 아닌 Service라는 곳으로 위치시킨걸 Service Layer라고 합니다. Ser..
-
Django 비즈니스 로직을 분리하는 4가지 방법💻 프로그래밍/Django 2021. 2. 13. 06:07
안녕하세요! 오늘은 Django에서 비즈니스 로직을 분리하는 방법들에 대해 말해보려고 합니다! 최근에 개발을 하면서 비지니스로직에 대한 고찰을 해보게 되었고. 여러 블로그들을 참고하면서 그 블로그들을 통해 배운 내용들과 제 생각들을 함께 정리해보겠습니다. 0. 들어가기전 Django 는 완벽한(?) MVC 패턴의 프레임워크입니다. Model, View, Controller 로 나누어져 있으며 정확히는 Model, Template(View), View(Controller) 입니다. (살짝 용어가 다름) MVC 패턴 덕분에 Django 뿐만 아니라 여러 프레임워크에서 코드 재사용, 프로젝트 구조 파악 등을 쉽게 할 수 있습니다.(이하 MTV) 간단히 Django의 MTV에 대해 설명해보면 Model: 데이터..