본문 바로가기

분류 전체보기

(32)
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..
Django GIS 지오펜싱 1. 지오펜싱(GeoFencing)이란?지오펜싱(Geofencing)은 특정 지리적 영역(예: 건물, 공원, 상점 등)에 가상 경계를 설정하고, 사용자의 위치가 이 경계를 출입할 때 이벤트를 발생시키는 기술입니다.지오펜싱을 통해 다음과 같은 기능을 구현할 수 있습니다. • 사용자가 특정 지역에 도착하거나 떠날 때 알림 전송 • 매장 근처를 지나갈 때 할인 쿠폰 제공 • 출퇴근 시간에 따라 자동 출석 체크 Django에서는 Django GIS(Geographic Information System)를 사용하여 PostGIS 기반의 공간 데이터를 처리하고 지오펜싱을 구현할 수 있습니다. Django에서 지오펜싱을 구현하는 이유자녀의 실시간 위치를 알려주는 앱 개발 중 자녀가 특정 위치를 출입할 때 부모에게 알..
구글 인앱 결제 웹훅 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)에 큰 불편함이 있었습니다.유저들은 분석 요청을 보낸 후 진행 상태를 알 수 없었으며, 작업이 언제 완료될지 예상할 ..
while 순환보다 for 순환 사용하기 가능하다면 파이썬다운 순환인 for item in iterable을 사용하는 것이 좋다. 순환을 작성할 때 for와 while 중 선택해야 하는 경우가 종종 있다. 물론 두 가지 모두 사용할 수 있다. 사용하는 언어가 무한 반복자(iterable)을 가지고 있다면 for만 사용해도 충분하다. while과 for 사이의 형식적 동일성에도 불구하고 일반적으로 while 순환보다 for 순환이 더 파이써닉하다고 느껴진다. 물론 많은 예외가 있지만 파이썬에서 순환을 사용할 때는 거의 전부라 해도 좋을 정도로 컬렉션이나 생성기 함수 (Generator Function), 생성기 순환 표현식 (Generator Expression), 사용자 정의 반복 가능 클래스와 같은 반복 가능 객체 사이를 순환하는 경우가 대부..
순환 중 객체 변형 순환 중인 객체를 변형시키면 안된다. 때로는 잘못된 결과가 발생하지 않고 순환을 벗어날 수도 있지만, 그래도 안좋은 습관이다. 여기서 주목해야 할 점은 일부 파이썬 객체가 불변(immutable)이라는 것이다. 예를 들어 str, bytes, tuple, frozenset 객체를 순환하는 경우 기본 컬렉션이 변형되는 문제가 발생하지 않는다. 그럼에도 불구하고 많은 파이썬 객체들은 가변(mutable)임과 동시에 반복 가능하다. 대표적으로 list, dict, set, bytearray 등이 있다. 순환 중인 객체를 변형시키려고 하면 여러 가지 면에서 문제를 일으킬 수 있다. my_set = {'h','e', 'l', 'l', 'o'}my_set = set(my_set)for i in my_set: ..
dict.key()로 순환하지 않기 dict.items()가 필요할 경우 dict.keys()로 순환하지 않기파이썬의 목록과 색인 위치와 값의 사상(mapping)을 거의 동일시하는 경우가 있다.더보기파이썬에서 "사상"이라는 용어는 일반적으로 "mapping" 또는 "association"의 의미로 사용됩니다. 이 개념은 특정 집합의 원소들 간의 관계를 정의하는 것입니다. 파이썬에서는 사상(mapping)을 보통 딕셔너리(dictionary)와 같은 데이터 구조로 구현합니다.여기서 색인 위치와 값의 사상을 거의 동일시하는 경우는, 목록(list)와 그 인덱스 간의 관계를 의미합니다. 목록(list)은 인덱스와 값 간의 직접적인 사상을 제공합니다. 즉, 목록의 각 인덱스는 해당 인덱스에 위치한 값을 가리킵니다. 이 경우, 인덱스는 사상의 "..
색인을 순환하는 대신 enumerate 사용하기 C에서 파생된 언어를 사용하는 개발자들은 목록이나 다른 데이터 구조를 순환할 때 대부분 색인 요소를 사용하는 경향이 있다. 하지만 이것은 일반적으로 파이썬답지 않은 순환 방법에 해당한다. 아래와 같은 코드는 일반적으로 코드의 악취로 간주된다.for i in range(len(items)): process(i, i[i]) 순환안에서 색인 위치를 전혀 사용할 필요가 없는데도 불구하고 색인을 사용하는 것은 좋은 방법이 아니다. 더 관용적인 사용 방식은 아래와 같이 단순하다.for i in items: process(None, item) 색인과 그에 연결된 항목을 모두 사용하는 경우가 비교적 흔한데, 이 경우 enumerate 함수를 사용하는 것이 훨씬 관용적이고 직관적이다.for i, idx in enumer..