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

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

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

안녕하세요. 백엔드 개발자 정지원입니다. 요즘은 AI를 활용한 개발 자동화 도구를 만들고 있습니다. 이 글에서는 Blog Generator MCP를 설계한 과정부터 6번의 메이저 버전 업그레이드까지를 정리합니다. 이 글도 MCP의 도움을 받아 작성했습니다. 목차 블로그를 쓰고 싶지만 MCP란 무엇인가 전체 아키텍처 버전별 변화 ...

상태를 확인한 후 엔티티를 저장하는 코드는 한 요청만 들어올 때에는 문제없이 동작합니다. 하지만 같은 자원을 여러 요청이 동시에 변경하면 두 요청이 모두 이전 상태를 읽을 수 있습니다. 이번 글에서는 이 문제를 재현하고 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 위급 상황 대응 시스템을 개발하기 위...