본문 바로가기

django

(13)
운영 중인 서비스에서 DB 구조 변경하기 (feat. 기존 데이터 이관) 운영 중인 서비스에서 데이터베이스(DB) 구조를 변경할 때, 기존 데이터를 안전하게 유지하면서 마이그레이션하는 것은 매우 중요한 작업입니다. 특히, 기존 1:1 관계를 N:N 관계로 변경할 때 잘못된 마이그레이션을 수행하면 데이터가 유실될 위험이 큽니다. 실제 운영중인 서비스에서 이러한 문제를 해결한 내용입니다. 1. 기존 문제 상황처음에는 Chat 모델에서 user(의뢰인)와 artist(전문가)를 각각 1:1 관계 (ForeignKey) 로 저장했습니다. 하지만 시간이 지나면서 채팅방에 여러 명이 참여하는 기능이 필요해졌고, 이를 위해 N:N 관계로 변경해야 했습니다.단순히 ForeignKey → ManyToManyField 로 변경하면 기존 데이터가 삭제될 위험이 있기 때문에, 데이터를 안전하게 이..
Django에서 API GateWay와 Dynamo DB를 이용한 채팅 Django에서 DynamoDB와 RDS를 조합하여 채팅 시스템을 구축한 방법 1. DynamoDB란? 📌 DynamoDB의 기본 개념 • AWS에서 제공하는 Managed NoSQL 데이터베이스 • Key-Value 및 Document Store 형태의 저장 방식 • 자동 확장(Auto Scaling) 및 높은 가용성을 제공 • RDS와 달리 Schema-less 구조 → 유연한 데이터 모델링 가능 📌 주요 기능 1. Primary Key 설계 • Partition Key: 데이터를 효율적으로 분산하는 키 (예: chat_room_id) • Sort Key: 같은 Partition 내에서 정렬을 위한 키 (예: timestamp) 2. Global Secondary Index(GSI) & Local..
구글 인앱 결제 웹훅 pub sub 1. Pub/Sub 개념 설명1.1 Pub/Sub이란 무엇인가?Pub/Sub(Publish-Subscribe)은 비동기 메시징 서비스로, 발행자(Publisher)와 구독자(Subscriber)가 메시지를 주고받을 수 있도록 돕는 Google Cloud의 서비스다. • 발행자(Publisher): 메시지를 특정 주제(Topic)에 게시 • 구독자(Subscriber): 해당 주제의 메시지를 구독하고 처리 이를 활용하면 시스템 간의 결합도를 낮추고, 실시간 데이터 처리를 간편하게 할 수 있다. 즉 웹훅으로 사용할 수 있다. 1.2 왜 구글 인앱 결제에서 Pub/Sub을 사용해야 할까?구글 인앱 결제에서는 사용자가 구매, 구독 취소, 결제 실패 등의 이벤트를 발생시킨다.하지만 클라이언트에서 직접 구매 상태를..
Django 비동기 작업 추적 기능 개선 마이파이 서비스(사주 및 인적성 웹 앱)에는 무료 분석과 유료 분석이 존재합니다. 유료 분석의 경우, 나의 파이 분석과 사주 분석의 두 가지 유형으로 나뉘며, 특히 나의 파이 분석에서는 천간 분석, 음양 분석, 계절 분석, 오행 분석, 직업 적합도 분석 총 5개의 내용을 보고서 형태로 제공합니다. 이 과정에서 유료 분석 보고서 생성 API는 많은 데이터를 처리하고, GPT API와의 통신을 통해 생성된 결과를 DB에 저장해야 하므로 작업 시간이 길어질 수 있습니다. 따라서 이러한 작업은 Celery를 활용하여 비동기로 처리하도록 구현했습니다. 그러나 비동기 처리의 특성상 사용자 경험(UX)에 큰 불편함이 있었습니다.유저들은 분석 요청을 보낸 후 진행 상태를 알 수 없었으며, 작업이 언제 완료될지 예상할 ..
Django Admin 커스텀 Django Admin 커스텀 매뉴얼 목적 💡 장고 관리자 커스텀을 보다 쉽게 진행을 위해 매뉴얼화 합니다. 간단한 요약 장고 관리자 커스텀 관련 내용 장고 관리자 커스텀 관련 전반적인 내용이 담겨있습니다. 문서 내용 목록 Admin에 모델 등록하기 관리자 페이지에 모델을 등록하는 방법 커스터마이징 옵션 관리자 페이지의 커스텀 옵션별 정리 커스터마이징 메소드 관리자 페이지의 메소드별 사용 방법 CSS, JavaScript 재정의 관리자 페이지의 CSS, JavaScript 사용자 지정 추가 필드에 커스텀 위젯 적용 관리자 페이지에서 사용하는 필드(fields)의 커스텀 위젯 적용 방법 Admin Temlate 재정의 관리자 페이지 사용자 지정 Template 사용 방법 Admin 목록 페이지(ListVi..
Django ORM ORM이란? ORM(Object-relational Mapping)은 데이터 베이스와 객체지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다. 원래 데이터베이스 서버의 어떤 데이터를 조회, 추가, 수정, 삭제 등을 할 때는 sql이라는 언어를 사용해야 한다. 그런데 sql을 사용하지 않고 각 언어 그대로를 활용해서 sql 코드를 만들어내는 라이브러리가 있다. 그걸 ORM 이라고 한다. 장고에서는 Django Model 이 장고의 ORM이다. Model Manager 데이터 베이스 질의 인터페이스를 제공한다. 기본 Manager로써 모델클래스.object 를 제공한다. Model Manager를 통해서 해당 모델 클래스의 DB 데이터를 추가, 조회, 수정, 삭제가 가능하다. Qu..
Django와 Axios를 이용한 좋아요 구현하기 이번엔 Django와 axios를 이용해 좋아요 기능을 구현해보자 Like라는 모델은 각각 Post와 User의 1:N 관계이다. class Like(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='%(class)s_post', null=True, blank=True) user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='%(class)s_user', null=True, blank=True) 디테일 페이지로 들어왔을 때 해당 글의 좋아요를 클릭할 수 있다. 좋아요 버튼 클릭과 동시에 해당 글의 좋아요 수가 변경되고 좋아요 버튼의..
Django CBV 기반 CRUD 만들기 장고 ClassBaseView 기반으로 crud 만들기 이번에는 장고의 클래스 뷰만 이용해서 crud_app(게시판)을 만들어 보려 한다. 아래에는 crud_app 의 조건들이다 모델 - Post 제목 내용 생성일 생성자 수정일 수정자 좋아요 사용 여부 기능 게시글 목록 조회 게시글 상세 조회 게시글 생성 게시글 수정 게시글 삭제 게시글 좋아요 * 좋아요는 AJAX 처리(JS - axios 라이브러리 사용) 조건 CBV 기반의로 작성 게시글은 작성자만 수정, 삭제가 가능 게시글 좋아요는 사용자별 1번 가능 중복 Template include 사용 1. ListView 일단 게시글들의 리스트들이 보이는 페이지 list_page가 필요하다. list_page는 비교적 간단하게 구현이 가능하다. class P..