Infra 59
- Redis가 죽으면 문을 열까 닫을까: graceful degradation
- 내 DB와 외부 시스템의 동의 상태를 맞추는 법 — 양방향 동기화와 차집합
- 처리에 실패한 메시지는 어디로 가는가 — 재시도와 데드레터의 안전선
- 분산 락이 실패하면 어떻게 할까: 레이트리미터의 폴백
- 건건이 INSERT하지 마라 — 메모리 누산기로 통계를 접는 법
- 여러 인스턴스가 한 통을 나눠 쓰다: 분산 토큰 버킷
- 초당 수천 클릭을 삼키는 법 — 이벤트로 받아 비동기로 적재하기
- 한 이벤트, 네 갈래 알림 — 채널·템플릿을 전략으로 가르기
- 외부 API 호출을 추적하되 서비스키는 흘리지 마라 — 호출 로깅과 키 교체
- 읽기는 복제본으로, 쓰기는 주 DB로
- 권한 검사를 매 요청 DB로 묻지 않게 — 권한 캐시
- 검색엔진 연결에 SSL을 입히는 설정
- 푸시 알림: 보냈다고 도착한 건 아니다
- 수천 건 매핑 작업을 비동기로 돌리고 진행률을 보여주기
- 외부 API는 언젠가 느려지거나 죽는다
- Spring Boot에서 Kafka 사용하기
- 엑셀 다운로드를 비동기로 돌려 응답을 풀어주기
- 엑셀 수만 행 내려받기에서 메모리가 터지는 이유
- 대용량 업로드를 메모리에 올리지 마라
- S3 키를 무중단으로 갈아끼우기 — 자격증명 교체의 원칙
- Docker로 Kafka 구성하기 (KRaft 모드)
- 커넥션 풀은 왜 크게 잡으면 더 느려지나
- Kafka Producer/Consumer와 컨슈머 그룹
- 팀마다 다른 컬럼 순서로 엑셀을 내려주기 — 동적 헤더 POI 내보내기
- Apache Kafka란: 토픽 · 파티션 · 오프셋
- 컨슈머 하나로는 못 따라간다 — 메시지 처리 멀티스레딩과 커밋의 안전선
- Spring Boot에서 Redis 클러스터 설정하기
- 기능을 끄고 켜며 배포하는 법
- Docker로 Redis 클러스터 구성하기
- Redis 고가용성: Single, Replication, Sentinel, Cluster
- Redis 영속성: RDB vs AOF (그리고 MISCONF 에러)
- Redis란 무엇인가: 인메모리와 자료구조
- 운영체제 가상 메모리: 스왑 파일 생성 및 관리 방법
- AWS 보안 그룹 설정과 원본(Source) 개념
- 서버를 여러 대로 늘리면 세션이 사라진다 — 외부 세션 저장소
- 설정값을 코드에 박지 마라 — 프로파일과 비밀 분리
- 로그는 문자열이 아니라 데이터다
- 같은 쿼리 결과를 캐싱할 때의 신선도
- 탈퇴·정지 안내 메일을 템플릿으로 보내기
- 캐시로 N+1을 가리면 더 큰 문제가 된다
- 주소를 위도·경도로 바꾸는 보강 파이프라인
- 저장과 메시지 발행을 한 트랜잭션으로 묶기
- 운영 중 레디스 키를 들여다보고 지우는 도구
- API를 남용으로부터 지키는 레이트리밋
- 없는 데이터를 계속 조회하면 캐시가 무력해진다
- 5MB 넘는 파일을 막는 자리 — 업로드 크기·타입 가드
- 수십만 건을 한 트랜잭션에 담지 마라 — 청크 처리와 체크포인트
- 누가 무엇을 내려받았나 — 다운로드 이력 로깅
- 부수효과를 어느 훅에 둘 것인가 — ItemWriteListener의 beforeWrite와 afterRead
- 외부 API 호출 한도가 바닥나면 멈춰야 한다 — 소비자 측 쿼터 소진과 우아한 중단
- 배치 ItemReader가 같은 행을 다시 읽지 않게 — 페이징과 재시작 안전 쿼리
- 캐시 키를 잘못 잡으면 캐시가 안 산다
- 결제 통보가 두 번 와도 한 번만 처리하기 — 웹훅 멱등성
- 캐시 무효화: 컴퓨터과학의 두 난제 중 하나
- 카카오·문자·메일을 한 인터페이스 뒤에 숨기기
- 총건수 캐싱과 캐시 스탬피드
- 개발과 운영의 외부 API 키를 가르는 법
- 엑셀로 내려준 표가 깨져 보일 때 — POI 셀 스타일과 열 너비
- 배치는 돌았는데 성공했을까 — 배치 실행 이력 관리 화면