롱 폴링(Long Polling)이란? 실시간 통신의 옛날 방식 이해하기

롱 폴링이란? 롱 폴링(Long Polling)은 서버로부터 실시간에 가까운 데이터를 받기 위해 사용하던 기법입니다. 웹소켓(WebSocket)이 널리 쓰이기 전, 클라이언트가 서버의 변화를 즉시 감지하기 위한 대표적인 방법이었습니다. 기본 원리는 간단합니다. 클라이언트가 서버에 요청을 보내고, 서버는 응답할 새로운 데이터가 생길 때까지 연결을 끊지 않고 붙잡아둡니다. 데이터가 생기면 그때 응답을 보내고, 클라이언트는 응답을 받자마자 곧바로 다시 요청을 보내 다음 … 더 읽기

세마포어(Semaphore)란? 뮤텍스와 뭐가 다를까

세마포어란 무엇인가 세마포어는 여러 프로세스나 스레드가 공유 자원에 접근할 때, 동시에 접근 가능한 개수를 제어하기 위한 동기화 도구입니다. 내부적으로 정수 카운터를 하나 가지고 있으며, 자원을 사용하려는 스레드는 wait()(또는 acquire()) 호출로 카운터를 감소시키고, 사용이 끝나면 signal()(또는 release())로 카운터를 증가시킵니다. 카운터가 0이면 다른 스레드는 대기하게 됩니다. 비유하자면 주차장을 떠올리면 됩니다. 주차 공간이 3개인 주차장이 있다면, 동시에 3대까지만 … 더 읽기

일관된 해싱(Consistent Hashing)이란?

일관된 해싱의 정의 일관된 해싱은 분산 시스템에서 데이터를 여러 서버에 나눠 저장할 때, 서버의 개수가 변경되더라도 재배치되는 데이터의 양을 최소화하는 해싱 기법입니다. 일반적인 해싱 방식인 hash(key) % N은 서버 수(N)가 바뀌면 거의 모든 데이터의 위치가 뒤바뀌는 문제가 있습니다. 예를 들어 서버가 3대에서 4대로 늘어나면 나머지 연산의 결과가 대부분 달라져서, 캐시 서버라면 대부분의 캐시가 무효화되는 최악의 … 더 읽기

API 게이트웨이란? MSA에서 꼭 필요한 이유

API 게이트웨이의 정의 API 게이트웨이는 여러 개의 마이크로서비스 앞단에 위치해서 모든 클라이언트 요청을 받아 적절한 서비스로 전달해주는 일종의 ‘관문’ 역할을 하는 서버입니다. 클라이언트는 각 서비스의 주소를 일일이 알 필요 없이, 게이트웨이라는 하나의 진입점(Endpoint)만 알면 됩니다. 비유하자면 대형 호텔의 프론트 데스크와 같습니다. 투숙객이 룸서비스, 세탁, 컨시어지 등 각 부서에 직접 연락하지 않고 프론트에 요청만 하면, 프론트가 … 더 읽기

지수 백오프(Exponential Backoff)를 활용한 재시도 전략

지수 백오프란 무엇인가 지수 백오프는 네트워크 요청이나 API 호출이 실패했을 때, 일정한 간격이 아니라 실패할 때마다 대기 시간을 지수적으로 늘려가며 재시도하는 전략입니다. 예를 들어 첫 번째 재시도는 1초 후, 두 번째는 2초 후, 세 번째는 4초 후, 네 번째는 8초 후와 같이 대기 시간이 두 배씩 증가합니다. 이는 마치 친구에게 전화를 걸었는데 받지 않을 때, … 더 읽기

사가 패턴(Saga Pattern)으로 분산 트랜잭션 다루기

사가 패턴이란? 마이크로서비스 아키텍처에서는 하나의 비즈니스 프로세스가 여러 서비스에 걸쳐 처리되는 경우가 많습니다. 예를 들어 ‘주문하기’라는 하나의 작업이 주문 서비스, 결제 서비스, 재고 서비스로 나뉘어 각각 별도의 데이터베이스를 가지고 동작한다면, 기존처럼 하나의 트랜잭션으로 묶어서 처리할 수 없습니다. 이때 등장하는 것이 사가 패턴(Saga Pattern)입니다. 사가 패턴은 하나의 큰 트랜잭션을 여러 개의 작은 로컬 트랜잭션으로 나누고, 각 … 더 읽기

이벤트 루프로 이해하는 Node.js 비동기 처리

이벤트 루프란 무엇인가 Node.js는 단일 스레드로 동작하지만, 수많은 요청을 동시에 처리하는 것처럼 보입니다. 그 비밀이 바로 이벤트 루프(Event Loop)입니다. 이벤트 루프는 자바스크립트 엔진이 처리할 작업이 없을 때, 대기 중인 콜백 함수들을 순서에 맞게 실행시켜주는 일종의 ‘작업 관리자’입니다. Node.js는 파일 읽기, 네트워크 요청 같은 시간이 오래 걸리는 작업을 libuv라는 라이브러리에 위임하고, 그 작업이 끝나면 콜백을 이벤트 … 더 읽기

뮤텍스 vs 세마포어, 동시성 제어의 차이 완벽 정리

뮤텍스와 세마포어란? 여러 스레드나 프로세스가 동시에 실행되는 환경에서는 공유 자원(변수, 파일, 데이터베이스 커넥션 등)에 여러 주체가 동시에 접근하면 데이터가 꼬이는 문제가 발생합니다. 이를 막기 위해 사용하는 대표적인 동기화 도구가 뮤텍스(Mutex)와 세마포어(Semaphore)입니다. 뮤텍스는 ‘Mutual Exclusion(상호 배제)’의 줄임말로, 하나의 자원에 오직 하나의 스레드만 접근할 수 있도록 잠그는 도구입니다. 반면 세마포어는 정해진 개수만큼 여러 스레드가 동시에 접근할 수 … 더 읽기

데드락(Deadlock)이란? 발생 조건과 해결 방법 정리

데드락이란 무엇인가 데드락(Deadlock)은 두 개 이상의 프로세스나 스레드가 서로 상대방이 점유한 자원을 기다리며 무한정 멈춰버리는 상태를 말합니다. 흔히 드는 비유가 좁은 교차로 상황입니다. 네 방향에서 동시에 진입한 자동차들이 서로 양보하지 않고 앞차만 바라보며 멈춰 있다면, 누군가 먼저 물러나지 않는 한 영원히 그 자리에서 움직일 수 없습니다. 데드락도 마찬가지로 프로그램이 스스로는 절대 빠져나올 수 없는 교착 … 더 읽기

스레드와 프로세스, 헷갈리는 개념 한번에 정리하기

프로세스와 스레드란 무엇인가 개발 공부를 하다 보면 ‘프로세스’와 ‘스레드’라는 단어를 자주 마주치지만, 막상 둘의 차이를 설명하려면 말이 막히는 경우가 많습니다. 프로세스(Process)는 운영체제로부터 독립된 메모리 공간을 할당받아 실행되는 하나의 프로그램 단위입니다. 예를 들어 크롬 브라우저를 실행하면 하나의 프로세스가 생성되고, 메모장을 실행하면 또 다른 별도의 프로세스가 생성됩니다. 반면 스레드(Thread)는 프로세스 내부에서 실제로 작업을 처리하는 실행 흐름의 단위입니다. … 더 읽기