AI 에이전트로 나만의 전문 개발팀 만들기
·
AI
요구사항 분석부터 QA까지, 팀이 나눠 하던 일을 Claude Code 멀티 에이전트로 대체한 개발 파이프라인을 만든 이야기입니다.이 워크플로우는 Claude Code 플러그인으로 패키징되어 어떤 프로젝트에서나 설치해 사용하실 수 있습니다.해당 플러그인에 대해서는 아래 레포지토리를 통해 확인하실 수 있습니다. GitHub - WooJJam/claude-taskforce: 요구사항 분석, 설계, TDD, 코드 리뷰 및 QA 전 과정을 Claude Code 멀티 에요구사항 분석, 설계, TDD, 코드 리뷰 및 QA 전 과정을 Claude Code 멀티 에이전트로 자동화한 개발 파이프라인 - WooJJam/claude-taskforcegithub.com Introduce혼자 개발을 진행하면서 개인적으로 가장 ..
AOP를 적용하며 함수형 인터페이스를 직접 만든 이유
·
Backend/Spring Boot
Introduce관련 코드는 아래 레포지토리에서 확인하실 수 있습니다. GitHub - YAPP-Github/NDGL-BEContribute to YAPP-Github/NDGL-BE development by creating an account on GitHub.github.com 분산락을 구현하면서 가장 고민했던 부분은 "이 락을 어떻게 서비스 로직에 적용할 것인가" 였다. 락이 필요할 때마다 메서드 내부에 직접 락 획득과 해제 코드를 넣을 수도 있다. 하지만 이렇게 되면 비즈니스 로직 사이에 인프라 코드가 계속 섞이게 된다, 락 획득, 락 해제, 예외 발생 시 후처리 같은 흐름도 여러 곳에 흩어질 수 있다. 그래서 분산락을 AOP 기반으로 적용하려 했다. `@DistributedLock` 어노테이션..
분산 환경에서 결제 이벤트 유실 방지하기 (Outbox, Failover Scheduler, ShedLock)
·
Backend/Spring Boot
이 글은 이벤트 유실 문제 발견 → Outbox 패턴 도입 → 멀티 인스턴스 대응까지, 두 편에 걸쳐 작성했던 일련의 과정을 하나로 정리한 글입니다. 자세한 내용은 아래 링크를 참고해 주시기 바랍니다. 이벤트 유실을 방지하기 위한 Outbox Pattern 도입기Introduce풋살 매칭 서비스에서 매치 신청 시 결제 완료 후 구장주에게 SMS를 보내고, 매치 신청자에게 FCM 알림을 전송하는 등 부가 로직을 실행해야 한다. 초기에는 이 모든 처리를 결제 요청과 동woojjam.tistory.com ShedLock으로 분산 환경에서 스케줄러 중복 실행을 방지하자Introduce 이벤트 유실을 방지하기 위한 Outbox Pattern 도입기Introduce풋살 매칭 서비스에서 매치 신청 시 결제 완료 후..
ShedLock으로 분산 환경에서 스케줄러 중복 실행을 방지하자
·
Backend/Spring Boot
Introduce 이벤트 유실을 방지하기 위한 Outbox Pattern 도입기Introduce풋살 매칭 서비스에서 매치 신청 시 결제 완료 후 구장주에게 SMS를 보내고, 매치 신청자에게 FCM 알림을 전송하는 등 부가 로직을 실행해야 한다. 초기에는 이 모든 처리를 결제 요청과 동woojjam.tistory.com이전 게시글에서는 이벤트 유실을 방지하기 위해 Outbox 패턴을 도입하고, fallback 경로로 스케줄링에서 polling하도록 하였다. 멀티 인스턴스로 배포된 서비스에서 스케줄러를 돌려본 적 있는가? 처음에는 별 문제가 없어 보인다. 하지만 어느 날 고객 CS가 들어온다.결제 완료 알림이 두 번 왔어요. 로그를 뒤져보면 여러개의 인스턴스가 동시에 같은 Outbox 레코드를 조회해서 각자..
이벤트 유실을 방지하기 위한 Outbox Pattern 도입기
·
Backend/Spring Boot
Introduce풋살 매칭 서비스에서 매치 신청 시 결제 완료 후 구장주에게 SMS를 보내고, 매치 신청자에게 FCM 알림을 전송하는 등 부가 로직을 실행해야 한다. 초기에는 이 모든 처리를 결제 요청과 동기적으로 처리하였다. 하지만 이는 부가 로직에서 오류가 발생할 경우 트랜잭션이 rollback 되어 결제 데이터가 유실될 수 있는 가능성이 있었으며 알림 발송에 의해 스레드가 블로킹되어 응답 시간이 지연되기도 하였다. 따라서 Spring Event를 사용하여 `ApplicationEventPublisher + @Async + EventListener` 구조로 변경하였다. 스프링 이벤트를 발행하여 트랜잭션과 관심사 분리하기Introduce 내가 개발중인 서비스에서 특정 상품을 결제하면 FCM을 통해 결제..
카카오톡 Bizmessage로 알림톡 전송하기
·
Backend/Spring Boot
1. 들어가기 전스케줄링으로 정해진 시간에 강수량을 조회하고, 이에 따라 사용자들에게 강수 알림톡을 전송하는 기능을 개발하고자 한다. 정해진 시간에 강수량을 조회하는 기능은 이미 완성되었기에 특정 사용자에게 알림톡을 전송하는 기능만 구현하면 된다.2. 친구톡과 알림톡처음에 강수량에 따라 사용자들에게 메세지를 전송한다 라는 요구사항을 받았을 때 단순히 카카오톡 비즈 채널로 메세지를 전송하면 되겠다고 생각하였다. 어찌보면 반은 맞고, 반은 틀렸다고 할 수 있다. 왜냐하면 카카오톡으로 메세지를 전송하는 방식에는 2가지가 있는데 그게 친구톡 과 알림톡 이다.2.1 친구톡카카오 비즈니스 채널에는 친구톡과 알림톡이 있다. 먼저 친구톡은 수신자 입장에서는 일반적인 모먼트를 통해 발송된 메시지이다. 하지만 발송 과정에..
분산 환경에서 MySQL Named Lock으로 분산 락을 구축하고, 동시성 제어하기
·
Backend/Spring Boot
Introduce본 게시글에서 다루는 모든 테스트 코드는 아래 레포지토리에서 확인하실 수 있습니다. GitHub - WooJJam/concurrency-deep-diveContribute to WooJJam/concurrency-deep-dive development by creating an account on GitHub.github.com 풋살 매치 참가 신청 서비스를 개발하던 중, 매치의 정원을 초과하여 참가자가 등록되는 문제를 발견하였다. 실제로 매치에는 최대 12명이 참여 가능했으나, 동시 요청이 몰릴 경우 12명을 훌쩍 넘는 인원이 등록 되었다. 단일 사용자의 신청 흐름은 단순하다.풋살 매치 조회현재 참가자 수 확인참여 가능하다면 참가자 InsertPG사 결제 API 호출결제 성공 및 실패..
Virtual Thread로 병렬 호출하여 Thread Pool 고갈 문제 해결하기
·
Backend/Spring Boot
Introduce서비스를 개발하다 보면 단일 API 내에서 외부 API 호출이 N번 반복되는 구조가 자연스럽게 생겨난다. 최근에 장소 하나에 사진 10장을 보여주자 라는 요구사항이 있었다. 처음에는 단순히 순차 조회로 구현을 하였고, 로컬에서 테스트해 보니 1초 남짓한 응답 시간이 걸렸고 "좀 느리긴 하지만 괜찮겠지" 싶었다. GitHub - YAPP-Github/NDGL-BEContribute to YAPP-Github/NDGL-BE development by creating an account on GitHub.github.com 나도갈래 프로젝트는 유튜버의 여행 영상 속 동선을 AI가 분석하여 장소 정보를 제공하는 서비스이다. 장소 상세 정보를 조회해야 하는데 이때 Google Maps Places..
Swagger MCP Server 만들기 4편 - Spring AI로 MCP 서버를 구축하고, Claude Code에 연동하기
·
AI
이 시리즈는 Backend API의 Swagger 문서를 MCP 서버로 제공하여, LLM에서 자연어로 API를 검색하고, 완전한 네트워킹 코드를 자동 생성하는 시스템을 만드는 과정입니다.1편 : LLM 기반 API 탐색 자동화 설계2편 : Swagger API 파싱3편 : DB 저장 설계와 트러블 슈팅4편: Spring AI로 MCP 서버를 구축하고, Claude Code 연동하기 (현재 글)모든 코드는 해당 레포지토리에서 확인할 수 있습니다. GitHub - WooJJam/swagger-mcp-server: Spring AI를 사용하여 Swagger API를 LLM이 자연어로 조회할 수 있도록 제공Spring AI를 사용하여 Swagger API를 LLM이 자연어로 조회할 수 있도록 제공하는 MCP S..
Swagger MCP Server 만들기 3편 - DB 저장 설계와 트러블 슈팅
·
AI
이 시리즈는 Backend API의 Swagger 문서를 MCP 서버로 제공하여, LLM에서 자연어로 API를 검색하고, 완전한 네트워킹 코드를 자동 생성하는 시스템을 만드는 과정입니다.1편 : LLM 기반 API 탐색 자동화 설계2편 : Swagger API 파싱3편 : DB 저장 설계와 트러블 슈팅 (현재 글)4편 : Spring AI로 MCP 서버를 구축하고, Claude Code 연동하기모든 코드는 해당 레포지토리에서 확인할 수 있습니다. GitHub - WooJJam/swagger-mcp-server: Spring AI를 사용하여 Swagger API를 LLM이 자연어로 조회할 수 있도록 제공Spring AI를 사용하여 Swagger API를 LLM이 자연어로 조회할 수 있도록 제공하는 MCP ..