fos-blog/study
01 / 홈02 / 카테고리03 / 시리즈
01 / 홈02 / 카테고리03 / 시리즈

카테고리

  • AI 페이지로 이동
    • RAG 페이지로 이동
    • agent 페이지로 이동
    • claude-code 페이지로 이동
    • harness 페이지로 이동
    • llm 페이지로 이동
    • ops 페이지로 이동
    • practice 페이지로 이동
  • algorithm 페이지로 이동
    • Alias Method: 가중치 랜덤 선택을 전처리 O(n), 추출 O(1)로 바꾸기
    • Welford's Online Algorithm: 값을 저장하지 않고 평균과 분산 계산하기
  • architecture 페이지로 이동
    • distributed-systems 페이지로 이동
    • domain 페이지로 이동
    • evolution 페이지로 이동
    • patterns 페이지로 이동
  • database 페이지로 이동
    • milvus 페이지로 이동
    • mysql 페이지로 이동
    • opensearch 페이지로 이동
    • qdrant 페이지로 이동
    • redis 페이지로 이동
    • vespa 페이지로 이동
    • DB Connection Pool Saturation과 Thread Pool 격리
    • 커넥션 풀 크기는 얼마나 조정해야 할까?
    • MyBatis 기본기 — XML Mapper, resultMap, 동적 SQL, 운영 패턴 정리
    • MyBatis와 JPA/Hibernate 트레이드오프 — 레거시 백엔드를 다루는 시니어 관점
    • 한국어 형태소 분석기 Nori vs Lindera — OpenSearch에서 Milvus로 갈 때 어휘 검색은 유지되나
    • 정규화와 역정규화: 무결성과 조회 비용 사이의 선택
    • 벡터 DB 5종, 아키텍처는 어떻게 다른가
    • 벡터 DB 5종을 실제로 벤치마크했다 — 같은 recall에서 QPS는 얼마나 갈리나
    • 벡터 DB 어떻게 고를까 — OpenSearch · Milvus · Qdrant · Vespa · pgvector 비교
    • 벡터 DB를 실제로 도입한 사례 — 빅테크 프로덕션
  • devops 페이지로 이동
    • docker 페이지로 이동
    • k8s 페이지로 이동
    • Envoy Proxy
    • Graceful Shutdown
    • 종료 신호는 어디서 멈추는가
  • http 페이지로 이동
    • HTTP Connection Pool
    • HTTPS와 TLS: 핸드셰이크, 인증서, 종료 지점
  • java 페이지로 이동
    • concurrency 페이지로 이동
    • jdbc 페이지로 이동
    • spring 페이지로 이동
    • spring-batch 페이지로 이동
    • testing 페이지로 이동
    • Java 동시성 락 정리 — 커머스 메뉴/프로모션 정책 캐시 갱신 관점
    • JVM 튜닝 실전: 메모리 구조부터 Virtual Threads, GC 튜닝, 프로파일링까지
    • 로그에 traceId 남기기 — MDC 부터 OpenTelemetry 까지
    • Java StampedLock — 읽기 폭주에도 쓰기가 밀리지 않는 락
    • Virtual Thread와 Project Loom
  • javascript 페이지로 이동
    • typescript 페이지로 이동
    • AbortController
    • Async Iterator와 제너레이터
    • CommonJS와 ECMAScript Modules
    • 제너레이터(Generator)
    • Http Client
    • Node 백엔드 운영 패턴 — Streams 백프레셔, pipe/pipeline, 멱등성 vs 분산 락
    • Node.js
    • `setImmediate()`
  • kafka 페이지로 이동
    • Kafka 클러스터 아키텍처: Broker, KRaft Controller와 복제
    • Kafka 기본 개념: Topic, Partition, Offset과 Segment
    • Kafka 실전 설계: 파티션 전략, 컨슈머 그룹, 전달 보장, 재시도, 순서 보장 트레이드오프
    • Kafka 파티션·리밸런스·컨슈머 지연 운영
    • Kafka를 로그로 이해하기: 복제, 재처리, 상태와 데이터 통합
    • Spring Kafka 컨슈머 오프셋 커밋과 트랜잭션 정렬: AckMode, manual ack, 멱등 처리
  • linux 페이지로 이동
    • fsync — 리눅스 파일 동기화 시스템 콜
    • SSH forced command 로 배포 키가 실행할 수 있는 명령 제한하기
  • mlops 페이지로 이동
    • llm-serving 페이지로 이동
    • model-router 페이지로 이동
    • Python CUDA 버전 생태계 — nvidia-smi, nvcc, pip, conda가 다 다른 버전을 말하는 이유
    • GPU 컨테이너의 CUDA 버전 호환성 — nvidia-smi부터 이미지 다이어트까지
    • Kubernetes GPU 노드에서 /run tmpfs가 꽉 차서 Pod가 안 뜰 때
    • GPU·CUDA·MPS 기초 — 자바 백엔드 개발자가 처음 만나는 그림
    • Multi-process GPU 워크로드 — 자바 ThreadPool 사용자가 만나는 모델 차이
    • ML 서비스 성능 분석 워크플로 — 자바 백엔드 트러블슈팅과 다른 점
    • 한 GPU 를 여러 프로세스가 나눠 쓰기 — Time-Slicing 과 MPS
  • network 페이지로 이동
    • Connection reset by peer는 누가 보낸 걸까 — 리버스 프록시 홉마다 TCP 연결은 따로 논다
    • L2(스위치)와 L3(라우터)의 역할 차이
    • L4와 VIP(Virtual IP Address)
    • IP Subnet
  • observability 페이지로 이동
    • Observability 입문: 시니어 백엔드가 장애를 탐지하고 대응하는 방식
    • K8s 위 Spring Boot 앱의 메트릭 수집
  • python 페이지로 이동
    • Python async/await — CompletableFuture·Reactor 와 다른 점, 그리고 blocking I/O 함정
    • Python 의존성 관리 — Java Maven/Gradle 사용자가 만나는 첫 충격
    • FastAPI 기초 — Spring Boot 사용자가 빠르게 익히는 법
    • Java 개발자를 위한 Python 심화 — OOP·데코레이터·컨텍스트 매니저
    • PyTorch 기초 — 텐서, 디바이스, 그리고 모델 로딩이 무거운 이유
    • Java 개발자를 위한 Python 문법 핵심
    • ThreadLocal 에서 contextvars 로 — Python 의 요청 컨텍스트 전파
    • OCR 동작 원리 — Layout · Text · Post-process 3단계
    • Python 서버의 RSS가 줄지 않는 이유: CPython, gc.collect(), malloc_trim
  • rabbitmq 페이지로 이동
    • RabbitMQ Basics — 실전 백엔드 관점에서 정리하는 메시지 브로커 기본기
    • RabbitMQ vs Kafka — 백엔드 메시징 선택 기준과 실전 운영 관점
  • resume 페이지로 이동
    • 경험 및 경력기술서
    • 김병태 경력기술서
    • 김병태 포트폴리오
  • task 페이지로 이동
    • ai-service-team 페이지로 이동
    • nsc-slot 페이지로 이동
    • sb-dev-team 페이지로 이동
    • the-future-company 페이지로 이동
  • thinking 페이지로 이동
    • 자기주도 학습: 질문에서 시작해 글로 검증하기
    • 좋은 일을 넘어 중요한 일을 하는 법
FOS-BLOG · FOOTERall systems normal·v0.1 · 2026.04.27·seoul, kr
Ffos-blog/study

개발 학습 기록을 정리하는 블로그입니다. 공부하면서 기록하고, 기록하면서 다시 배웁니다.

visitors
01site
  • Home↗
  • Posts↗
  • Categories↗
  • Glossary↗
  • About↗
02policy
  • 소개/about
  • 개인정보처리방침/privacy
  • 연락처/contact
03categories
  • AI↗
  • Algorithm↗
  • DB↗
  • DevOps↗
  • Java/Spring↗
  • JS/TS↗
  • React↗
  • Next.js↗
  • System↗
04connect
  • GitHub@jon890↗
  • Source repositoryjon890/fos-study↗
  • RSS feed/rss.xml↗
  • Newsletter매주 1 회 · 한 편의 글→
© 2026 FOS Study. All posts MIT-licensed.
built with·Next.js·Tailwind v4·Geist·Pretendard·oklch
fos-blog/AI/하네스 회고는 새 문서로 쌓지 않고 종류에 …
ai

하네스 회고는 새 문서로 쌓지 않고 종류에 맞는 기존 단일 소스에 환원한다

에이전트 파이프라인을 돌리면 평가자들이 지적을 계속 만들어 낸다. 이 지적에서 얻은 교훈을 retrospectives/ 같은 새 문서에 쌓기 시작하면, 그 문서가 또 하나의 낡아 가는 문서가 된다. 이 글은 회고 결과를 새 문서가 아니라 이미 단일 소스 역할을 하는 문서에 직접 환원하는 구조를 정리한다. 평가자 역할마다 환원 위치가 다른 이유, 일회성 지적...

2026.10.02·5 min read·18 views

에이전트 파이프라인을 돌리면 평가자들이 지적을 계속 만들어 낸다. 이 지적에서 얻은 교훈을 retrospectives/ 같은 새 문서에 쌓기 시작하면, 그 문서가 또 하나의 낡아 가는 문서가 된다. 이 글은 회고 결과를 새 문서가 아니라 이미 단일 소스 역할을 하는 문서에 직접 환원하는 구조를 정리한다. 평가자 역할마다 환원 위치가 다른 이유, 일회성 지적을 거르는 기준, 별도 회고 문서와 실행 기록을 도입했다가 제거한 사례를 다룬다.

회피 패턴 문서를 파일로 나눠 운영하는 방법은 에이전트가 배운 회피 패턴은 조건을 통과한 것만 파일로 쌓고 주기적으로 지운다에 있다. 이 글은 그 앞 단계, 즉 지적이 어디로 흘러가야 하는가를 다룬다.

회고 문서가 또 하나의 낡는 문서가 된다

회고를 docs/retrospectives/ 에 사건별로 남기면 처음에는 편하다. 그런데 회고 산출물이 또 하나의 문서가 되면 그 문서가 새로운 rot 소스가 된다. 회고에서 나온 규칙은 이미 그 규칙을 소유한 문서에 있어야 에이전트가 그 문서를 읽을 때 만난다. 별도 회고 파일 속에 있으면 코드와 지침이 바뀌어도 함께 갱신되지 않는다.

거울 구조: 지적한 역할이 환원 위치를 정한다

회고를 평가자 역할별로 나누면 환원 위치가 자연스럽게 정해진다. 누적 대상이 역할마다 다르기 때문이다.

평가자지적환원 위치
critic계획에 대한 REVISEplan 단계의 회피 패턴
code-reviewer코드에 대한 FIX_NEEDEDcode-review 단계의 회피 패턴
docs-verifier문서 갱신 누락에 대한 UPDATE기획 문서의 변경 영향 표에 한 행 추가

이 표의 핵심은 회고 산출물을 별도 문서로 만들지 않는다는 점이다. 평가자가 쓰는 점검표와 회고가 환원되는 문서가 서로 거울처럼 대응하므로 거울 구조라고 부른다. docs-verifier 의 점검 항목은 기획 문서의 영향 표를 그대로 비춘 것이어서, 별도 체크리스트를 새로 만들지 않는다.

각 역할의 회고 절차는 같은 골격을 갖는다.

  • 트리거: 해당 평가자가 한 번 이상 지적하면 의무로 실행하고, 한 번에 통과하면 건너뛴다. 지적이 0건이어도 자문한다.
  • 반복 가능성 판정: 앞 글의 쌓는 조건 네 가지를 적용한다.
  • 갱신 위치: 역할마다 다른 단일 소스다.
  • 작성 형식과 커밋 규약: 회고 커밋은 작업 브랜치에서 PR 에 포함하고, main 에는 직접 커밋하지 않는다.

현재의 환원 위치 표

공개 저장소 fos-skills 의 build-with-teams 스킬은 마감 단계의 references/step-finish.md 에서 환원 위치를 표로 정한다.

종류누적 위치
구현과 검토의 반복 함정저장소가 지정한 경로, 없으면 docs/pitfalls/
프로세스 결함그 스킬의 SKILL.md
도메인 결정저장소의 ADR
코딩 규칙그 저장소의 하네스 지침 파일

여기에 오르려면 세 가지를 모두 만족해야 한다.

  • 다른 plan 이나 코드에서도 다시 일어날 수 있다.
  • 원인과 회피 방법이 특정 사건을 떠나 일반화된다.
  • grep, lint, test, build 처럼 구체적인 검출 방법이 있다.

1회성 오타, 특정 plan 의 상황 설명, 단순 실행 통계는 PR 본문과 결과 보고에만 남긴다. 같은 스킬의 review-fix 도 같은 원칙으로, 리뷰 반영 뒤 재현 가능한 패턴만 docs/pitfalls/code-review/<패턴>.md 에 누적한다.

별도 회고와 실행 기록은 제거했다

fos-skills 는 한때 회고와 실행 기록을 별도 문서로 두었다. 이 구성의 설계를 남겨 둔다. 정리 이유는 뒤에서 다시 다룬다.

구분실행 기록회고
단위실행 하나를 한 줄로사건 하나를 깊게
쓰는 때항상. 중단된 실행도 쓴다사건이 있을 때만. 없으면 쓰지 않는다
형태표의 한 행사건 하나에 파일 하나

실행 기록의 핵심 열은 사용자 개입 횟수였다. critic 의 REVISE 횟수 같은 값은 파이프라인 내부 지표이고, 사용자가 실제로 겪은 비용은 개입 횟수라는 판단이다. 스킬이 나아졌다는 말은 결국 사용자가 덜 끼어들어도 된다는 뜻이기 때문이다.

개입 횟수는 두 가지를 센다.

  • 구조화 질문 도구를 호출해 사용자 판단을 받은 횟수
  • 사용자가 진행 방향을 바로잡거나 결과를 되돌리게 한 횟수

사용자가 먼저 꺼낸 새 요구와 단순한 진행 승인은 세지 않는다.

회고는 기록 시점도 정했다. 종료까지 미루지 않고 phase 종료, FIX_NEEDED, 검증 정체 직후에 남겨야 사건의 맥락이 휘발되지 않는다는 이유였다.

소비처가 없는 기록은 제거한다

fos-skills 의 git 이력에서 확인되는 순서는 다음과 같다.

날짜변경
2026-07-27실행 기록을 도입하고 스킬 채점 도구와 기준점을 추가한다
2026-09-01원시 회고와 실행 기록 계약을 제거한다
2026-09-04evaluation/ 을 제거한다

evaluation/ 을 제거한 커밋 메시지는 이유를 적고 있다. 누적 점수를 소비하는 곳이 없었다는 것이다. 회고와 실행 기록을 제거한 커밋에는 이유가 적혀 있지 않다. 다만 제거 뒤 남은 규칙은 앞 절의 표와 같다. 재사용할 가치가 있는 것은 단일 소스로 환원하고, 나머지는 PR 본문과 결과 보고에만 남긴다.

이 순서에서 얻을 수 있는 판단 기준은 하나다. 기록을 쌓기 전에 그 기록을 누가 언제 읽는지 정한다. 읽는 쪽이 없는 기록은 낡을 문서만 늘린다. 반대로 읽는 쪽이 이미 정해진 곳, 즉 기존 단일 소스에는 환원해도 낡을 문서가 늘지 않는다.

정리

상황대응
평가자가 같은 지적을 반복한다지적한 역할에 맞는 단일 소스에 패턴으로 환원한다
일회성이거나 특정 사건에 묶인 지적이다PR 본문과 결과 보고에만 남긴다
새 회고 문서를 만들고 싶다그 문서를 읽을 쪽과 갱신 시점을 먼저 정한다
쌓은 기록을 소비하는 곳이 없다기록하는 일을 멈추고 기존 문서에 환원한다
on this page
  • 01회고 문서가 또 하나의 낡는 문서가 된다
  • 02거울 구조: 지적한 역할이 환원 위치를 정한다
  • 03현재의 환원 위치 표
  • 04별도 회고와 실행 기록은 제거했다
  • 05소비처가 없는 기록은 제거한다
  • 06정리
tags
#study#insights

이런 글도

  • ai

    에이전트가 배운 회피 패턴은 조건을 통과한 것만 파일로 쌓고 주기적으로 지운다

    2026.10.02
  • ai

    ADR 은 되돌리기 어려운 결정의 이유만 남기고, 대안 기각은 옵션마다 줄을 나눈다

    2026.10.02
  • ai

    스킬 문서는 반복 실행을 스크립트로 내리고 같은 지시를 한 곳에서만 소유하게 쓴다

    2026.10.02
  • ai

    여러 저장소가 쓰는 스킬은 도메인 중립 코어와 저장소별 오버레이로 나눈다

    2026.10.02

댓글 (0)