에디블로그
Engineer's Field Notes

AI 자동화로 매일
한 편씩 쓰는
엔지니어 운영 노트

Claude Code · 자동화 파이프라인 · 사고 회고까지. 잘 굴러간 기록 + 깨진 흔적도 같이 남깁니다.

사람이 할 수 있는 일은,
AI도 할 수 있어야 합니다.
매일 한 편 쓰면서 검증 중.
— 이번 주 가장 많이 읽힌 글 TOP 3

전체 글

백엔드/데이터 & DB

[DB] 깊은 페이징 성능 문제: OFFSET이 느려지는 이유와 커서 기반 페이징(no-offset)

[DB] 깊은 페이징 성능 문제: OFFSET이 느려지는 이유와 커서 기반 페이징(no-offset)목록 API가 1페이지에선 1ms인데 뒤로 갈수록 느려지다, 관리자가 "전체 내보내기"로 수만 페이지를 훑는 순간 DB가 비명을 질러요. LIMIT 20 OFFSET 100000의 구조적 비용이에요. OFFSET은 "건너뛰기"처럼 보이지만 실제로는 다 읽고 버리기거든요.이 글은 OFFSET이 왜 선형으로 느려지는지, 커서 기반 페이징(no-offset)의 동작과 구현 디테일(유니크 커서·인덱스 설계), 그리고 어디까지 커서로 가고 어디는 OFFSET을 둘지 가려볼게요. 인덱스 원리는 B+Tree 편 위에 서 있는 이야기예요.01. OFFSET은 점프가 아니라 "읽고 버리기"예요offset 기반 Queryd..

2026.08.17
백엔드/프레임워크 & 언어

[Java] 타임존 버그 정리: LocalDateTime vs Instant, UTC 저장, 날짜 경계 함정

[Java] 타임존 버그 정리: LocalDateTime vs Instant, UTC 저장, 날짜 경계 함정"로컬에선 멀쩡했는데 배포하니 시간이 9시간 밀려요." 타임존 버그는 늘 이렇게 환경을 갈아탈 때, 그리고 자정 근처에서 터져요. 원인의 대부분은 하나로 모여요 — 타임존 정보가 없는 시각(LocalDateTime)을 "절대 시각"처럼 쓴 것.이 글은 LocalDateTime이 왜 위험한지부터, "UTC로 저장하고 표시할 때 변환"이라는 표준 규율, 타입 선택 기준(Instant vs ZonedDateTime vs LocalDateTime), 그리고 "오늘 매출" 집계가 어긋나는 날짜 경계 함정까지 차례로 풀어요. 함정 시리즈 2편이에요.01. LocalDateTime은 "언제"가 아니에요Local..

2026.08.14
백엔드/프레임워크 & 언어

[Java] 돈 계산에 double 쓰면 안 되는 이유: BigDecimal 사용법과 함정

[Java] 돈 계산에 double 쓰면 안 되는 이유: BigDecimal 사용법과 함정0.1 + 0.2 == 0.3이 false라는 건 다들 한 번쯤 들었는데, 이게 정산 금액 1원 차이로 돌아오면 더 이상 퀴즈가 아니에요. 돈을 다루는 백엔드에서 부동소수점은 "가끔 틀리는" 게 아니라 구조적으로 10진 소수를 표현 못 하는 타입이고, 그래서 BigDecimal이 규율이 돼요. 그런데 BigDecimal에도 함정이 세 개 있어요.이 글은 double이 왜 돈에 안 되는지(원리), BigDecimal의 3대 규율(생성자·비교·나눗셈), 그리고 "경로 전체"를 지키는 타입 설계(DB·JSON까지) 순서로 짚어볼게요. 함정 시리즈 1편이에요.01. double은 0.1을 저장하지 못해요System.out...

2026.08.13
백엔드/분산 & 운영

[분산시스템] 타임아웃과 재시도 전략: 재시도 폭풍, 지수 백오프와 지터, 타임아웃 예산

[분산시스템] 타임아웃과 재시도 전략: 재시도 폭풍, 지수 백오프와 지터, 타임아웃 예산재시도는 분산 시스템의 기본 회복 수단인데, 잘못 쓰면 장애를 키우는 증폭기가 돼요. 과부하로 비틀거리는 서비스에 모든 호출자가 일제히 3배의 재시도 트래픽을 퍼붓는 — 재시도 폭풍이에요. 그 폭풍을 막는 표준 처방(지수 백오프+지터)과 짝꿍 개념인 타임아웃 예산을 짚으며 분산 패턴 시리즈를 마무리해요.01. 재시도 폭풍, 선의가 DDoS가 된다상대가 과부하로 실패하기 시작하면, 호출자들은 "일시 장애겠지" 하고 재시도해요. 전원이 3회씩 재시도하면 트래픽이 순간 3~4배가 돼요. 평소 부하도 못 버티던 상대는 더 깊이 무너지고 회복이 불가능해져요. 선의의 재시도가 사실상 DDoS가 되는 거예요.고정 간격 재시도는 한..

2026.08.12
AI/정보

[Claude] Sonnet 5 가격 인상 취소, $2/$10 그대로예요

[Claude] Sonnet 5 가격 인상 취소, $2/$10 그대로예요Claude Sonnet 5의 API 가격이 지금 그대로 굳었어요. Anthropic이 8월 10일 플랫폼 릴리스 노트에서 100만 토큰당 입력 $2, 출력 $10을 표준가로 확정했어요. 9월 1일부터 $3/$15로 올리기로 예고돼 있던 50% 인상은 하지 않는다고 해요. Sonnet 5로 뭔가 돌리고 있다면 9월 청구서 걱정은 덜어도 되는 발표예요.01. 9월 1일 50% 인상이 없던 일이 됐어요원래 $2/$10은 8월 31일까지만 적용되는 도입가였어요. 9월 1일부터는 100만 토큰당 입력 $3, 출력 $15가 표준가로 붙을 예정이었고, 입력·출력 양쪽 다 50% 인상이었어요.공식 문서에는 "the previously schedu..

2026.08.12
개발자 도구/에디터 & IDE

[Sublime Text] 멀티 커서와 프로젝트 전환

개발자 도구 > 에디터 & IDE[Sublime Text] 멀티 커서와 프로젝트 전환Sublime Text가 대체하는 자리는 무거운 IDE라기보다 sed·정규식 일괄 치환과 "잡파일 편집기" 쪽에 가까워요. 커서를 여러 개 세워 눈으로 확인하며 고치는 방식, 그리고 폴더 묶음을 JSON 파일 하나로 저장해 프로젝트를 갈아 끼우는 방식이 그 축입니다. 이 글은 공식 문서에 적힌 단축키·설정 파일 형식만 근거로 멀티 셀렉션 계열 명령과 프로젝트 파일 구성을 정리했어요.멀티 커서는 정규식 치환을 눈으로 대체해요변수 이름 12군데를 한 번에 바꾸는 작업을 떠올려 보면 방법은 대략 세 가지예요. 하나씩 손으로 고치거나, 찾아 바꾸기 정규식을 쓰거나, 커서를 12개 세워 동시에 타이핑하는 방식입니다.정규식 치환의 ..

2026.08.12
백엔드/분산 & 운영

[분산시스템] 서킷 브레이커 패턴: Resilience4j 설정, fallback 설계, 연쇄 장애 차단

[분산시스템] 서킷 브레이커 패턴: Resilience4j 설정, fallback 설계, 연쇄 장애 차단외부 결제사가 느려졌을 뿐인데 내 서비스 전체가 죽는 일이 있어요. 결제와 무관한 상품 조회까지요. 장애가 호출 그래프를 타고 번지는 연쇄 장애인데, 그걸 끊는 차단기가 서킷 브레이커예요. 이름 그대로 두꺼비집이에요 — 누전이 감지되면 회로를 내려서 집 전체가 타는 걸 막는 거죠.연쇄 장애가 번지는 구조에서 시작해, 서킷의 3상태(CLOSED·OPEN·HALF_OPEN), Resilience4j 실전 설정, 그리고 도입의 진짜 본체인 fallback 설계까지 짚어요.01. 연쇄 장애, 남의 장애가 내 장애가 되는 길경로는 늘 같아요. 의존 서비스가 느려짐 → 내 호출 스레드가 타임아웃까지 묶임 → 그런..

2026.08.11
AI/정보

[Claude Code] archive 소스로 플러그인을 zip으로 설치해요

[Claude Code] archive 소스로 플러그인을 zip으로 설치해요Claude Code 플러그인을 zip 하나로 설치해요. 받는 머신에 git이나 npm이 없어도 됩니다. 2.1.224 changelog에 올라온 archive 플러그인 소스 얘기예요.01. 정적 파일 서버에 zip만 올려두면 돼요기존 플러그인 소스는 github, url, git-subdir, npm처럼 대부분 git이나 패키지 매니저를 거치는 방식이었어요. archive는 HTTPS로 zip을 받아오는 게 전부예요.공식 문서에는 S3 버킷, Artifactory generic 저장소, nginx 같은 정적 파일 서버나 아티팩트 저장소 어디든 올려두면 된다고 나와 있어요. marketplace.json의 플러그인 항목에 이렇게 ..

2026.08.11
백엔드/분산 & 운영

[분산시스템] 사가(Saga) 패턴: 보상 트랜잭션, 코레오그래피 vs 오케스트레이션

[분산시스템] 사가(Saga) 패턴: 보상 트랜잭션, 코레오그래피 vs 오케스트레이션주문·결제·재고가 한 DB에 있을 땐 @Transactional 하나로 "전부 성공 아니면 전부 취소"가 됐어요. 서비스를 쪼개는 순간 그 마법이 사라져요 — DB가 다르니 하나의 롤백이 없거든요. 그 자리를 채우는 게 사가 패턴이에요. "롤백"을 "보상"으로 바꾸는 사고방식이죠.분산 트랜잭션 문제에서 출발해, 사가의 핵심인 보상 트랜잭션, 두 스타일(코레오그래피 vs 오케스트레이션), 그리고 따라오는 어려운 숙제(보상 불가 작업·중간 상태 노출)까지 짚어요. 아웃박스가 "이벤트를 확실히 전달"하는 패턴이라면, 사가는 그 위에서 "흐름 전체의 정합성"을 다루는 패턴이에요.01. 하나의 롤백이 사라졌다재고 차감이 실패한 시..

2026.08.10
AI/정보

[Claude Code] 다른 터미널 세션에 메시지를 보내요

[Claude Code] 다른 터미널 세션에 메시지를 보내요Claude Code(클로드 코드) 2.1.224부터 세션 간에 메시지를 주고받는 기능이 들어갔어요. 터미널 A에서 스키마를 바꿨을 때 그 사실을 터미널 B에 직접 옮겨 적는 대신, Claude가 옆 세션에 알려주는 구조예요. 조건만 맞으면 따로 켤 것 없이 이미 돌아가고 있어요.01. macOS·리눅스만 되고, 확인은 /list-agents로 해요필요한 버전은 2.1.224 이상이에요. 네이티브 윈도우는 지원 대상이 아니고, WSL 2 안의 리눅스는 돼요.세션에서 /list-agents(별칭 /peers)를 쳐보면 바로 알 수 있어요. 명령 자체를 못 알아들으면 그 세션엔 기능이 없는 거라, claude --version부터 보라고 문서에 나와..

2026.08.10
개발자 도구/터미널 & 환경

[zoxide] cd 대신 쓰는 디렉터리 점프

개발자 도구 · 터미널 & 환경 · 꿀팁[zoxide] cd 대신 쓰는 디렉터리 점프터미널에서 같은 프로젝트 폴더를 하루에도 수십 번 오가요. cd는 그때마다 전체 경로를 요구하죠. zoxide는 방문한 디렉터리를 기록해 두고 이름 일부만 치면 그리로 보내주는 도구예요. 예전의 autojump나 z 스크립트가 하던 일을 Rust로 다시 쓴 프로젝트고요. 설치와 셸 설정, 점수를 매기는 방식, 실제로 쓰는 명령과 환경 변수, 그리고 미리 알아둘 함정까지 순서대로 정리해요.cd는 경로를 이미 알고 있어야 움직여요cd의 문제는 기능이 부족한 게 아니라 사람에게 기억을 요구한다는 점이에요. ~/work/backend/services/payment-gateway 같은 경로를 매번 정확히 치거나, 탭 완성으로 한 ..

2026.08.10
AI/정보

[Claude Code] 8월 14일부터 기본이 auto 모드예요

[Claude Code] 8월 14일부터 기본이 auto 모드예요Claude Code의 기본 권한 모드가 바뀌어요. Anthropic이 8월 14일부터 Pro·Max·Team 플랜 새 세션의 기본값을 auto 모드로 돌린다고 공지했어요. 매번 뜨던 승인창 대신 별도 분류기가 tool call을 검사하는 방식이에요.01. 기본값을 바꿔둔 사람에겐 전환 여부를 한 번 물어봐요적용 대상은 8월 14일 이후 새로 여는 세션이에요. 이미 본인이 기본 모드를 따로 지정해뒀다면 그 설정이 그대로 유지되고, auto로 바꿀지 묻는 일회성 프롬프트가 뜰 수 있다고 해요.조직이 관리 설정(managed settings)으로 기본값을 정해둔 경우는 이번 변경과 무관하게 그대로예요. Team·Enterprise 관리자는 ma..

2026.08.09