Endianness란? Big-Endian과 Little-Endian의 차이

Endianness란 무엇인가 컴퓨터는 데이터를 메모리에 저장할 때 여러 개의 바이트(byte)를 사용합니다. 예를 들어 4바이트 정수 하나를 저장하려면 메모리 주소 4칸이 필요합니다. 그런데 이 여러 바이트 중 어떤 것을 먼저(낮은 주소에) 저장할지에 대한 순서 규칙을 Endianness(엔디언)라고 합니다. 즉, 엔디언은 ‘숫자를 이루는 바이트들을 메모리에 어떤 순서로 배열할 것인가’에 대한 약속입니다. 이를 책의 페이지 번호에 비유할 수 있습니다. … 더 읽기

Monotonic Clock이란? 시스템 시간과 다른 이유

Monotonic Clock의 정의 개발을 하다 보면 두 시점 사이의 ‘경과 시간’을 측정해야 할 때가 많다. 이럴 때 흔히 System.currentTimeMillis()나 new Date() 같은 벽시계(wall clock) 시간을 쓰기 쉽지만, 이는 함정이 될 수 있다. 벽시계 시간은 NTP 동기화, 사용자의 수동 변경, 서머타임 적용 등으로 인해 갑자기 앞으로 튀거나 뒤로 되돌아갈 수 있기 때문이다. 반면 Monotonic Clock(단조 시계)은 … 더 읽기

CAS(Compare-And-Swap)란? 락 없이 동시성을 제어하는 방법

CAS란 무엇인가 CAS(Compare-And-Swap)는 여러 스레드가 하나의 데이터를 동시에 수정할 때, 락(lock) 없이도 안전하게 값을 변경할 수 있게 해주는 CPU 수준의 원자적 연산입니다. 이름 그대로 ‘비교’하고 ‘교체’하는 두 단계를 한 번에 처리합니다. 즉, 메모리에 있는 현재 값이 내가 예상한 값과 같으면 새로운 값으로 바꾸고, 다르면 바꾸지 않습니다. 이 모든 과정은 중간에 다른 스레드가 끼어들 수 없도록 … 더 읽기

False Sharing이란? 멀티코어 성능을 갉아먹는 캐시 라인 문제

False Sharing의 정의 False Sharing(거짓 공유)은 멀티코어 환경에서 서로 다른 스레드가 각기 다른 변수를 다루고 있음에도, 그 변수들이 같은 캐시 라인(cache line)에 위치해 있어서 불필요한 캐시 무효화가 반복적으로 발생하는 현상을 말합니다. CPU는 메모리를 바이트 단위가 아니라 캐시 라인 단위(보통 64바이트)로 읽고 쓰기 때문에 생기는 문제입니다. 예를 들어 스레드 A가 변수 x를, 스레드 B가 변수 y를 … 더 읽기

Connection Draining이란? 무중단 배포의 숨은 핵심 원리

Connection Draining이란? Connection Draining(커넥션 드레이닝)은 서버를 종료하거나 배포를 진행할 때, 이미 연결되어 처리 중인 요청을 강제로 끊지 않고 안전하게 마무리될 때까지 기다려주는 기능입니다. 로드밸런서나 오케스트레이션 도구(Kubernetes, AWS ELB 등)에서 주로 제공하며, ‘연결을 서서히 빼낸다’는 의미에서 draining이라는 이름이 붙었습니다. 비유하자면 카페 마감 시간과 비슷합니다. 마감 시간이 되었다고 해서 이미 주문을 받고 커피를 만들고 있는 손님을 쫓아내지 … 더 읽기

TCP Congestion Control이란? 네트워크가 스스로 속도를 조절하는 법

TCP Congestion Control이란 TCP Congestion Control(혼잡 제어)은 송신 측이 네트워크의 혼잡 상태를 판단해서 데이터 전송 속도를 스스로 조절하는 메커니즘입니다. 인터넷은 여러 사용자가 동시에 대역폭을 공유하는 구조이기 때문에, 누군가 무작정 빠르게 데이터를 보내면 라우터의 버퍼가 넘치면서 패킷 손실과 지연이 발생합니다. TCP는 이런 문제를 막기 위해 ‘얼마나 많은 데이터를 한 번에 보낼지’를 나타내는 congestion window(cwnd)라는 값을 두고, … 더 읽기

Nagle 알고리즘이란? TCP 성능 저하의 숨은 원인

Nagle 알고리즘의 정의 Nagle 알고리즘은 TCP 통신에서 작은 크기의 패킷을 여러 개 보내는 대신, 이를 모아서 한 번에 전송하도록 만든 최적화 기법입니다. 1984년 존 네이글(John Nagle)이 제안했으며, 목적은 네트워크에 ‘자잘한 패킷’이 과도하게 흘러다니는 것을 막아 대역폭을 효율적으로 쓰는 데 있습니다. 예를 들어 텍스트 채팅 프로그램에서 한 글자씩 입력할 때마다 패킷을 보낸다면, 실제 데이터는 1바이트인데 TCP/IP … 더 읽기

Head-of-Line Blocking이란? HTTP/2에서도 사라지지 않은 병목

Head-of-Line Blocking이란? Head-of-Line Blocking(HOL Blocking)은 줄의 맨 앞(Head)에 있는 작업이 지연되면서 뒤에 있는 작업들까지 함께 대기하게 되는 현상을 말합니다. 편의점 계산대를 떠올려보면 이해가 쉽습니다. 한 줄로 서서 기다리는데 맨 앞사람이 카드 결제 오류로 시간을 오래 끌면, 뒤에 있는 사람들은 자기 물건을 다 계산할 준비가 되어 있어도 앞사람이 끝날 때까지 꼼짝없이 기다려야 합니다. 네트워크 통신에서도 이와 … 더 읽기

Tail Latency란? p99 지연시간이 중요한 이유

Tail Latency란 무엇인가 서비스의 응답 속도를 이야기할 때 흔히 평균 응답 시간을 기준으로 삼습니다. 하지만 평균은 전체 요청 중 유난히 느린 소수의 요청을 가려버리는 함정이 있습니다. Tail Latency(테일 레이턴시)는 바로 이 ‘꼬리 부분’에 해당하는, 상위 몇 퍼센트의 느린 응답 시간을 의미합니다. 이름 그대로 응답 시간을 그래프로 그렸을 때 오른쪽으로 길게 뻗은 꼬리 부분을 가리키는 개념입니다. … 더 읽기

Hot Partition이란? 샤딩에서 특정 노드만 과부하 걸리는 이유

Hot Partition의 정의 샤딩(Sharding)은 대용량 데이터를 여러 노드에 나누어 저장하는 기법입니다. 이론적으로는 데이터가 고르게 분산되어 각 노드가 비슷한 부하를 받아야 하지만, 실제로는 특정 파티션(샤드)에만 트래픽이나 데이터가 몰리는 현상이 발생합니다. 이를 ‘Hot Partition’ 또는 ‘Hot Spot’이라고 부릅니다. 예를 들어 전체 서버가 10대인데 그중 1대만 CPU 사용률 90퍼센트를 넘고 나머지는 10퍼센트대에 머무는 상황이 바로 Hot Partition입니다. 왜 … 더 읽기