본문 바로가기

전체 글6

Model Context Protocol(MCP) 알아보기 최근 GPT를 비롯한 대형 언어 모델(LLM)을 다양한 서비스에 접목하려는 시도가 늘고 있습니다. 하지만 실제로 LLM을 도입하려고 하면 생각보다 다양한 문제에 부딪히게 됩니다.• LLM이 실행해야 할 기능을 어떻게 정의하고 일관성을 유지할 수 있을까?• 함수나 외부 API를 직접 연결하려면 어떤 구조가 필요할까?• 단순한 문장 생성에서 벗어나 기능을 실행하게 만들 수 있을까?이러한 문제를 해결하기 위해 Model Context Protocol(MCP)이 등장했습니다. MCP는 AI 모델이 단순히 텍스트를 생성하는 것을 넘어, 외부 데이터 소스 및 도구와 연결될 수 있도록 지원하는 개방형 표준 프로토콜입니다. 이를 통해 AI 시스템은 다양한 데이터 소스와 안전하게 상호작용할 수 있습니다. MCP란 무엇인.. 2025. 4. 1.
Django 다중 서버 환경 동시성 제어하기(select_for_update/redis lock) 다중 서버 인스턴스 환경에서 하나의 데이터베이스 row에 여러 서버가 동시에 접근할 경우 Race condition이 발생할 수 있습니다. 예를 들어, 한정된 수량의 시리얼번호를 요청 순서대로 발급하는 시스템을 구축한다고 가정해 보겠습니다.이때, 동시에 여러 사용자가 동시에 요청하면 중복 발급이 발생할 가능성이 있습니다.from django.db import modelsclass SerialNumber(models.Model): id = models.CharField(max_length=32, unique=True) is_used = models.BooleanField(default=False) created_date = DateTimeField(auto_now_add=True)다음은 간.. 2025. 2. 23.
Django에서 JSON 파일로 동적 상수 클래스를 생성하기 서버 개발을 진행하면서 특정한 상태 코드, 카테고리, 코드 값 등을 상수(Enum) 형태로 정의하는 경우가 많습니다. 예를 들어, 동물의 번호를 관리하는 Enum을 아래와 같이 정의할 수 있습니다.from enum import IntEnumclass AnimalNumberEnum(IntEnum): ALLIGATOR = 1 BEAR = 2 CAT = 3 DOG = 4 ELEPHANT = 5 ... 하지만 새로운 상수를 추가하거나 기존 값을 변경할 때마다 하드코딩을 수정해야 하고, 변경된 내용을 배포해야 하는 불편함이 있습니다. 이러한 방식은 유지보수 비용을 증가시키고, 관리의 어려움을 줄 수 있습니다. 이러한 문제를 해결하기 위해 JSON 파일을 활용하여 별도로 상수에 활용.. 2025. 2. 1.
Django TextChoices로 상수 관리하기 EnumPython에서 열거형 상수를 관리할 때 Enum 클래스를 자주 사용합니다. from enum import Enumclass StatusEnum(Enum): PENDING = "Pending" APPROVED = "Approved" REJECTED = "Rejected" Enum을 사용했을 때의 장점 • 코드 가독성 향상: 상수를 그룹화하여 일관된 코드를 작성 • 구조적 관리 가능: 열거형을 통해 상수로 관리하므로 코드의 유지보수성을 높임 하지만 Enum 클래스에는 몇 가지 단점이 있습니다.  1. value 속성을 통해 값에 접근해야 함Python Enum에서 열거형 멤버는 객체로 동작하며 내부적으로 이름(name)과 값(value)을 속성으로 가지고 있습니다.따라서 실제 값에 .. 2025. 1. 5.
FieldTracker와 Signals를 활용한 Django 모델 변경 로그 관리 django에서 모델 데이터 변경이력을 관리할 때는 주로 simple history를 사용합니다.simple history: https://django-simple-history.readthedocs.io/en/latest/simple history를 사용하면 쉽게 데이터 이력을 관리할 수 있지만, 변경이 잦을 경우 데이터가 지나치게 많이 쌓여 DB 리소스 낭비와 조회 속도 저하 등의 문제점이 있습니다.FieldTracker와 Signal을 사용하여 더 효율적으로 변경 이력을 관리할 수 있습니다.FieldTrackerFieldTracker는 모델의 특정 필드의 변경 사항을 추적하는 유틸성 필드입니다.FieldTracker는 django-model-utils 패키지에서 제공됩니다.from django.d.. 2024. 12. 29.
DRF Serializer에서 트리 구조 데이터 캐싱 전략 Tree 구조와 같이 계층형 데이터 모델 조회 시 데이터 조회 성능을 개선하기 위해 여러 방안을 시도한 경험을 공유합니다. modelclass Tree(MPTTModel, TimeStampModel): name = CharField(max_length=200) order = IntegerField(null=True, blank=True) parent = TreeForeignKey( "self", on_delete=PROTECT, null=True, blank=True, related_name="children" )  serializerclass TreeSerializer(serializers.ModelSerializer): children = seriali.. 2024. 12. 28.