Datadog 관측성 구축기 — LLM Observability와 구조화 로그
Datadog 관측성 구축기 — LLM Observability와 구조화 로그 OpenAI 호출과 채용 공고 크롤링 기능을 운영하면서 예외 로그만으로는 느린 구간과 외부 API 실패 원인을 확인하기 어려웠습니다. 어떤 AI 기능이 느린가? 모델별 토큰 사용량과 비용은 어떻게 달라지는가? 실패가 OpenAI 장애인지 애플리케이션 계측 코...
Datadog 관측성 구축기 — LLM Observability와 구조화 로그 OpenAI 호출과 채용 공고 크롤링 기능을 운영하면서 예외 로그만으로는 느린 구간과 외부 API 실패 원인을 확인하기 어려웠습니다. 어떤 AI 기능이 느린가? 모델별 토큰 사용량과 비용은 어떻게 달라지는가? 실패가 OpenAI 장애인지 애플리케이션 계측 코...
JD 크롤러 구현기 — 정적 HTML 파싱부터 SSRF 방어까지 채용 공고를 등록할 때 긴 본문을 직접 복사하지 않고 URL만 입력할 수 있도록 크롤러를 구현하였습니다. 처음에는 URL을 요청하고 Jsoup의 body.text()를 반환하면 끝날 것으로 생각했습니다. 하지만 사이트마다 HTML 구조가 달랐습니다. Next.js 페이지는 __NEXT...

AI 대화 후처리를 요청 트랜잭션에서 분리하기 AI 요청을 처리한 후에는 추가 분석이나 데이터 갱신처럼 사용자 응답과 바로 관계없는 작업이 이어질 수 있습니다. 이 작업을 모두 같은 요청에서 실행하면 외부 API를 기다리는 시간까지 응답이 늦어집니다. 이번 글에서는 요청 데이터가 저장된 후 Coroutine으로 후처리를 실행하고, 외부 API 호출...

리워드 생성·수령·충전 책임을 분리한 과정 리워드 기능을 하나의 메서드에서 처리하면 처음에는 구현하기 쉽습니다. 하지만 생성, 상태 변경과 실제 반영이 한곳에 모이면 수정할 때마다 여러 책임을 함께 확인해야 합니다. 이번 글에서는 리워드의 생성·수령·충전 책임을 나누고, 각 단계의 결과를 다음 유스케이스로 전달하는 구조를 정리해보겠습니다. ...
OpenAI API 호출 최적화 — 모델 비교와 WebClient 튜닝 Kotlin과 Spring WebClient로 OpenAI API를 호출하면서 모델 응답 시간뿐 아니라 연결 생성, 타임아웃과 재시도 설정도 전체 처리 시간에 영향을 준다는 점을 확인하였습니다. 이번 글에서는 모델을 비교한 방법부터 Reactor Netty의 Connection...

[MCP] Blog Generator MCP 개발 심층 분석: AI로 기술 블로그 자동 생성 서버 구축기 안녕하세요. 백엔드 개발자 정지원입니다. 현재 AI를 활용한 개발 자동화 도구 개발에 몰두하고 있습니다. 이 글은 Blog Generator MCP의 설계부터 6번의 메이저 버전 업그레이드까지의 여정을 심층적으로 다룹니다. 재미있는 점은, 이 글...

중복 리워드 처리를 막기 위해 상태 조건 UPDATE를 선택한 이유 상태를 확인한 후 엔티티를 저장하는 코드는 한 요청만 들어올 때에는 문제없이 동작합니다. 하지만 같은 자원을 여러 요청이 동시에 변경하면 두 요청이 모두 이전 상태를 읽을 수 있습니다. 이번 글에서는 이 문제를 재현하고, Spring Data JPA의 상태 조건 UPDATE로 중복...

계기 스프링 프로젝트를 진행하면서 임시 데이터베이스 구현할때, MySQL과 같은 데이터베이스 서버를 사용하지 않고, 임시로 인메모리에 데이터를 저장하는 방식을 구현하였다. 이때, Database 클래스의 맴버 변수로 엔티티 리스트를 저장할 때 static 키워드를 사용하는 예제를 보고 static 키워드의 의미와 언제 사용해야 하는지 정리하였다. ...

Series NestJS와 Socket.io를 통한 실시간 위치 처리 개발기 1 NestJS와 Socket.io를 통한 실시간 위치 처리 개발기 2 썸네일 이미지 출처 : NestJs and Socket.io chat application with data persistence 이전 장에서 MySQL에 geometr...

Series NestJS와 Socket.io를 통한 실시간 위치 처리 개발기 1 NestJS와 Socket.io를 통한 실시간 위치 처리 개발기 2 썸네일 이미지 출처 : Working with geographic features and spatial data in MySQL 8 위급 상황 대응 시스템을 개발하기 위...