이벤트 하나가 프로듀서에서 발행되어 컨슈머가 처리하고 오프셋을 커밋하기까지의 흐름을 훑는다. ISR·High Watermark·오프셋 관리 같은 개별 개념의 상세는 별도 글에서 다루고, 여기서는 각 단계에서 누가 무엇을 결정하는지에 초점을 맞춘다. 본문에 나오는 설정 기본값은 Apache Kafka 4.2 문서 기준이다. acks, enable.id...
카프카 개요
카프카란 ? 공식 사이트에서는 “Apache Kafka is an open-source distributed event streaming platform“라고 표현 아래는 카프카 에코시스템 구성도로, 외부 시스템을 제외한 모든 게 Apache Kafka 에코시스템에 포함된다. 단, Schema Registry와 일부 Connect 커넥...
부하 테스트, 어떻게 주고 어떻게 읽을 것인가
들어가며 “TPS 5,000 나왔습니다”라는 문장에는 정보가 거의 없다. 무엇을 고정하고 무엇을 밀어 넣었는지가 빠져 있기 때문이다. 같은 시스템, 같은 코드로 측정해도 아래 조건에 따라 결과가 자릿수 단위로 갈린다. 동시 사용자 수를 고정했는가, 초당 유입량을 고정했는가 부하를 한 번에 몰아넣었는가, 몇 분에 걸쳐 꾸준히 넣...
MySQL - LOCK 살펴보기 (2) — 락의 타입과 종류
1편에서 락이 무엇이고, 어떤 인덱스 구조 위에서 어떤 과정으로 잡히는지 봤다. 이번 편은 InnoDB가 제공하는 개별 락을 타입(how, S/X) 과 종류(what, 레코드·갭·넥스트키…) 두 축으로 하나씩 살펴본다. Lock 타입 (how) InnoDB는 기본적으로 행 수준(row-level) 잠금을 구현하며(테이블 수준 잠금도 ...
MySQL - LOCK 살펴보기 (1) — 락 기초와 잠금 과정
락을 잘 모르면 비효율적인 쿼리를 작성하거나, 데드락을 유발하거나, 불필요한 성능저하 등을 일으킬 수 있다고 생각한다. 또한 디버깅시 실마리를 못잡을 수도 있다. 이런 일을 최대한 겪지 않도록 MySQL에서는 어떤 락을 제공하는지 살펴보자. 이 글은 두 편으로 나눈다. (1편) 락이 무엇이고, 어떤 인덱스 구조 위에서, 어떤 과정으로 잡히는지...
HTTPS 요청이 HTTP로 리다이렉트 되는 현상 2
상황 약 3년 전 HTTPS 요청이 HTTP로 리다이렉트 되는 현상을 겪었었다. 이때는 해결방법 2 (RequestHeader set X-Forwarded-Proto “https”) ForwardedHeaderFilter 이전 서버 구성 (브라우저) ---- https ---- (Load Balancer 1 : DSR 방식) ---- ht...
WEB - TCP vs UDP, 그리고 네트워크 진단 도구들
네트워크 팀과 소통하다 보면 “그 서버로 telnet 한번 때려보세요”, “traceroute 결과 좀 주세요” 같은 얘기를 자주 듣는다. 그런데 정작 그 도구가 뭘 하는 도구인지, 왜 그걸 쓰라는 건지 모르면 결과를 봐도 해석을 못 한다. 특히 네트워크 팀에서 “ACL 열어드렸어요”라고 했는데 telnet이 안 되면, 이게 네트워크가 안 열린 ...
WEB - WAF, SNAT, DNAT 등 (서버 이전하면서 헷갈렸던 개념들 정리)
최근 회사에서 서버 이전 작업을 하면서 헷갈렸던 개념들을 정리해본다. FW vs WAF — 왜 방화벽이 있는데 또 필요한가 이름이 둘 다 “방화벽”이라 헷갈리지만 검사하는 계층이 다르다. FW (방화벽) WAF (Web Application Firewall) ...
Spring - @Async 살펴보기 (JDK Executor를 곁들인..)
JDK의 Executor / ExecutorService / ThreadPoolExecutor Spring의 TaskExecutor / AsyncTaskExecutor / ThreadPoolTaskExecutor 비슷한 이름의 클래스들 정리 및 @Async 동작까지 살펴보자. Executor 공식문서 제출된 Runnable 작업을 실행하는 ...
Java - PreparedStatement는 어떻게 SQL Injection을 방어할까 (feat. MySQL)
java.sql.Statement (Interface) 공식문서 : “The object used for executing a static SQL statement and returning the results it produces.” users 테이블 id name pw ...