🌈 프로그래밍
[ Django ] select_related()와 prefetch_related()
Django를 좀 한다 그러면 이 둘의 개념은 필수적으로 알아야 한다. (그래야 밥벌어 먹고 살 수 있엉..) 기본 개념을 숙지하고 반복해서 실무에 적용할 수 있도록 하여 내 것으로 만들어야겠다! 사용하는 이유? - QuerySet은 기본적으로 Lazy Loading(지연 로딩) 방식을 선택한다. - 하지만 SQL로 한번에 많은 양의 데이터를 가지고오고 싶을 때가 있으며 그럴때 위의 메소드들를 사용한다. - 즉, 관계가 있는 object를 Eager Loading(즉시 로딩) 하기 위해서 사용한다. 이 둘의 차이점? - 1:1, 1:N, N:M의 관계중에 따라 달리 사용되어진다. - 우선 가장 큰 차이점으로는 추가 쿼리가 발생하는지 안하는지이다. 1. select_related - select의 경우 1..
Django Session Cookie Age 알아보고 커스텀하기
Django 프로젝트의 루트 경로에 있는 settings.py에 정의되어 있는 세션 관련 내용이 다음과 같았다. REST_FRAMEWORK REST_FRAMEWORK = { "DEFAULT_AUTHENTICATION_CLASSES": [ "rest_framework.authentication.SessionAuthentication", ], } INSTALLED_APPS INSTALLED_APPS = [ ... "django.contrib.sessions", ... ] MIDDLEWARE MIDDLEWARE = [ ... "django.contrib.sessions.middleware.SessionMiddleware", ... ] API 테스트를 진행하던 도중, 아래와 같은 응답을 받은적이 있었다. { "..
zsh: command not found: mysql
엊그제까지만 해도 mysql 명령어가 잘 먹었었는데,, 무슨 원인인인지는 모르겠지만 바로 zsh: command not found: mysql 에러가 났다.. ~/.zshrc의 PATH를 건드리지도 않았는데.. 해결법은 정말 간단 그 자체였다. mysql-client 를 설치하고, 설치 완료 후 아래의 명령어를 입력해주고 > source ~/.zshrc 로 컴파일 하면 끝!
[ django ] AWS lambda raw sql 에서 django raw sql로 TypeError: not enough arguments for format string 에러
AWS 정상 동작 쿼리문 SELECT -- 생략 DATE_FORMAT(DATE_ADD(m.schedule, INTERVAL 9 HOUR), '%Y.%m.%d %H:%i') schedule, -- 생략 FROM Match WHERE -- 생략 AND DATE_FORMAT(DATE_ADD(m.schedule, INTERVAL 9 HOUR), '%T') between '08:00:00' and '11:00:00' 위의 쿼리의 의미 1. 데이터를 가져오는데 시간 값을 해당 포맷으로 지정하고 가져와! 2. 시간 데이터를 가져오는데 시간값만 가져오고, 해당 시간이 08시부터 11시 사이인 데이터만 가져와! 해당 쿼리를 서버쪽 @shared_task로 이전해야 했기에, 굳이 ORM으로 변경하지 않고 사용하던 쿼리를 ..
[ Django ORM ] 문자열 숫자를 int로 캐스팅해서 정렬해보자.
보통 문자열 숫자를 정렬한다고 하면 .. ["60", "20", "0", "120", "0", "80"] 위와 같이 문자열로 이루어져있는 숫자들이 있다고 가정해보자. 별 다를 것 없이 정렬한다면 어떤 결과가 나올까? 실제 결과는 아래와 같다. ['0', '0', '120', '20', '60', '80'] 0 다음에 120이 바로 나오게 된다. 왜냐하면 너무 당연하게도 앞문자열에 따라 120의 1이 20보다 빠르기 때문이다. 실제 나는 정렬하려고 하는 기준 데이터들은 다음과 같았다. 해당 필드는 문자열이고 문자 + 숫자가 함께 저장되어있는 필드였다. 우선, BAD_WEATHER_ 이라는 문자열은 모두 공통이므로 from django.db.models.functions import Substr Substr..
[ node/express ] 외부 API post 요청 시 json Array 객체를 포함해서 전송하기
외부 API를 사용하려면 외부 api 요청을 하기 위해서는 가장 먼저 제공해주는 API document를 이해하는 것이 첫 번째 단계이다. 어떻게 요청을 보내야 하고 필수 값은 어떤 것이 있는지, 필요한 헤더 정보는 무엇이 있는지 등등 파악해야 한다. 문서도 꼼꼼이 보지 않고 요청을 날리는 바보 같은 행동은 이제 그만~ (제 이야기에요) POST 요청 시 필요한 값 분석 내가 사용하려고 하는 외부 API를 분석해보니 다음과 같은 데이터가 필요했다. path : str method : str header : json object body : json Array path는 요청을 어디로 날릴지에 대한 endpoint이고, method는 요청을 어떻게 할 건지, get인지 post인지.. 그렇지만 나는 npm..
[ python + github Action ] PR 리스트 자동화 하기 (with. pygithub)
코드 리뷰 문화를 제대로 정착하기 위해서 팀 레포에 대한 PR 목록들을 자동화하여 리스트업 할 필요가 있었다. 그러기 위해서 좀 리서치를 해본 결과 아래의 좋은 레퍼런스가 있었다. 뱅크 셀러드 코드리뷰 우아한형제들 기술블로그 공통시스템개발팀 코드 리뷰 문화 개선 이야기 | 우아한형제들 기술블로그 {{item.name}} 안녕하세요. 공통시스템개발팀 배대준입니다. Merge Request(Pull Request)를 생성했는데 리뷰어는 묵묵부답이고 직접 요청하자니 업무를 방해하는 건 아닌가 걱정하신 적이 있으신가요? 작 techblog.woowahan.com 코드 리뷰 in 뱅크샐러드 개발 문화 | 뱅크샐러드 안녕하세요, 뱅크샐러드 BanksaladX iOS Engineer… blog.banksalad.co..
[ python ] celery 모듈에 대해서 알아보자.
Celery 들어가기 전에.. Celery 4.0 버전은 장고 1.8 이상의 최신 버전을 지원한다. 따라서 장고 1.8 미만이라면 Celery 3.1 버전을 사용! 또한 같이 사용하는 모듈인 celery-singleton과 django-celery-beat가 있다. 추가로 더 알아보자. 모듈 설명 Python으로 작성된 분산 메시지 전달을 기반으로 한 비동기 작업 큐(Asynchronous task queue/Job queue)이다. 셀러리를 사용해 분산처리 프로세스를 작성할 수 있다. 비동기로 작업을 처리할 수 있도록 도와주는 파이썬 프레임워크이다. 따라서 셀러리는 worker(워커)라고 불리는 프레임워크이다. 사용하는 이유? 웹 서버는 동기적으로 처리하기 때문에 오래 걸리는 연산이나 오래 걸리는 작업..
[ TIL ] 데이터베이스 정합성, DB Concurrency
DB Concurrency 여러 사용자가 동시에 서버에 요청을 하고, 각각의 요청은 모두 다를 수 밖에 없다. 어떤 요청은 새롭게 데이터베이스에 데이터를 쓸 수 있고, 어떤 요청은 데이터를 조회하기 위해서 요청을 보낼 수 있다. 이번 포스팅에서는 데이터베이스 정합성과 관련된 내용을 간략하게 정리해보려고 한다. 데이터베이스의 동시성? DB에 다수의 사용자가 동시에 접근하는 일은 비일비재 하다. 동시성은 이러한 상황에서 Transaction이 순차적으로 실행되는 것이 아니라, 순서에 상관없이 동시에 실행되는 것을 의미한다. 따라서, 개발자는 동시성을 신경쓰고 관리해 줘야 한다. Transaction 격리 수준 RDBMS에서 처리하는 방식을 알아보자. 우선, Transaction 격리 수준이란 여러 Trans..
[ FastAPI ] pytest를 사용해서 테스트 코드를 작성해보자
Git Repository GitHub - tasddc1226/fastapi Contribute to tasddc1226/fastapi development by creating an account on GitHub. github.com pytest를 사용해서 간단하게 테스트를 해보자. 사전 준비사항으로 작성된 fast api가 있어야 한다. pip install pytest를 통해서 pytest module을 설치한다. 비동기에 대한 테스트를 위해서는 추가로 pytest-asyncio까지 설치해주자. For Test 아래와 같이 새로운 유저를 생성하는 api가 있다. 테스트를 해보자! @router.post("/", status_code=status.HTTP_201_CREATED, response_mo..