반응형

django 8

ElastiCache Redis 읽기/쓰기 분리 (Primary / Replica)

배경운영 중인 Django 백엔드의 Redis 캐시가 ElastiCache 클러스터(Primary 1 + Replica 2)로 구성되어 있었지만, 설정이 Primary Endpoint 하나만 가리키고 있어서 모든 읽기/쓰기 트래픽이 Primary 노드에 집중되고 있었다. ElastiCache가 제공하는 Reader Endpoint를 활용해 읽기는 Replica로, 쓰기는 Primary로 분산하는 작업을 했다.1. ElastiCache 엔드포인트 종류ElastiCache Redis 클러스터를 생성하면 세 종류의 엔드포인트가 제공된다.엔드포인트연결 대상용도Primary EndpointPrimary 노드 고정읽기 + 쓰기Reader Endpoint (-ro)Replica 노드들 (라운드로빈)읽기 전용개별 노드..

AWS Lambda 환경에서 S3 Presigned URL이 만료되는 문제 해결기

문제 발견어드민 페이지에서 매니저가 제출한 증빙서류 이미지가 엑박으로 표시되는 버그가 보고되었다. 일부 이미지는 정상적으로 보이는데, 특정 이미지들만 엑박이 뜨는 상황이었다.엑박이 뜨는 이미지의 URL로 직접 접속해보니 S3에서 다음과 같은 에러를 반환하고 있었다. ExpiredToken The provided token has expired.시스템 구조프로젝트는 Django 기반 REST API 서버로, AWS Lambda + API Gateway 환경에서 운영되고 있다. 이미지 파일은 S3에 저장되며, 조회 시 Presigned URL을 생성하여 응답한다.[클라이언트] → [API Gateway] → [Lambda (Django)] → [S3 Presigned URL 생성] ..

unmanaged table에 대한 django test 하는 방법

장고의 모델 클래스에는 Meta 옵션 중 하나로 managed라는 값이 존재한다. 이는 True 또는 False이고 기본값은 True로 설정된다. True로 설정된다면 그 뜻은 다음과 같다. 쉽게 말해 장고가 해당 모델 클래스를 관리한다는 뜻이다. 이를 공식문서에서는 어떻게 표현하고 있냐면, https://docs.djangoproject.com/en/4.2/ref/models/options/#managed Django The web framework for perfectionists with deadlines. docs.djangoproject.com That is, Django manages the database tables’ lifecycles. 즉, 테이블의 수명 주기를 관리한다라고 한다. 테이..

[ 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 ] SerializerMethodField를 이용한 시리얼라이저 커스텀하기

이번 포스팅에서는 Django에서 Serializer에 대한 내용을 다뤄보려고 합니다. 한동안 포스팅을 올려야지만 생각하고 실제로는 못하고 있었네요 😂 아무리 바쁘더라도 기록은 필수..! 그러면 내용에 들어가기 앞서 왜 SerializerMethodField를 사용해야 하는지, 무엇을 하려고에 대한 내용을 정리해보려고 합니다! 우선, 현재 환자와 의사에 관련된 진료 예약 서비스를 구축하고 있습니다. 환자는 원하는 시간 특정 의사에게 진료를 받고 싶다고 요청을 보냅니다. 그러면 요청을 받은 의사는 목록을 확인하여 진료 시간을 확인하고, 해당 요청을 시간 내에 수락할 수 있도록 하는 서비스입니다. 간단한 설명을 마치고 바로 본론으로 들어가보도록 하겠습니다. def get(self, request, *args..

[ Django ] postgresql을 사용할 때 migration 관련 오류

이번 포스팅에서는 Django 프로젝트를 진행하면서 발생한 오류에 대한 기록을 하려고 한다. 우선 Django는 python 언어를 기반으로 한 프레임워크이고, 각 모듈을 app이라고 부른다. 그러니까 Nestjs 프로젝트에서 nest g mo "모듈 이름" 명령을 사용해서 모듈을 생성하는 것처럼 Django에서는 app을 생성할 때 프로젝트 폴더 내에서 아래와 같은 명령을 사용한다. $cd 프로젝트 $python manage.py startapp 앱이름 위와 같이 만들어 준다. 프로젝트 생성부터 이미 진행했다고 가정한 뒤, 오류 사항을 기록하려고 한다. migration? 그전에! migration이라는 것을 미리 좀 알아두면 좋을 것 같아 기록하려고 한다. Django에서 migration(마이그레이..

반응형