TL;DRKafka 설계문서를 읽다가 모든 메시지를 디스크에 쓴다면서 빠르다고 해서 그게 말이 되나 싶었다. 파고들어 보니 데이터를 안 잃는 방법을 fsync가 아니라 replication으로 바꿔놨고, 그 선택이 캐시를 OS에 맡기는 것으로, 다시 zero-copy로, 로그를 언제 어떻게 지우는지까지 이어지고 있었다.다 디스크에 쓰는데 빠르다고?Kafka 설계문서를 읽다가 한참 멈춰 있었던 문단이 있다. 모든 메시지를 파일 끝에 붙이기만 하고 중간을 고치거나 지우지 않는다는 대목이었다.순차 쓰기가 빠르다는 것 자체는 납득이 됐다. 문서에 인용된 수치로 순차가 600MB/s인데 랜덤은 100KB/s라고 하니 차이가 크긴 하다.그래도 이상했다. 디스크는 디스크인데, 메모리에 들고 있는 큐보다 빠를 수는 없..
TL;DR앞 글에서 컨테이너가 리눅스 커널 기능이라는 걸 정리하고 나니 의문이 남았다. 커널이 다 하는 거면 도커는 뭘 만든 건가. 찾아보니 커널 코드는 한 줄도 안 썼고 초기 버전은 LXC를 호출하기만 했다. 컨테이너 기능은 VPS 호스팅 업체들이 10년에 걸쳐 커널에 밀어 넣은 것이었고, 그렇게 밀어 넣을 수밖에 없게 만드는 규칙이 리눅스 안에 있었다.커널이 다 하는 거면 도커는 뭘 했나앞 글에서 컨테이너가 호스트 커널을 공유한다는 걸 정리했다. 격리는 namespace가 하고 자원 제한은 cgroup이 한다. 둘 다 리눅스 커널 기능이다.정리하고 나니까 좀 이상했다. 격리도 커널이 하고 자원 제한도 커널이 하는데, 그럼 도커가 만든 건 뭔가 싶었다.namespace는 도커보다 10년 빠르다들어온 순..
TL;DRMac에서만 Docker를 써온 나는 컨테이너가 리눅스인 게 Mac이라서 그런 줄 알았다. 윈도우에서 돌리면 윈도우 컨테이너가 될 거라고 생각했는데, Docker Desktop은 윈도우에서도 리눅스 VM을 돌리고 있었다. 윈도우 전용 컨테이너가 존재하고 메뉴에서 전환도 되는데, 전환하는 순간 받을 이미지가 없기에 잘 사용되지 않았다. 윈도우 컨테이너를 막고 있던 건 커널이 아니라 라이선스와 생태계였다.윈도우에서 돌리면 윈도우 컨테이너가 되는 줄 알았다GitHub에서 dockur/windows라는 프로젝트를 봤다. docker run 한 줄이면 윈도우가 뜨고 브라우저로 접속해서 쓸 수 있다는 건데 스타가 5만 개 넘게 달려 있었다.보면서 이상했다. 나는 컨테이너가 호스트를 따라간다고 생각하고 있었..
TL;DR면접에서 React.memo를 어필했다가 "더 잘 쓰려면 어떻게 할 수 있을까요?"라는 질문에 막혔다. 답을 찾다 보니 memo 하나만의 문제가 아니었다. React가 리렌더링을 결정하는 방식, Fiber 재조정, Object.is 비교까지 이해해야 memo가 왜 그렇게 동작하는지 납득이 됐다.React.memo, 많을수록 좋은 거 아닌가요?지난 여름, 서비스 기업 면접에서 React.memo를 적극적으로 어필했다.컴포넌트 최적화를 위해 memo를 적용했고 불필요한 리렌더링을 줄였다는 내용이었기에 꽤 자신 있었다."그러면 작성하신 코드에서 React.memo를 더 잘 쓰려면 어떻게 할 수 있을까요?"머릿속이 하얘졌다. memo를 쓰는 것 자체가 최적화라고 생각했지 "더 잘 쓴다"는 개념을 생각해..
TL;DR인턴십 중 HTML을 PDF로 변환하는 과정에서 브라우저에서는 멀쩡한 화면이 PDF에서 깨지는 문제를 겪었다. 해결책은 “WebKit 문법 기준으로 HTML을 다시 작성하라”는 것이었다.이 경험을 통해 WebKit은 레거시가 아니라 OS 레벨에서 렌더링 결과의 책임을 지는 엔진이라는 사실을 체감했다.WebKit이 최신 CSS를 늦게 지원하는 이유는 기술력이 부족해서가 아니라 역할과 책임이 다르기 때문이다.문제의 시작: HTML은 정상인데, PDF에서는 깨졌다인턴십 중HTML을 PDF로 변환하는 API를 사용하는 작업을 맡게 됐다.상황은 단순했다.Chrome에서 HTML 렌더링 → 정상동일한 HTML을 PDF 변환 API에 전달 → 레이아웃 깨짐, 요소 위치 어긋남, 일부 스타일 미적용처음에는 흔..
TL;DR본인인증 시스템에서 ID·DI·CI는 각각 ‘사용자 이름’, ‘서비스 단위의 고유 식별자’, ‘전역 고유 식별자’를 의미한다.스폰지밥 에피소드를 통해 식별자 체계의 범위와 역할을 쉽게 정리해보려 한다.이름이 아니라 ‘본체’를 식별하는 법인턴 생활 중 사용자 식별과 관련된 기능을 다뤘다.단순히 아이디(ID)로만 구분하는 게 아니라, 사용자의 고유한 연결 정보(CI, Connecting Information) 를 기준으로 이전 이용 이력이나 데이터 중복 여부를 판단하는 구조였다.CI는 단순히 인증용 값이 아니라, 서비스 전반에서 동일 인물을 일관되게 인식하게 만드는 본체 식별자라는 걸 처음 알게되었다.이전 글 [Python hash() 함수가 내 캐싱을 망쳤어] 에서 다뤘던 “입력에 대한 결정적 결..