Same-Origin Policy란? CORS가 필요한 근본 이유

Same-Origin Policy(SOP)란 무엇인가 Same-Origin Policy(동일 출처 정책)는 브라우저가 보안을 위해 기본적으로 적용하는 규칙으로, ‘다른 출처(origin)’에서 로드된 스크립트가 현재 페이지의 데이터에 접근하지 못하도록 막는 정책이다. 여기서 출처란 프로토콜, 호스트(도메인), 포트 세 가지가 모두 같아야 동일하다고 판단한다. 예를 들어 ‘https://example.com:443’과 ‘http://example.com:443’은 프로토콜이 다르므로 다른 출처이고, ‘https://example.com’과 ‘https://api.example.com’도 서브도메인이 다르므로 다른 출처로 취급된다. 이 정책이 없다면 어떤 일이 … 더 읽기

ETL과 ELT의 차이, 데이터는 어떻게 옮겨질까

ETL이란 무엇인가 ETL은 Extract(추출), Transform(변환), Load(적재)의 줄임말입니다. 여러 시스템에 흩어진 데이터를 가져온 뒤, 분석에 적합한 형태로 미리 가공하고, 그 결과를 데이터 웨어하우스 같은 저장소에 저장하는 방식입니다. 예를 들어 쇼핑몰의 주문 데이터를 옮긴다고 하면, 주문 시스템에서 데이터를 뽑아내고(Extract), 날짜 형식을 통일하거나 중복을 제거하는 등 별도의 변환 서버에서 가공한 후(Transform), 최종적으로 분석용 DB에 저장(Load)하는 순서로 진행됩니다. 마치 … 더 읽기

서버리스 환경의 숨은 지연, Cold Start란?

Cold Start의 정의 서버리스(Serverless) 컴퓨팅은 AWS Lambda, Google Cloud Functions처럼 서버 관리 없이 코드만 배포하면 실행되는 방식입니다. 그런데 이 편리함 뒤에는 ‘Cold Start’라는 숨은 지연이 존재합니다. Cold Start란 함수가 호출될 때 실행 환경이 아직 준비되지 않아, 컨테이너를 새로 생성하고 런타임을 초기화하는 과정에서 발생하는 지연 시간을 말합니다. 반대로 이미 준비된 환경에서 바로 실행되는 경우는 ‘Warm Start’라고 … 더 읽기

배치 처리 vs 스트림 처리, 언제 무엇을 써야 할까

배치 처리와 스트림 처리란? 데이터를 처리하는 방식은 크게 두 가지로 나뉩니다. 배치 처리(Batch Processing)는 일정량의 데이터를 모아두었다가 정해진 시점에 한꺼번에 처리하는 방식이고, 스트림 처리(Stream Processing)는 데이터가 발생하는 즉시 하나씩(또는 아주 작은 단위로) 실시간으로 처리하는 방식입니다. 비유하자면 배치 처리는 ‘세탁물을 모아뒀다가 세탁기 한 번 돌리기’와 같고, 스트림 처리는 ‘흐르는 물을 그때그때 걸러내는 정수 필터’와 같습니다. 전자는 … 더 읽기

Zero-Copy란? 데이터 복사를 줄이는 최적화 기법

Zero-Copy의 정의 Zero-Copy(제로 카피)는 데이터를 전송하거나 처리할 때, 불필요한 메모리 복사 과정을 최소화하는 최적화 기법입니다. 일반적으로 파일을 읽어서 네트워크로 전송하는 작업을 생각해보면, 데이터는 디스크에서 커널 메모리로, 커널 메모리에서 다시 애플리케이션 메모리로, 그리고 다시 커널의 소켓 버퍼로 이동하는 여러 단계를 거칩니다. 이 과정에서 같은 데이터가 여러 번 복사되는데, Zero-Copy는 이런 중복 복사를 없애거나 줄여서 CPU 사용량과 … 더 읽기

분산 환경에서 락을 거는 방법, Distributed Lock

Distributed Lock이란? 여러 대의 서버가 동시에 같은 자원에 접근할 때, 특정 시점에는 오직 하나의 프로세스만 해당 자원을 처리하도록 제어하는 기법을 Distributed Lock(분산 락)이라고 합니다. 한 대의 서버 안에서는 자바의 synchronized나 뮤텍스 같은 로컬 락으로 충분하지만, 서버가 여러 대로 늘어나면 각 서버는 서로 다른 메모리 공간을 사용하기 때문에 로컬 락으로는 충돌을 막을 수 없습니다. 이때 여러 … 더 읽기

Event Sourcing이란? 상태 대신 이벤트를 저장하는 이유

Event Sourcing이란? 일반적인 애플리케이션은 데이터베이스에 ‘현재 상태’만 저장합니다. 예를 들어 사용자의 잔액이 10000원이라면, DB 테이블에는 그냥 10000이라는 숫자 하나만 남습니다. 이전에 얼마를 입금했고 얼마를 출금했는지는 알 수 없죠. Event Sourcing(이벤트 소싱)은 이런 방식과 반대로, 상태 자체를 저장하는 대신 상태를 변화시킨 ‘이벤트’를 순서대로 모두 저장하는 설계 패턴입니다. 즉 ‘잔액 10000원’이라는 결과값 대신 ‘5000원 입금됨’, ‘3000원 출금됨’, … 더 읽기

Fan-out과 Fan-in: 분산 처리의 기본 패턴 이해하기

Fan-out과 Fan-in이란? 대용량 데이터를 빠르게 처리해야 하는 시스템에서는 하나의 작업을 여러 개로 쪼개서 동시에 처리하고, 그 결과를 다시 모으는 구조가 자주 등장합니다. 이때 작업을 여러 갈래로 분산시키는 과정을 Fan-out이라 하고, 분산된 작업 결과를 하나로 취합하는 과정을 Fan-in이라고 부릅니다. 이름 그대로 부채를 펼치듯(Fan-out) 퍼졌다가, 다시 접듯(Fan-in) 모이는 구조를 떠올리면 이해하기 쉽습니다. 이 패턴은 특정 언어나 프레임워크에 … 더 읽기

Heartbeat란? 시스템이 살아있는지 확인하는 방법

Heartbeat의 정의 Heartbeat(하트비트)는 말 그대로 ‘심장 박동’을 뜻하는 단어로, IT 시스템에서는 특정 서버나 프로세스가 정상적으로 살아있는지를 주기적으로 확인하기 위해 보내는 신호를 의미합니다. 마치 병원에서 환자의 맥박을 체크해 생존 여부를 판단하듯, 시스템도 일정 시간마다 신호를 주고받으며 상대방이 정상 작동 중인지를 확인합니다. 이 신호는 보통 매우 가벼운 형태로 구성됩니다. 예를 들어 PING 요청을 보내고 PONG 응답을 받는 … 더 읽기

분산 시스템의 Leader Election이란? 대장을 뽑는 이유와 방법

Leader Election이란? 분산 시스템은 여러 대의 서버(노드)가 함께 동작하며 하나의 서비스를 제공합니다. 그런데 특정 작업은 여러 노드가 동시에 수행하면 오히려 문제가 생깁니다. 예를 들어 데이터 정합성을 맞추는 작업이나 스케줄링처럼 ‘단 하나의 주체’만 처리해야 하는 일이 있죠. 이럴 때 여러 노드 중 하나를 ‘리더(Leader)’로 선출해 해당 작업을 전담시키는 절차를 Leader Election이라고 합니다. 비유하자면, 여러 지점을 가진 … 더 읽기