처음 오셨다면
시작하기
가진 시간에 맞춰 읽을 글을 골라 두었습니다. 15분이면 무엇을, 한 시간이면 어디까지 읽으면 되는지 정리했습니다.
글이 천 편을 넘어 어디서 시작할지 고르기 어렵습니다. 가진 시간만큼만 읽고 나갈 수 있도록 세 가지 길을 준비했습니다.
이 블로그가 무엇을 하는 곳인지 한 편으로 보기
- 무너지는 Spring 서버 1 - CPU는 놀고 있는데 API가 느리다: 업스트림 하나가 무관한 엔드포인트를 죽이는 과정을 thread dump 세 장으로 읽기
업스트림 하나가 느려지면 그것을 호출하지도 않는 엔드포인트가 먼저 죽는다는 것을 thread dump 세 장으로 보인 글입니다. 재현하고, 재고, 고치고, 같은 조건에서 다시 재는 이 블로그의 기본형입니다.
추론을 측정으로 바꾸는 세 가지 방식 보기
- ParityPay로 검증하는 결제 정합성 2 - 잠금을 필요 이상으로 오래 쥐고 있었다: 추론을 측정으로 바꾼 기록
같은 지갑 경합의 원인을 추론이 아니라 측정으로 좁혔습니다. 잠금 보유 17ms 중 DB가 실제로 일한 시간은 2.31ms였고, 나머지는 애플리케이션을 기다린 시간이었습니다.
- 격리 수준의 이상 현상을 직접 만들기 - 같은 REPEATABLE READ에서 PostgreSQL은 중단시키고 MySQL은 조용히 덮어썼다
같은 이름의 격리 수준에서 PostgreSQL은 중단시키고 MySQL은 조용히 덮어씁니다. 문서로는 같아 보이는 것이 20회 반복 측정에서 갈립니다.
- ParityPay로 검증하는 결제 정합성 4 - 실험 27종이 찾아낸 결함 12건: 문서와 코드를 읽어서 나온 것은 하나도 없었다
실험 27종이 찾은 결함 12건 중 6건은 설계 문서에 "대비되어 있다"고 적혀 있던 것이었습니다. 문서와 코드를 읽어서 나온 것은 하나도 없었습니다.
하나의 시스템을 처음부터 끝까지 따라가기
- ParityPay로 검증하는 결제 정합성 10개 글
결제·원장 백엔드를 만들며 불변조건을 문장으로 쓰고, 중복 요청·동시 차감·응답 유실·프로세스 재시작 아래에서 그것이 지켜지는지 실험으로 확인한 기록입니다. 열 편이 순서대로 이어집니다.