본문 바로가기

전체 글36

[AI] Claude Code의 TeamCreate로 TDD 에이전트 팀 구성하기 TL;DRClaude Code의 TeamCreate 기능을 활용하여 TDD(Test-Driven Development)의 Red-Green-Refactor 사이클을 각각 전담하는 에이전트 팀을 구성했다. Team Lead가 요구사항을 태스크로 분할하고, 3개의 전문 에이전트가 순차적으로 TDD를 수행하는 구조다.사전 준비: Agent Teams 활성화Claude Code의 TeamCreate는 현재 실험적(Experimental) 기능이다. 사용하려면 Claude Code 설정 파일(~/.claude/settings.json)에 환경 변수를 추가해야 한다:{ "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" }}이 설정이 없으면 TeamCreate 도.. 2026. 3. 17.
[AI] LLM 챗봇 응답속도 모니터링: ELK 구축부터 성능 개선 전략까지 해당 글은 최근 LLM 기반 챗봇 서비스를 개발하면서 경험했던 내용을 기록하기 위함입니다.들어가며LLM 기반 챗봇을 운영하다 보면 "왜 이렇게 느리지?"라는 질문을 피할 수 없다. 하지만 체감이 아닌 데이터로 느린 원인을 파악하지 못하면 개선 방향을 잡을 수 없다.이 글에서는 Spring AI 기반 챗봇에 성능 측정 로깅을 구현하고, ELK 스택으로 수집하여 Kibana 대시보드까지 구성한 과정을 정리한다. 나아가 수집된 데이터를 기반으로 실제 응답속도를 개선할 수 있는 전략들을 함께 다룬다.1. 속도 측정의 핵심 지표LLM의 응답 속도를 평가할 때 사용자 경험과 직결되는 핵심 지표는 다음과 같다.TTFT (Time to First Token)사용자가 요청을 보낸 후, 화면에 첫 번째 응답 토큰이 나타나.. 2026. 3. 12.
UUID v7 식별값, 기본키, Primary key [Java, Kotlin] 목적: Spring Boot, Java, Kotlin 환경에서 UUID v7을 사용하는 방법에 대해 제공합니다안녕하세요 :)최근 정보유출 사건이 많은데요 예전부터 다 털린것 같긴하지만 .. 많은 사건의 원인 중에서 식별값에 대한 의견이 나와서 오랜만에 글을 올려봅니다저도 여태 개발하면서 아래와 같이 auto increment를 사용해왔었습니다.. ㅜJava@Id @GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;Kotlin@Id @GeneratedValue(strategy = GenerationType.IDENTITY)val id: Long,ㅋㅋ 딱히 이슈가 없었거든요..그냥 주변 개발자들 사이에서 UUID 사용하는게 좋다는 얘기만 들.. 2025. 12. 5.
낙관적 락과 비관적 락 낙관적 락과 비관적 락은 데이터베이스 트랜잭션에서 동시성 제어를 위한 주요 기법입니다. 데이터 무결성을 유지하면서 여러 트랜잭션이 동시에 데이터에 접근할 때 발생할 수 있는 충돌을 해결할 때 사용됩니다.낙관적 락(Optimistic Lock)데이터 충돌이 적을 것으로 가정하고, 데이터를 읽을 때 락을 설정하지 않고 트랜잭션이 데이터를 수정할 때 충돌이 발생하지 않았는지 확인하는 방식입니다. 보통 version과 같은 별도의 구분 컬럼을 사용해서 데이터가 변경되었는지 확인하며, 충돌이 발생하면 데이터베이스가 아닌 애플리케이션에서 직접 롤백하거나 재시도 처리를 해야 합니다.비관적 락(Pessimistic Lock)데이터 충돌이 많을 것으로 가정하고, 트랜잭션이 시작될 때 공유락(Shared Lock, S-L.. 2025. 4. 10.
어떻게 Monolithic 아키텍처에서 MSA 아키텍처로 진화했을까? 안녕하세요 :)이제부터 어떻게 Monolithic 아키텍처에서 MSA 아키텍처로 진화했는지 한번 알아보겠습니다. 오늘 나오는 주요 토픽은 아래와 같습니다.Monolithic부터 MSA (Microservice Architecture)가 생기는 과정Event Driven ArchitectureSaga PatternCQRSAPI GatewayCircuit Breaker PatternOrchestration여기서 나오는 이야기의 순서는 실제 역사의 진행 순서는 아니라는 거를 알고 봐주시면 좋을 것 같습니다.Monolithic Architecture태초에는 당연히 모놀리식 아키텍처가 있었죠. 하나의 코드 베이스가 하나의 실행 환경에서 함께 동작하는 구조에요 배포 단위가 하나이기 때문에 확장을 하려면은 전체를 한.. 2025. 3. 24.
시스템 간 비동기 연동 방식 분리된 시스템 간의 비동기 연동은 시스템 간의 결합도를 낮출 수 있으며, 호출된 시스템의 응답을 기다리지 않으므로 더욱 빨리 사용자의 요청에 응답할 수 있다는 장점이 있습니다. 비동기 연동 방식으로 메시징 시스템 활용, 데이터베이스 활용, CDC 활용 방식이 있습니다.메시징 시스템 활용 방식은 두 시스템 사이에 메시징 시스템을 두어 비동기로 연동하는 방식입니다. 해당 방식은 한 시스템에서 메시지를 생성해서 메시징 시스템에 송신한 이후, 다른 시스템에서 메시징 시스템으로부터 메시지를 읽어와 메시지를 처리합니다. Kafka, RabbitMQ가 주로 메시징 시스테믕로 활용됩니다. 해당 방식은 처리량이 높은 것이 장점입니다. 하지만, 메시지 유실, 메시지 소비 순서, 트랜잭션에 대한 고민이 추가적으로 필요합니다.. 2025. 1. 21.