💻 프로그래밍
-
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..
-
[NestJS] 모든게 싱글톤 인스턴스 아니었어? (imports, providers 주의사항)💻 프로그래밍/node 2022. 7. 21. 22:22
안녕하세요! 개발자 Jay 입니다:D 이번 포스팅에서는 nestjs의 싱글톤(singleton)에 대해서 주의사항을 말씀드리려고 합니다! 아시는 분들은 아시겠지만 nestjs에서는 개발자가 인스턴스를 직접 생성하는 것이 아니라 모듈을 주입하는 과정을 통해 nestjs가 알아서 싱글톤 인스턴스를 생성합니다. 제가 최근에 nestjs에 대해 공부를 시작해서 잘 모르고 공부하던 때 생겼던 경험을 공유합니다. 1. 소켓 응답이 왜 두 번?? 웹소켓을 스터디하던 중 이상한 현상을 발견했습니다. 클라이언트에서 메시지를 보내면 서버에서 두 번 응답이 왔습니다. 처음에는 서버에서 이벤트를 동일하게 뭔가 잡고 있어서 생기는 오류인가 했는데 그런 건 아니었습니다. 로직을 봐도 특별히 이상한 부분은 없었습니다. 며칠 삽질을..
-
어느날 신입 개발자가 나에게 물었다..."python에서 staticmethod를 사용하는 것에 있어서 메모리 이슈가 없는 것 일까요?" (feat. java)💻 프로그래밍/Python 2022. 7. 17. 18:57
제곧내(제목이 곧 내용)입니다! ㅋㅋㅋ 최근 저희팀에 합류하신 ㅅㄱ님께서 개발 중 이런 질문을 하셨습니다. 사실 이질문을 듣고 라는 생각이 먼저 떠올랐습니다ㅠㅠ 그리고 python을 메인으로 쓰면서 이런 기본적인 부분을 숙지하지 않았다는게 부끄럽기도 했습니다. (함께 자료를 찾아보고 토론의 시간을 가짐) 처음 C, C++로 개발을 했을 때는 메모리에 관리에 신경 쓰면서 개발을 했던 것 같은데 python으로 개발하면서 이런 부분을 신경을 안 썼던 것 같습니다. (python은 개발자가 동적으로 메모리를 할당할 수 없고 알아서 관리해줍니다) C++처럼 malloc(), calloc(), realloc(), free() 등을 통해 동적 할당을 제어하지도 않고, 변수에 그냥 갖다박으면(?) 알아서 메모리 할당..
-
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에서 보내..
-
[SSL인증서] gogetssl 인증서 ncloud certification manger 등록💻 프로그래밍/네트워크 2022. 6. 20. 21:56
안녕하세요! 개발자 Jay입니다! 신규서비스 개발을 하면서 LB에 ssl 인증서를 등록이 필요하여 삽질했던 과정을 정리해봅니다! 크게 어려운 부분은 없으나 약간 헷갈리는 부분이 있어서 ㅋㅋ 1. gogetssl 인증서 구입 및 등록 먼저 메인 대시보드에서 New Order 버튼을 클릭하면 새로운 ssl 인증서 주문 페이지로 이동합니다. 인증서 종류를 선택합니다. 제가 사용할 인증서 종류 Wildcard SSL 입니다. (ex: *.jay.com) 종류에 따라 가격이 다르며, 신규서비스이기 때문에 미래가 어떻게 될지 모르니(😂) 1년으로 선택하고 결제를 진행합니다. 다음은 CSR을 입력하는 폼이 나옵니다. 자세히 보면 온라인 CSR Generator가 있어서 그걸 클릭하면 CSR을 생성할 수 있는 폼으로 ..
-
Session과 JWT에 대해 알아보자잇! (feat.인증, 인가)💻 프로그래밍/Django 2022. 6. 20. 02:09
안녕하세요! 개발자 JAY입니다! 오늘은 session과 jwt 에 대해서 알아보려고 합니다. 추가적으로 인증(Authentication)과 인가(Authorization)에 대해서도 이야기해보려고 해요! 1. 인증(Authentication)과 인가(Authorization)의 차이 먼저 인증과 인가에 대해서 알아보겠습니다. 그 이유는 session, jwt가 인증과 관련이 있고 간혹 인증과 인가를 헷갈리는 분들이 계시기 때문이에요! 알고 보면 정말 간단합니다! 먼저 인증(Authentication)은 말 그대로 내가 누군지 인증하는 겁니다. 예를 들어 회사에 들어갈 때 얼굴 인증 등으로 본인이 누구인지 인증을 하게 되죠? ID/PW를 통해 로그인하는 과정과 비슷합니다. 인가/권한 부여(Authoriz..