Quorum이란? 분산 시스템에서 과반수로 합의하는 이유

Quorum이란 무엇인가 Quorum(쿼럼)은 분산 시스템에서 여러 노드 중 ‘충분한 수’의 노드가 동의해야 어떤 작업을 유효하다고 인정하는 방식입니다. 원래 이 단어는 회의체에서 의결이 성립하기 위한 최소 참석 인원을 뜻하는데, 분산 시스템에서도 비슷하게 쓰입니다. 예를 들어 아파트 입주자 대표회의에서 전체 인원의 절반 이상이 참석해야 결의가 유효하듯, 분산 데이터베이스에서도 전체 노드 중 과반수 이상이 동의해야 데이터 쓰기나 읽기가 … 더 읽기

Gossip Protocol이란? 노드들이 소문내듯 정보를 퍼뜨리는 방식

Gossip Protocol의 정의 Gossip Protocol은 분산 시스템에서 노드들이 서로 정보를 주고받을 때, 중앙 서버 없이 임의의 상대에게 무작위로 데이터를 전달하며 전체 네트워크에 정보를 퍼뜨리는 통신 방식입니다. 이름 그대로 사람들 사이에 소문이 퍼지는 방식을 본떠 만들어졌습니다. 한 사람이 친구 몇 명에게 소식을 전하면, 그 친구들이 또 다른 친구에게 전하면서 결국 모두가 알게 되는 과정과 동일한 원리로 … 더 읽기

UUID vs Auto Increment, 어떤 ID 전략을 써야 할까

Auto Increment와 UUID, 기본 개념부터 이해하기 데이터베이스에서 각 행(row)을 구분하려면 고유한 식별자, 즉 Primary Key가 필요하다. 이때 가장 흔히 쓰이는 두 가지 전략이 Auto Increment와 UUID다. Auto Increment는 데이터가 추가될 때마다 1, 2, 3… 순서대로 번호를 매기는 방식이고, UUID(Universally Unique Identifier)는 128비트 크기의 무작위성 높은 문자열(예: 550e8400-e29b-41d4-a716-446655440000)을 생성해 식별자로 사용하는 방식이다. 번호표 vs 지문, 동작 … 더 읽기

HMAC이란? 메시지 위변조를 막는 방법

HMAC의 정의 HMAC(Hash-based Message Authentication Code)은 해시 함수와 비밀 키를 결합해서 메시지가 중간에 변조되지 않았음을 증명하는 기술입니다. 흔히 SHA-256 같은 해시 함수와 함께 사용되어 HMAC-SHA256이라는 이름으로 자주 등장합니다. 단순히 해시값만 전달하면 누군가 메시지와 해시값을 동시에 바꿔치기할 수 있지만, HMAC은 오직 발신자와 수신자만 아는 비밀 키를 섞어서 계산하기 때문에 키를 모르는 제3자는 올바른 값을 만들어낼 수 … 더 읽기

Rainbow Table 공격이란? 해시만으론 안전하지 않은 이유

해시 함수와 비밀번호 저장의 기본 많은 서비스는 사용자의 비밀번호를 그대로 저장하지 않고 SHA-256이나 MD5 같은 해시 함수를 이용해 변환한 값을 저장합니다. 해시 함수는 입력값을 넣으면 항상 같은 길이의 고정된 문자열을 출력하고, 결과값만 보고는 원래 입력을 역으로 계산해낼 수 없다는 특징이 있습니다. 그래서 데이터베이스가 유출되더라도 해시값만 있으면 공격자가 원본 비밀번호를 바로 알아내기 어렵다고 여겨져 왔습니다. Rainbow … 더 읽기

비밀번호에 소금을 친다고? Salting의 개념

Salting이란 무엇인가 Salting은 비밀번호를 해시(hash)로 저장할 때, 원본 비밀번호에 임의의 무작위 문자열인 ‘솔트(salt)’를 덧붙인 뒤 해시 함수를 적용하는 기법입니다. 요리할 때 소금을 뿌려 맛을 내듯, 비밀번호에 예측 불가능한 값을 더해 보안성을 높인다는 의미에서 이런 이름이 붙었습니다. 예를 들어 사용자가 1234라는 비밀번호를 입력했다면, 서버는 이를 그대로 해시하지 않고 1234 + 무작위값(salt)을 합친 뒤 해시 함수를 돌려 … 더 읽기

직렬화(Serialization)와 역직렬화, 왜 알아야 할까

직렬화란 무엇인가 직렬화(Serialization)는 메모리에 존재하는 객체나 데이터 구조를 저장하거나 전송할 수 있는 형태로 변환하는 과정입니다. 프로그램이 실행되는 동안 객체는 메모리 어딘가에 흩어진 형태로 존재하는데, 이를 파일에 저장하거나 네트워크로 다른 시스템에 보내려면 연속된 바이트 스트림이나 문자열 형태로 바꿔야 합니다. 반대로 이렇게 변환된 데이터를 다시 원래의 객체 형태로 복원하는 과정을 역직렬화(Deserialization)라고 합니다. 쉽게 비유하면, 직렬화는 이사할 때 … 더 읽기

헬스체크(Health Check)란? Liveness와 Readiness의 차이

헬스체크란 무엇인가 헬스체크는 서버나 애플리케이션이 정상적으로 동작하고 있는지를 주기적으로 확인하는 검사 절차입니다. 쿠버네티스, 로드밸런서, 오케스트레이션 도구 등은 이 헬스체크 결과를 바탕으로 트래픽을 보낼지, 컨테이너를 재시작할지, 서비스에서 제외할지를 판단합니다. 보통 /health나 /healthz 같은 엔드포인트를 만들어 HTTP 200 응답 여부로 상태를 확인하는 방식이 널리 쓰입니다. Liveness Probe와 Readiness Probe의 차이 쿠버네티스를 예로 들면 헬스체크는 크게 Liveness(살아있는지)와 Readiness(준비되었는지)로 … 더 읽기

Cache-Aside 패턴이란? 캐시와 DB를 함께 쓰는 가장 흔한 방법

Cache-Aside 패턴이란 Cache-Aside는 애플리케이션이 캐시와 데이터베이스(DB)를 함께 사용할 때 가장 널리 쓰이는 방식입니다. 이름 그대로 캐시를 ‘옆에 두고(aside)’ 애플리케이션 코드가 직접 캐시와 DB를 제어하는 구조입니다. 캐시 서버(Redis, Memcached 등)가 자동으로 DB와 동기화해주는 게 아니라, 개발자가 로직 안에서 언제 캐시를 읽고 언제 채울지 직접 작성해야 합니다. 그래서 ‘Lazy Loading(지연 로딩)’ 패턴이라고도 불립니다. 비유하자면 도서관에서 자주 찾는 … 더 읽기

토큰 버킷 알고리즘이란? API 트래픽을 제어하는 방식

토큰 버킷 알고리즘의 정의 토큰 버킷(Token Bucket)은 일정한 속도로 요청을 제한하면서도 순간적인 트래픽 폭주를 어느 정도 허용해주는 트래픽 제어 알고리즘입니다. API 서버가 클라이언트의 과도한 요청으로 다운되는 것을 막기 위해 흔히 사용하는 레이트 리미팅(Rate Limiting) 기법 중 하나로, Google, AWS, Nginx 등 다양한 인프라에서 실제로 채택하고 있습니다. 이름 그대로 ‘토큰이 담긴 버킷’을 상상하면 이해가 쉽습니다. 버킷 … 더 읽기