전체 글
이 블로그에 올라온 모든 글입니다.
-
Multi-Agent Orchestration에서 병렬 처리와 충돌 방지
AI 에이전트 여러 개를 동시에 돌리면 일은 빨리 끝나지만, 둘이 같은 파일을 고치거나 같은 배포를 두 번 하면 그 시간은 충돌을 푸는 데 다 쓰인다. 이 글은 병렬로 나눌 일을 고르는 기준, 작업자끼리 부딪치지 않게 하는 소유권·격리·단일 작성자 규칙, 그리고 결과를 합치고 검증하는
-
Claude Code와 Codex CLI의 Skill 재사용 아키텍처
Claude Code와 Codex CLI를 같이 쓰면 같은 스킬을 두 곳에 따로 두기 쉽고, 그러면 한쪽만 고쳐져 내용이 갈라진다. 이 글은 한 대의 Mac에서 두 런타임이 스킬을 실제로 어떻게 나눠 쓰는지 폴더 구조부터 확인하고, 원본을 한 곳에 두는 법, 한 런타임이 다른 런타임을
-
AA 관점의 기술 부채 관리와 아키텍처 품질 지표
기술 부채는 "나중에 고치자"는 말로 쌓이고, 숫자가 없으면 끝까지 갚지 못한다. 애플리케이션 아키텍트AA가 할 일은 부채를 없애는 것이 아니라 보이게 만들고, 이자가 큰 것부터 갚을 순서와 예산을 확보하는 것이다. 이 글은 부채를 분류하고 대장에 올리는 법, 우선순위를 정하는 기준,
-
API Gateway와 BFF 도입 기준 및 보안 설계
API Gateway와 BFFBackend for Frontend는 둘 다 클라이언트와 서비스 사이에 서는 계층이라 자주 섞여 쓰이지만, 맡는 일과 막아야 할 위협이 다르다. 역할을 섞으면 게이트웨이가 화면 로직으로 비대해지거나, 반대로 "게이트웨이가 막아 주겠지" 하며 서비스가 인가를
-
모놀리식 시스템을 Modular Monolith로 전환하는 설계 전략
수정 하나에 화면 다섯 개가 깨지는 모놀리식 시스템을 고치는 방법이 꼭 MSA일 필요는 없다. 배포 단위는 하나로 두고 안쪽을 업무 단위 모듈로 나눠 경계를 강제하는 Modular Monolith는 운영 부담을 늘리지 않고 결합도부터 낮춘다. 이 글은 레거시 Spring 모놀리스를 모듈
-
ADR(Architecture Decision Record) 실전 작성법
아키텍처 결정은 몇 달이 지나면 결과만 남고 이유는 사라진다. ADRArchitecture Decision Record은 결정 하나를 한 장에 배경, 대안, 결과와 함께 적어 두는 짧은 문서이고, 이 글은 언제 쓰는지부터 필드 구성, 상태 관리, 저장 위치, 리뷰 절차, 공공 SI 산출
-
2026년 11월 2일 AI 뉴스 정리
2026년 11월 2일 기준으로 최근 보도 중 날짜와 출처를 확인한 10건을 정리했습니다. 각 항목에 보도 날짜를 적었습니다. 정책과 규제 OpenAI, 중간선거 직후 정책 공세 준비: Axios는 11월 1일 OpenAI가 중간선거 직후 AI 안전과 데이터센터 관련 정책 제안을 잇달아
-
AI 코딩 프롬프트 기록 2026-10-31 오후
10월 31일 저녁부터 11월 1일 오전까지 Claude Code에 보낸 프롬프트와 결과를 시간순으로 정리했다. 두 프롬프트 모두 myblog의 /blogtecharticle 커맨드를 썼다. 19:38 기술 아티클 5편 발행 · Claude Code /blogtecharticle 1.
-
개발 기록 2026-10-31 오후: 기술 아티클 11편 발행, 다이어그램 추가, 공개 확인
이번 기록은 10월 31일 저녁부터 11월 1일 오전까지 myblog에서 한 작업이다. /blogtecharticle 커맨드로 기술 아티클 11편을 두 번에 나눠 발행했고, 편마다 다이어그램을 넣은 뒤 이미지 추가 커밋을 남겼다. 발행 흐름 10월 31일 저녁에 5편을 먼저 발행했다.
-
Spring Boot에서 Transactional Event와 비동기 처리의 함정
주문 저장 뒤 알림 발송처럼 "커밋된 다음에 할 일"을 Spring 이벤트로 떼어 내면 코드는 깔끔해지지만, 이벤트가 언제 실행되고 어느 트랜잭션에 묶이는지 모르면 데이터가 조용히 사라진다. 이 글은 @EventListener, @TransactionalEventListener, @As
-
분산 환경에서 멱등 API와 중복 요청 방지 설계
분산 환경에서 같은 요청은 반드시 두 번 이상 들어온다. 클라이언트와 게이트웨이는 응답이 늦으면 다시 보내고, 서버는 이미 처리를 끝냈어도 그 사실을 알릴 방법이 없을 때가 있다. 이 글은 주문·결제처럼 두 번 실행되면 안 되는 API를 멱등 키IdempotencyKey와 유일 제약으로
-
대량 데이터 처리에서 Cursor·Batch·Bulk Insert 비교
수십만~수백만 건을 읽고 쓰는 야간 배치나 데이터 이관은 SQL보다 "몇 번 왕복하고 몇 번 커밋하느냐"가 시간을 정한다. 이 글은 읽는 쪽의 OFFSET 페이징·키셋 페이징·서버 커서와, 쓰는 쪽의 한 건씩 INSERT·JDBC 배치·벌크 로드를 같은 기준왕복, 메모리, 커밋 단위,
-
CUBRID HA 장애 전환 시 애플리케이션 복구 전략
CUBRID HA는 master 노드가 죽으면 slave를 master로 올려 DB를 살려 두지만, 애플리케이션까지 저절로 살아나지는 않는다. 전환되는 몇십 초 동안 진행 중이던 트랜잭션은 롤백되고, 풀에 남은 연결은 죽은 채 남으며, 재시도를 잘못 넣으면 같은 거래가 두 번 들어간다.
-
HikariCP Connection Pool 고갈 원인과 용량 산정
HikariCP 커넥션 풀이 고갈되면 DB는 한가한데 애플리케이션 요청이 30초씩 멈췄다가 한꺼번에 실패한다. 풀 크기를 늘리는 것이 첫 반응이지만, 원인이 커넥션을 오래 잡는 코드라면 늘린 만큼 DB 부하만 커진다. 이 글은 고갈이 어떻게 보이는지, 무엇이 고갈을 만드는지, 지표로 원
-
Spring Boot와 JBoss EAP 배포 시 ClassLoader 충돌 해결
내장 Tomcat에서 잘 돌던 Spring Boot WAR가 JBoss EAP에 올리는 순간 NoSuchMethodError나 ClassCastException으로 멈추는 일은 흔하다. 원인은 대부분 같은 라이브러리가 서버 모듈과 WAR 안에 동시에 있고, JBoss가 생각과 다른 쪽을
-
2026년 11월 1일 주간 레딧 베스트 5선: 개발, 시스템 관리, 푸념, 노동 이야기
이번 주 레딧에서 추천수가 가장 많았던 글을 r/programming, r/sysadmin, r/Vent, r/antiwork 네 곳의 This Week Top 목록에서 모았습니다. 고정 공지는 제외하고, 추천수 기준 상위 5개씩 골랐습니다. 외부 기사는 원문을 열어 확인했고, 사진이나
-
2026년 11월 1일 AI 뉴스 정리
10월 30일에서 31일 사이 보도된 AI 소식 중 원문이나 신뢰할 만한 재배포본을 직접 확인한 10건을 정리했습니다. 각 항목에 보도 날짜를 적었습니다. 정책과 규제 영국, 메타의 언론사 콘텐츠 약관 조사 착수: 영국 경쟁시장청CMA은 10월 30일 메타가 AI 도구 등에 언론사 콘텐
-
서비스 장애 시 Graceful Degradation과 Circuit Breaker 설계
외부 API 하나가 느려지면 그 API를 기다리는 스레드와 커넥션이 쌓이고, 결국 그 API와 상관없는 화면까지 멈춘다. Graceful Degradation은 "무엇을 포기하고 무엇을 지킬지"를 기능마다 미리 정하는 일이고, Circuit Breaker는 그 결정을 장애 순간에 자동으
-
DB 인덱스가 있는데도 Full Scan이 발생하는 이유
인덱스를 만들었는데도 쿼리가 테이블 전체를 읽는 일은 흔하다. 원인은 대부분 세 가지 중 하나다. 조건이 인덱스를 쓸 수 없는 모양이거나, 옵티마이저가 계산해 보니 전체를 읽는 편이 싸거나, 옵티마이저가 잘못된 정보로 계산했거나. 이 글은 실행계획으로 원인을 찾는 순서와, 원인마다 SQ
-
부하 테스트에서 Coordinated Omission이 만드는 착시
부하 테스트 보고서의 P99가 1ms인데 운영에서는 수 초짜리 응답이 나온다면, 측정 도구가 느린 순간을 통째로 빼먹었을 가능성이 크다. 응답을 기다리는 동안 다음 요청을 보내지 않는 부하 도구는 서버가 멈춘 구간을 표본 한 건으로 줄여 기록하기 때문이다. 이 글은 이 현상Coordin
-
Prometheus·Grafana·Micrometer로 SLO 모니터링 구축
SLO는 "얼마나 자주 실패해도 되는가"를 숫자로 정해 두는 약속이고, 에러 버짓은 그 약속에서 아직 쓸 수 있는 실패의 양이다. 숫자를 정해도 대시보드와 경보가 그 숫자를 계산하지 않으면 SLO는 문서에만 남는다. 이 글은 Spring Boot 애플리케이션에서 Micrometer로 요
-
Apache mod_jk와 JBoss AJP 연결 구조 및 장애 분석
Apache 앞단에 mod_jk를 두고 JBoss와 AJP로 붙인 구성은 공공·금융 SI에서 아직 흔하다. 이 구성의 장애는 대부분 애플리케이션이 아니라 연결에서 난다. mod_jk의 연결 풀, WAS의 스레드 수, 방화벽의 유휴 시간이 서로 맞지 않으면 503, 간헐적 지연, 세션 끊
-
AI 코딩 프롬프트 기록 2026-10-31 오전
프롬프트 21:24 CosyVoice 설치 문의 · Claude Code cosyvoice 를 lmstudio에 설치해서 음성파일을 만들고 싶은데 설치를 도와 줄 수 있니? LM Studio는 TTS를 지원하지 않아서 안 된다는 답을 받았다. 대신 Mac에 conda 환경을 만들어 Co
-
개발 기록 2026-10-31 오전: 사진 드라마용 무료 TTS 탐색, Qwen3-TTS GGUF 로드 에러, 기술 아티클 5편 발행
이 기간에는 두 가지를 했다. 저녁에는 사진 드라마에 쓸 음성 파일을 무료로 만들 방법을 찾았고, 다음 날 오전에는 블로그에 기술 아티클 5편을 올렸다. 작업은 모두 Claude Code로 진행했다. CosyVoice를 LM Studio에 설치하려다 방향을 바꿈 처음 목표는 CosyVo
-
감리 대응을 위한 아키텍처 증적 자동 수집 시스템 설계
공공 SI의 감리는 "설계한 대로 만들었는가"를 문서와 결과물로 확인한다. 그런데 증적을 감리 직전에 사람이 모으면 날짜가 맞지 않거나, 화면 캡처가 지금 코드와 다르거나, 누가 언제 만든 파일인지 설명하지 못하는 일이 생긴다. 이 글은 빌드·검사·배포 과정에서 증적이 저절로 쌓이고,
-
TLS 종료 지점과 Reverse Proxy 신뢰 경계 설계
TLS를 어디서 끝내느냐는 인증서 위치만 정하는 일이 아니다. 그 지점이 곧 "여기부터는 평문을 본다"와 "여기부터는 앞 구간이 알려 준 클라이언트 IP와 프로토콜을 믿는다"는 신뢰 경계가 되고, 경계를 잘못 그으면 위조한 XForwardedFor 한 줄로 관리자 IP 제한이 풀린다.
-
공공 SI 환경의 CI/CD 배포·백업·롤백 자동화
공공 SI의 운영 배포는 망분리, 변경 승인, 정해진 작업 시간 안에서 이뤄진다. 이 조건에서 사람이 WAR를 복사하고 로그를 눈으로 보는 배포는 실수 한 번에 서비스가 멈추고, 무엇이 언제 바뀌었는지도 남지 않는다. 이 글은 빌드부터 반입, 승인, 백업, 노드별 배포, 헬스체크, 자동
-
Zero Trust 관점의 관리자 시스템 접근 통제 설계
관리자 시스템은 계정 하나만 뚫려도 전체 데이터와 설정이 넘어가는 곳이라, "VPN 안에 들어왔으니 믿는다"는 경계 모델이 가장 위험하게 작동하는 자리다. 이 글은 Zero Trust 원칙으로 관리자 접근을 신원, 단말, 정책 판정, 권한, 세션, 감사 여섯 겹으로 나눠 설계하고, 각
-
Spring Security에서 IDOR·BOLA 취약점 방어하기
IDOR·BOLA는 로그인한 사용자가 주소의 번호 하나만 바꿔 남의 주문, 남의 신청서, 남의 계좌를 읽거나 고치는 취약점이다. 인증과 역할 검사를 모두 통과한 요청에서 생기기 때문에 Spring Security 설정만으로는 막히지 않고, 객체를 꺼내는 코드마다 "이 사용자의 것인가"를
-
2026년 10월 31일 AI 뉴스 정리
2026년 10월 31일 기준으로 10월 28일부터 31일 사이에 나온 AI 소식을 정리했습니다. 24시간 안의 새 소식이 많지 않아 최근 이틀 이내 기사도 포함했고, 각 항목에 날짜를 적었습니다. 정책과 규제 OpenAI와 Anthropic, 캘리포니아 고위험 AI 중단 방식에서 입장
-
AI 코딩 프롬프트 기록 2026-10-30 오전
10월 29일 저녁부터 30일 낮까지 보낸 프롬프트다. 모두 Claude Code에서 보냈다. 20:06 블로그 구역 개편 · Claude Code 자 이제 아래 조언대로 사이트를 개선해 볼까? 이 아래에 학습·비즈니스 통합 구조, 메뉴 개편표, 구현 대안 세 가지를 담은 조언 전문을
-
개발 기록 2026-10-30 오전: 블로그 구역 개편과 기술 아티클 25편, 영상 에이전트 10개, 주간 SNS 트렌드 자동 발행
10월 29일 저녁부터 30일 낮까지 Claude Code로 한 작업을 정리한다. 블로그를 학습과 비즈니스를 함께 담는 구조로 바꿨고, 기술 아티클을 스킬로 묶어 25편을 올렸다. 영상 제작용 에이전트 10개를 만들어 검증 영상을 한 편 올렸고, SNS 트렌드 정리를 매주 자동 발행하게
-
2026년 10월 마지막 주 SNS 트렌드·밈 TOP 10
10월 마지막 주 X·Threads·Instagram에서 가장 많이 퍼진 트렌드와 밈 10개를 골랐다. X 한국 실시간 트렌드는 브라우저로 직접 모았고, Instagram·Threads는 트렌드 추적 사이트와 밈 정리 글을 교차해 보완했다. 순위는 공식 지표가 아니라 여러 플랫폼에 퍼진
-
AI Agent의 Context Engineering과 메모리 계층 설계
같은 모델을 써도 어떤 에이전트는 일을 끝내고 어떤 에이전트는 엉뚱한 파일을 고친다. 차이는 대개 모델이 아니라 "이번 호출에 무엇을 넣었는가"에서 난다. 이 글은 컨텍스트 창을 작업대로 보고 지침·절차·장기 기억·외부 지식을 계층으로 나눠 필요할 때만 불러오는 설계, 그리고 실제로 쓰
-
JVM Thread Dump와 Heap Dump로 장애 원인 분석하기
Java 서비스가 멈추거나 느려졌을 때 가장 흔한 대응은 재시작이고, 재시작하는 순간 원인의 증거도 함께 사라진다. Thread Dump는 그 순간 모든 스레드가 무엇을 기다리는지, Heap Dump는 메모리를 무엇이 붙잡고 있는지를 보여 주는 유일한 기록이다. 이 글은 증상별로 어떤
-
망분리 환경의 Maven·npm 의존성 공급망 보안
망분리 환경은 외부 공격이 막혀 있다고 믿기 쉽지만, 개발에 필요한 라이브러리는 결국 인터넷에서 받아 안으로 들인다. 반입 과정에 검사와 기록이 없으면 악성 패키지와 알려진 취약점도 라이브러리와 함께 내부망에 들어오고, 사고가 났을 때 어디에 퍼졌는지조차 답하지 못한다. 이 글은 Mav
-
Outbox·Inbox 패턴으로 연계 데이터 정합성 확보하기
업무 데이터를 DB에 저장하고 다른 시스템에 메시지를 보내는 일을 따로 하면, 둘 중 하나만 성공하는 순간이 반드시 생긴다. 이 틈 때문에 "신청은 접수됐는데 연계 기관에는 안 갔다", "취소했는데 상대 시스템에는 승인으로 남았다" 같은 정합성 사고가 난다. 이 글은 보내는 쪽의 Out
-
AI Agent Eval 파이프라인과 회귀 테스트 자동화
AI 에이전트는 프롬프트 한 줄, 모델 버전, 도구 설명 하나만 바꿔도 전혀 다른 곳이 깨진다. 같은 입력에도 결과가 매번 조금씩 달라서, 사람이 몇 번 써 보고 "괜찮네"로 끝내면 회귀를 놓친다. 이 글은 평가 세트 만들기부터 채점기, 반복 실행, 기준선 비교, CI 게이트, 운영 로
-
2026년 10월 30일 AI 뉴스 정리
오늘은 최근 24시간 안팎에 보도된 AI 소식 11건을 정리했습니다. 정책 쪽은 확인 가능한 항목이 2건이고, 중국 모델 출시 관련 새 소식은 날짜를 확인하지 못해 수출 규제 기사만 담았습니다. 정책과 규제 미국 하원 민주당 위원장들, 프론티어 AI 기업에 사고 보고 요청: 10월 28
-
Rust와 Java의 메모리 관리 및 실행 성능 비교
Rust와 Java는 둘 다 "메모리 안전"을 말하지만 방법이 정반대다. Java는 실행 중에 가비지 컬렉터가 안 쓰는 객체를 찾아 치우고, Rust는 컴파일할 때 소유권 규칙으로 언제 메모리를 해제할지 정해 둔다. 이 차이가 메모리 사용량, 지연의 예측 가능성, 시작 시간, 개발 속도
-
eBPF를 활용한 Java 애플리케이션 성능 관측
APM과 JFR은 JVM 안에서 일어나는 일을 잘 보여 주지만, 스레드가 왜 CPU를 받지 못하는지, 어떤 시스템 호출에서 오래 기다리는지, 패킷이 재전송되는지는 JVM 밖, 커널에서 일어난다. eBPF는 애플리케이션을 바꾸거나 재시작하지 않고 커널 안에 작은 관측 프로그램을 붙여 이런
-
Linux Process와 Thread의 Kernel 관점 분석
교과서는 프로세스와 스레드를 다른 개념으로 설명하지만, Linux 커널 안에서는 둘 다 같은 구조체 하나task_struct로 표현되는 "태스크"다. 차이는 무엇을 공유하느냐뿐이다. 이 차이를 알면 top에 보이는 숫자, Java 스레드 수와 메모리, 컨텍스트 스위칭 비용, OOM 동작
-
JVM G1 GC와 ZGC의 동작 원리 및 선택 기준
Java 서비스의 P99 지연을 따라가다 보면 결국 GC 멈춤StopTheWorld을 만난다. G1은 JDK 9부터 기본 GC로 대부분의 서비스에 맞게 처리량과 멈춤 시간의 균형을 잡고, ZGC는 힙 크기와 상관없이 멈춤을 1ms 안팎으로 묶는 대신 CPU와 메모리 여유를 더 쓴다. 이
-
공공 웹서비스 파일 다운로드 권한 검증 설계
공공 웹서비스의 파일 다운로드는 가장 단순해 보이는 기능이면서 개인정보 유출 사고가 가장 자주 나는 기능이다. 목록 화면에서는 권한을 확인했는데 다운로드 주소는 파일 번호만 바꾸면 남의 첨부가 내려받아지거나, 경로 문자열을 그대로 받아 서버의 다른 파일까지 읽히는 식이다. 이 글은 다운
-
CUBRID X_LOCK과 장기 트랜잭션 병목 해결
CUBRID를 쓰는 공공 시스템에서 "특정 시간만 되면 화면이 멈춘다"는 장애의 상당수는 오래 열려 있는 트랜잭션이 잡은 배타 락X_LOCK 때문이다. 쿼리는 빠른데 락을 기다리느라 요청이 쌓이고, 결국 커넥션 풀까지 바닥난다. 이 글은 흔한 패턴으로 재구성한 장애 사례를 따라 X_LO
-
P95와 P99가 평균 응답 시간보다 중요한 이유
"평균 응답 시간 0.3초"라는 보고서는 사용자 100명 중 5명이 4초를 기다렸다는 사실을 숨길 수 있다. 응답 시간 분포는 오른쪽으로 긴 꼬리를 갖고, 장애와 민원은 그 꼬리에서 나온다. 이 글은 평균이 왜 사용자 경험을 대변하지 못하는지, P95·P99를 어떻게 재고 합치고 목표로
-
10 TPS에서 250 TPS까지: 성능 개선 사례 분석
처리량이 10 TPS에서 막힌 시스템을 250 TPS까지 올리는 과정은 대개 하나의 묘수가 아니라 다섯 개쯤의 평범한 병목을 차례로 걷어내는 일이다. 이 글은 공공 SI에서 흔히 만나는 병목들로 재구성한 대표 사례를 따라가며, 어떤 지표로 병목을 찾고 무엇을 바꿨을 때 처리량이 얼마나
-
Spring Security JWT 인증과 인가 아키텍처
JWT 인증은 예제 코드만 보면 필터 하나로 끝나 보이지만, 운영에서 문제가 되는 것은 서명 방식, 토큰 수명, 재발급과 폐기, 브라우저 저장 위치, 권한 매핑 같은 설계 결정이다. 직접 만든 JWT 필터는 검증 누락이 생기기 쉽고, 토큰을 한 번 발급하면 되돌릴 수 없다는 점을 놓치기
-
Redis Look-aside Cache 설계와 Cache Stampede 대응
LookasideCacheaside 캐시는 구현이 쉬워서 가장 많이 쓰이지만, 인기 있는 키 하나가 만료되는 순간 수백 개의 요청이 동시에 DB로 몰리는 Cache Stampede를 만든다. 평소에는 DB 부하를 크게 덜어 주던 캐시가 만료 한 번에 DB를 쓰러뜨리는 것이다. 이 글은
-
MyBatis와 JPA 성능 및 유지보수 관점 비교
국내 SI에서 MyBatis와 JPA는 "어느 쪽이 더 빠른가"로 자주 논쟁이 되지만, 실제 성능 차이는 도구보다 쓰는 방법에서 나온다. JPA는 잘못 쓰면 쿼리가 폭증하고, MyBatis는 잘 쓰면 빠르지만 스키마가 바뀔 때마다 고칠 곳이 늘어난다. 이 글은 두 기술을 성능과 유지보수