Claude Code 개발 자동화 플러그인 만들기 — ttutak 개발기
왜 만들었나 PRD 쓰고, 설계하고, 구현하고, 리뷰 받고, 커밋하고, PR 올리고. 매번 같은 사이클이었습니다. Claude Code를 쓰면서 각 단계를 자동화할 수 있겠다는 생각이 들었고, 그걸 하나의 플러그인으로 묶어보고 싶었습니다. Claude Code에는 스킬(Skill)이라는 시스템이 있습니다. .claude/skills/ 디렉토리에 마...
왜 만들었나 PRD 쓰고, 설계하고, 구현하고, 리뷰 받고, 커밋하고, PR 올리고. 매번 같은 사이클이었습니다. Claude Code를 쓰면서 각 단계를 자동화할 수 있겠다는 생각이 들었고, 그걸 하나의 플러그인으로 묶어보고 싶었습니다. Claude Code에는 스킬(Skill)이라는 시스템이 있습니다. .claude/skills/ 디렉토리에 마...
하네스 엔지니어링이란 LLM 에이전트에게 코드를 작성하게 할 수 있습니다. 그런데 작성하면 안 되는 코드도 작성할 수 있다는 게 문제입니다. 하네스 엔지니어링은 AI 에이전트의 행동 범위를 설계하고 제한하는 기법입니다. 프롬프트 엔지니어링이 “뭘 하라”를 잘 전달하는 기술이라면, 하네스 엔지니어링은 “뭘 하지 마라”를 시스템 수준에서 강제하는 기술...
시작하며 10주가 끝났습니다. Loopers라는 이름처럼 반복하고, 부수고, 다시 쌓았습니다. 매주 새로운 문제를 마주했고, 매주 다른 방식으로 틀렸습니다. 그 과정을 돌아봅니다. Week 1-3: 설계의 중요성 Facade 패턴과 계층 분리 처음 3주는 설계에 대한 감을 잡는 시간이었습니다. Facade 패턴을 처음 접했을 때는 왜 이렇게 ...
인기 상품 랭킹 시스템 요구사항 실시간으로 인기 상품 TOP 10을 보여줍니다 인기도 기준: 조회수, 좋아요, 주문 수를 가중치를 두어 합산 일간 집계 기준 (오늘 발생한 이벤트만 반영) Redis Sorted Set (ZSET) 선택 랭킹 시스템에 Redis ZSET을 선택한 이유입니다. ZADD: O(log N)으로 점수...
ApplicationEvent의 한계 지난 주 ApplicationEvent로 트랜잭션을 분리했습니다. 그런데 이 구조의 한계가 명확해졌습니다. 1. 메모리 기반 - 서버 재시작 시 유실 이벤트가 메모리에만 존재합니다. 이벤트를 발행하고 핸들러가 처리하기 전에 서버가 재시작되면 이벤트는 사라집니다. 2. 순서 보장 없음 비동기 핸들러가 여러 ...
2.8초짜리 트랜잭션 주문 생성 API의 응답 시간을 측정했더니 2.8초가 나왔습니다. 트랜잭션 안에서 일어나는 일들을 나열해봤습니다. 주문 생성 트랜잭션 (2.8초) ├── 재고 차감 (150ms) - 핵심 비즈니스 ├── 주문 생성 (100ms) - 핵심 비즈니스 ├── 쿠폰 사용 처리 (200ms) - 부가 작업 ├── 결제 데이터 전송 (2...
문제: PG 장애가 전체 주문을 멈추게 한다 PG(Payment Gateway) 시스템이 간헐적으로 응답이 느려지는 상황이 발생했습니다. 결과는 예상보다 심각했습니다. PG 응답을 기다리는 스레드들이 쌓이면서 전체 주문 API가 응답 불능 상태가 됐습니다. PG 하나의 장애가 주문 서비스 전체를 마비시켰습니다. 단계적 해결: Timeout → R...
문제 정의 상품 목록 조회 API가 느렸습니다. 10만 건의 데이터를 기준으로 브랜드별 가격 범위 필터링 + 정렬 + 페이징을 처리하는데 체감상 느리다는 피드백이 있었습니다. 측정을 시작했습니다. 현실적인 테스트 데이터 생성 성능 테스트는 실제 데이터와 유사한 분포로 해야 의미 있습니다. -- 10만 건 데이터 생성 프로시저 DELIMITER ...
주문 기능에서 동시성 문제 주문 기능을 구현하다 보면 세 가지 도메인에서 동시성 이슈가 발생합니다. 재고 (Product): 동시에 10명이 마지막 1개를 주문하면? 포인트 (Point): 동시에 여러 결제가 같은 포인트를 차감하면? 쿠폰 (Coupon): 동시에 여러 사람이 같은 쿠폰을 사용하면? 처음에는 세 도메인 모두 비관적 ...
DDD 개념 정리 처음에는 Entity, VO, Domain Service를 구분하는 게 이론적인 개념 정리 정도로만 느꼈습니다. 실제 코드에 적용해보니 설계가 달라졌습니다. Entity 고유한 식별자가 있습니다 (id) 시간이 지남에 따라 상태가 변합니다 같은 id를 가지면 동일한 객체입니다 @Entity public class...