멀티파트 업로드(Multipart Upload)란? 큰 파일을 나눠 올리는 이유

멀티파트 업로드란? 멀티파트 업로드는 하나의 큰 파일을 여러 개의 작은 조각(파트, Part)으로 나누어 각각 업로드한 뒤, 서버에서 이를 다시 하나의 파일로 합치는 방식입니다. 예를 들어 AWS S3, Google Cloud Storage 같은 클라우드 스토리지 서비스는 대용량 파일 업로드 시 이 기능을 기본으로 제공합니다. 파일 전체를 한 번에 전송하는 대신, 보통 5MB~100MB 단위로 잘라서 여러 번에 걸쳐 … 더 읽기

CSRF란? 내 계정을 노리는 위조 요청 공격

CSRF란 무엇인가 CSRF(Cross-Site Request Forgery, 사이트 간 요청 위조)는 사용자가 로그인한 상태를 악용해, 사용자도 모르는 사이에 원치 않는 요청을 서버로 전송하게 만드는 공격입니다. 공격자는 사용자의 계정을 직접 해킹하지 않고도, 사용자의 ‘인증된 세션’을 훔쳐 쓰는 셈입니다. 비유하자면 이렇습니다. 당신이 은행 창구에서 신분 확인을 마치고 대기 중일 때, 누군가 몰래 당신 이름으로 된 이체 신청서를 창구에 슬쩍 … 더 읽기

WAL(Write-Ahead Log)이란? 데이터베이스가 죽어도 살아남는 이유

WAL이란 무엇인가 WAL(Write-Ahead Log)은 ‘쓰기 전에 로그부터 남긴다’는 뜻의 데이터베이스 핵심 기술입니다. 데이터베이스는 실제 데이터 파일을 수정하기 전에, 어떤 변경이 일어날 것인지를 먼저 로그 파일에 기록합니다. 이 로그가 바로 WAL이며, PostgreSQL, MySQL(InnoDB의 redo log), SQLite 등 대부분의 관계형 데이터베이스가 이 방식을 사용합니다. 비유하자면, 이사할 때 짐을 옮기기 전에 ‘어느 방의 어느 짐을 어디로 옮길지’ 목록을 … 더 읽기

LRU 캐시란? 자주 안 쓰는 데이터를 버리는 전략

LRU 캐시의 정의 LRU는 ‘Least Recently Used’의 약자로, 가장 오랫동안 사용되지 않은 데이터를 우선적으로 제거하는 캐시 교체 전략입니다. 캐시는 메모리 공간이 한정되어 있기 때문에 새로운 데이터를 저장하려면 기존 데이터 중 일부를 버려야 하는 상황이 생기는데, 이때 ‘언제 마지막으로 사용됐는가’를 기준으로 삼는 것이 LRU입니다. 최근에 쓰인 데이터는 앞으로도 다시 쓰일 가능성이 높다는 경험적 가정(지역성의 원리)에 기반한 … 더 읽기

블룸 필터(Bloom Filter)란? 있을 수도 없을 수도 있는 자료구조

블룸 필터의 정의 블룸 필터는 ‘특정 데이터가 집합에 존재하는가?’를 아주 빠르고 적은 메모리로 확인할 수 있는 확률적 자료구조입니다. 일반적인 해시셋(HashSet)과 달리 정확한 값을 저장하지 않고, 비트 배열(bit array)만으로 존재 여부를 판단합니다. 그래서 결과가 ‘확실히 없음(No)’ 또는 ‘있을 수도 있음(Maybe)’으로만 나옵니다. 즉 없다고 하면 100% 없는 것이지만, 있다고 해도 실제로는 없을 가능성(False Positive)이 존재합니다. 반대로 있는데 … 더 읽기

2단계 커밋(Two-Phase Commit)이란? 분산 트랜잭션의 기본 원리

2단계 커밋이란? 여러 개의 데이터베이스나 서버에 걸쳐 하나의 트랜잭션을 처리해야 할 때가 있습니다. 예를 들어 주문 시스템에서 ‘재고 차감 DB’와 ‘결제 DB’가 서로 다른 서버에 있다면, 두 작업이 모두 성공하거나 모두 실패해야 데이터 정합성이 유지됩니다. 이런 상황에서 사용하는 대표적인 분산 트랜잭션 처리 방식이 바로 2단계 커밋(Two-Phase Commit, 2PC)입니다. 이름 그대로 트랜잭션을 준비 단계와 커밋 단계, … 더 읽기

데드레터 큐(Dead Letter Queue)란? 실패한 메시지는 어디로 갈까

데드레터 큐란 무엇인가 메시지 큐를 사용하는 시스템에서는 컨슈머(소비자)가 메시지를 처리하다가 실패하는 경우가 종종 발생합니다. 네트워크 오류, 잘못된 데이터 형식, 일시적인 서버 장애 등 원인은 다양합니다. 이때 실패한 메시지를 그냥 버리거나 무한정 재시도하게 두면 시스템 전체가 멈추거나 장애 원인을 파악하기 어려워집니다. 데드레터 큐(Dead Letter Queue, DLQ)는 이렇게 정상적으로 처리되지 못한 메시지를 별도로 격리해서 보관하는 큐입니다. 우체국에서 … 더 읽기

벌크헤드 패턴(Bulkhead Pattern)이란? 장애를 격리하는 설계법

벌크헤드 패턴의 정의 벌크헤드(Bulkhead)는 원래 선박에서 유래한 용어입니다. 배의 내부를 여러 개의 방수 격벽으로 나눠 놓으면, 한 구역에 물이 새어 들어와도 다른 구역으로 침수가 번지지 않아 배 전체가 침몰하는 것을 막을 수 있습니다. 소프트웨어 아키텍처에서 말하는 벌크헤드 패턴도 같은 아이디어입니다. 시스템의 자원(스레드 풀, 커넥션 풀, 프로세스 등)을 서비스나 기능 단위로 분리해서, 한 부분에서 장애가 발생하더라도 … 더 읽기

그레이스풀 셧다운(Graceful Shutdown)이란? 서버를 안전하게 내리는 법

그레이스풀 셧다운이란? 그레이스풀 셧다운은 서버나 애플리케이션을 종료할 때, 진행 중인 작업을 강제로 끊지 않고 안전하게 마무리한 뒤 종료하는 방식을 말합니다. 반대로 아무런 절차 없이 프로세스를 즉시 죽이는 것을 ‘하드 셧다운(Hard Shutdown)’이라고 하는데, 이 경우 처리 중이던 요청이 유실되거나 데이터가 깨질 위험이 있습니다. 비유하자면, 그레이스풀 셧다운은 가게 문 닫을 시간이 되었을 때 ‘더 이상 새 손님은 … 더 읽기

ETag란? HTTP 캐싱을 똑똑하게 만드는 헤더

ETag의 정의 ETag(엔티티 태그, Entity Tag)는 서버가 특정 리소스의 버전을 식별하기 위해 발급하는 고유한 값으로, HTTP 응답 헤더에 담겨 전달됩니다. 쉽게 말해 파일의 ‘지문’과 같습니다. 파일 내용이 조금이라도 바뀌면 지문도 달라지기 때문에, 클라이언트는 이 값만 비교해도 리소스가 변경되었는지 알 수 있습니다. 보통 ETag: \”a1b2c3d4\”처럼 해시값이나 체크섬 형태로 표현됩니다. 동작 원리와 예시 브라우저가 처음 이미지를 요청하면 … 더 읽기