컨텍스트 스위칭과 스케줄링 - CFS, cgroup CPU 제한, 그리고 스로틀링 Notes 컨테이너에 cpus: 2를 주면 “CPU 2개를 쓴다”고 읽게 된다. 실제로는 100ms마다 200ms의 CPU 시간을 쓸 수 있다는 뜻이고, 그 차이가 p99(가장 느린 1% 요청의 지연)를 만든다. 스레드를 많이 만들면 느려진다는 것도 알지만 어디서 느려지는지는 설명하기 어렵다. 둘 다 리눅스 스케줄러의 동작에서 나온다. 컨텍스트 스위칭의 비용은... 2026/02/02 Notes, OS
SLASH 21 리뷰 - 테스트 커버리지 100%: 두 달의 비용, 1600개 테스트를 6초로, 그리고 100%여도 남는 버그 Conference 발표 SLASH 21 연사 이응준 (토스뱅크 Server Developer) 자료 발표 영상 · SLASH 21 “클린 코더”에서 테스트 커버리지 100%를 강력히 요구한다는 문장을 읽고 ... 2026/01/28 Conference, Toss 토스 커뮤니티 백엔드 발표 리뷰 7편
트랜잭션 전파 7종 - 각 옵션이 커넥션과 롤백에 남기는 결과 Notes @Transactional(propagation = ...)의 일곱 값을 표로 외우는 것과, 그중 하나를 골랐을 때 커넥션이 몇 개 잡히고 예외가 어디까지 번지는지 아는 것은 다르다. 후자를 모르면 REQUIRES_NEW 하나로 커넥션 풀을 고갈시키거나, 잡아서 무시한 예외 때문에 바깥 트랜잭션이 통째로 롤백되는 일을 만난다. 일곱 가지가 답하는 질... 2026/01/27 Notes, Spring
키 생성 병목을 추적해 구조를 바꾼 기록: Part 3 - 채번을 INSERT 시점으로 옮기고 범위 단위로 받기 Notes Part 3. 채번을 INSERT 시점으로 옮기고 범위 단위로 받기 2편에서 병목의 정체를 확인했다. INSERT가 느린 게 아니라, INSERT에 필요한 키를 받기 위해 모든 요청이 시퀀스 테이블의 행 하나를 갱신하려고 줄을 서고 있었다. 이번 글에서는 그 구조를 실제로 어떻게 바꿨는지, 그리고 바꾸면서 무엇을 포기하기로 했는지 정리한다. ... 2026/01/25 Notes, Common 키 생성 병목을 추적해 구조를 바꾼 기록 3편
격리 수준의 이상 현상을 직접 만들기 - 같은 REPEATABLE READ에서 PostgreSQL은 중단시키고 MySQL은 조용히 덮어썼다 실무 사례 Notes 격리 수준과 이상 현상에서 표준이 정의한 세 현상과 표준에 없는 둘(lost update, write skew)을 정리했다. 그 글은 문서를 근거로 썼고, 마지막에 “다음 세 가지는 직접 만들어야 보인다”를 적어 뒀다. 이 글이 그것을 만든 기록이다. 저장소는 data-ops-lab이고 재실행은 한 줄이다. ./.venv/bin/python exp... 2026/01/23 Notes, Database
자바 메모리 모델 - happens-before, volatile, 그리고 final의 안전 공개 Notes 멀티스레드 버그를 “가시성 문제”라고 부르고 volatile을 붙여 고친 경험은 있는데, 왜 그게 고쳐지는지는 설명하지 못했다. 자바 메모리 모델(JMM)은 그 “왜”를 정의한 문서다. JSR-133이 정의했고, 언어 명세 17장에 들어 있다. 그 정의의 중심에 happens-before라는 관계 하나가 있다. 무엇이 문제인가: 코드 순서는 실행 순... 2026/01/22 Notes, Java
SLASH 21 리뷰 - MySQL HA & DR Topology: MMM, 대칭 DR 구성, 바이너리 로그 필터, super_read_only 안전장치 Conference 발표 SLASH 21 연사 김피터 (토스 코어 데이터 서비스팀, Database Administrator) 자료 발표 영상 · SLASH 21 토스 MySQL의 HA(High Availab... 2026/01/20 Conference, Toss 토스 커뮤니티 백엔드 발표 리뷰 5편
Kafka의 저장 구조 - 세그먼트와 오프셋, 페이지 캐시와 zero-copy Notes Kafka가 빠른 이유를 “메모리를 쓰니까”로 설명하면 틀린다. Kafka 브로커는 메시지를 JVM 힙에 쌓아 두지 않는다. 디스크에 append하고, 커널의 페이지 캐시(커널이 파일 내용을 메모리에 들고 있는 영역)에 맡긴다. 이 구조를 알아야 “브로커 힙을 늘려도 왜 안 빨라지는가”, “왜 컨슈머가 밀리면 갑자기 디스크를 읽는가”가 설명된다. 파... 2026/01/16 Notes, Infrastructure
SLASH 21 리뷰 - 결제 시스템의 SDK와 API 디자인: 4단계를 2단계로, DELETE·PUT을 버린 이유, 한글 enum Conference 발표 SLASH 21 연사 이홍채 (토스페이먼츠 Technical Product Owner), 박순영 (토스페이먼츠 Server Developer), 이현섭 (토스페이먼츠 Frontend Developer) 자료 ... 2026/01/13 Conference, Toss 토스 커뮤니티 백엔드 발표 리뷰 3편
주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 4장 외부 연동이 문제일 때 살펴봐야 할 것들 Book 외부 시스템 연동은 “우리 코드가 아닌 부분”이 섞이기 때문에 장애 해석이 더 어렵다. 실무에서는 연동 자체보다 실패를 어떻게 다루는가가 더 중요하다. 외부 연동에서 흔한 문제 타임아웃 일시적 네트워크 실패 상대 시스템의 지연 증가 재시도로 인한 중복 요청 스펙 변경 부분 성공 상태 먼저 구분해야 할 것 1. 연결 실패... 2026/01/12 Book, 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식