장애와 삽질이 가르쳐 준 것들
실무에서 만난 문제들을 기록합니다.
Spring 장애
JPA N+1, 배치 지연, 스케줄러 데드락 — 실전 트러블슈팅 모음
아키텍처
SAGA, 분산락, 데이터 정합성 — 설계 원칙부터 분산 시스템까지
AI/DX
Claude Code, MCP, AI 에이전트 — 백엔드 개발자의 AI 전환 가이드

업무용 AI 비서의 탄생 (2편) — 기억을 입히는 이중 인덱싱
TL;DR 문제: 1편의 비서는 질문마다 백지에서 도구를 긁어, 과거 맥락이 전혀 쌓이지 않았습니다. 기억: 내 질문과 검색어를 마크다운으로 쌓고, 로컬 SQLite 벡터 저장소에 증분 인덱싱했습니다. 검색: 뜻으로 찾는 의미 기반 검색과 키워드로 찾는 단어 기반 검색을 하이브리드로 묶었습니다. 인사이트: 흩어진 조각 기록을 도메인별로 의미 군집해, 묶이기 전엔 안 보이던 패턴을 뽑아냅니다. 효과: 프롬프트에 과거 맥락과…

업무용 AI 비서의 탄생 (1편) — 도구 네 개를 한 에이전트에 엮기
TL;DR 계기: 이슈 하나 들여다보려면 이슈 트래커, 사내 위키, 모니터링, 운영 DB를 매번 손으로 오가야 했습니다. 결심: 분석에 필요한 정보가 네 곳에 흩어져 있어서, 그 자료를 모으는 일 자체를 대신해 줄 비서를 만들기로 했습니다. 탄생: 업무용 AI 비서에 네 도구를 MCP로 한꺼번에 물려서, LLM이 직접 여러 도구를 호출해 데이터를 모으게 했습니다. 변화: 도구를 오가던 컨텍스트 스위칭이 사라지고, 질문 한…

(메신저개발) 메시지 좋아요 카운트, 레디스 락 대신 Set 자료구조로 잡기
TL;DR 증상: QA 스트레스 테스트에서 좋아요 카운트가 4~8% 적게 나옴 원인: ① DB에서 읽으면 복제 지연(Replication Lag)으로 옛 값을 봄 ② Redis 숫자 카운터(INCR)는 “누가 눌렀는지”를 몰라서 같은 사람의 중복 클릭을 못 막음 해결: 숫자를 세지 않고, 누가 눌렀는지를 Set(집합)에 저장. 카운트는 집합 크기, 중복은 자료구조가 알아서 막음 효과: 오차 0%, 락도 별도 검증 로직도 필요…
LLM 답변 길이 제어 — 글자가 아닌 토큰과 max_tokens
TL;DR 증상: AI 답변 길이를 프롬프트로 제한(“N자 이내로”)해도 무시당하거나, 반대로 문장이 중간에 뚝 잘림 원인: 모델은 글자가 아니라 토큰으로 생성한다. 한글은 1글자가 평균 약 1.7토큰. 한도에 먼저 걸려서 잘리는 거였음 해결: 프롬프트 강제를 포기하고, 토큰↔글자 비율을 실측해서 파라미터 자체를 맞춤 효과: 문장이 중간에 잘리는 문제가 사라짐. retry 단계도 줄어듦 한계: 토큰 비율은 언어…
AWS AI Practitioner 3일 합격기 — 교재 0권, Claude 기출 풀이만으로
요약 (TL;DR) 공부 기간: 3일 교재: 0권. Claude한테 기출 풀이 시키기만 했습니다. 점수: 65문항 중 5문제 미만 오답 (정답률 92%+) 결론: AI 자격증 공부에 가장 잘 맞는 도구는 AI였습니다. 그리고 평소에 RAG·LanceDB·Bedrock으로 사이드 프로젝트를 굴리고 있던 게 시험장에서 그대로 정답으로 튀어나왔습니다. “이 시험은 AI에 대해 물어봤지만, 정작 합격에 가장 큰 기여를 한 건…

Datadog MCP로 운영 에러 분석 자동화하기 - 리포트 생성부터 Jira 백로그까지
TL;DR 상황: 운영 에러 분석하느라 매일 아침 30분씩 Datadog 뒤지는 중 원인: 수동 로그 분석, 주관적인 우선순위 판단, Jira 티켓 수작업 생성 해결: Datadog MCP + Claude + IntelliJ 연동으로 분석 → 리포트 → 백로그 자동화 효과: 에러 분석 시간 30분 → 5분, 우선순위 자동 분류, 팀 공유용 리포트 자동 생성 한계: MCP 초기 설정 필요, Claude Max 구독 비용…

상태 전이와 비관적 락 - 엔티티로 막은 줄 알았던 두 구멍
TL;DR 증상: 주문 단계(대기/접수/완료/취소)와 재고, 두 군데를 막았다고 생각했는데 완료된 주문이 다시 접수로 돌아가고, 잠금을 걸었는데도 재고가 마이너스로 빠졌습니다. 원인 1: 단계 검증을 서비스 코드 여기저기에 손으로 넣다 보니, 나중에 추가한 호출부에서 빠뜨렸습니다. 원인 2: 잠금은 제대로 걸렸지만, JPA가 들고 있던 낡은 재고 객체를 돌려줘서 옛 수량으로 차감했습니다. 해결: 단계는 setter를…
AI 자기검증 편향과 독립 감사관 — 검증을 코드에서 분리하기
TL;DR 증상: AI 에이전트가 작업 후 “완료했습니다”라고 단정 → 실제로는 미완·오류. 같은 패턴 3회 반복 원인: 자기가 한 일을 자기가 검증하면 편향이 낀다. “검증 후 선언하라”는 텍스트 규칙으로는 이 편향이 안 잡힘 해결: 검증을 에이전트 본인에게서 떼어내 (1) 응답 직후 단정 표현을 잡는 자동 가드 (2) 독립된 에이전트의 교차검증으로 분리 효과: “완료” 단정 후 사람이 매번 잡아주던 루프가 구조적으로…
LLM 비용 라우팅 — 질문 난이도별 모델 티어 분리
TL;DR 증상: AI 집사의 모든 응답에 최상위 모델을 고정해두니, 일상 잡담에도 가장 비싼 모델이 호출됨 원인: “좋은 모델 = 항상 좋다”는 단일 기준. 질문 난이도와 모델 등급을 매칭하지 않음 해결: 질문을 trivial / normal / deep 세 단계로 분류해 모델 티어를 라우팅 효과: normal(일상) 쿼리당 약 40% 비용 절감, 전체 API 비용 약 20~28% 절감 예상 한계: 무조건 싼 모델로…