
1. 프로세스와 스레드의 차이1.1 프로세스(Process)란?프로세스는 컴퓨터에서 실행 중인 프로그램의 한 인스턴스입니다. 운영체제가 할당한 자원(메모리, CPU 시간, 파일 핸들 등)을 사용해 독립적으로 실행됩니다.각 프로세스는 독립적인 메모리 공간을 가지고 있으며, 다른 프로세스와 메모리를 직접적으로 공유하지 않습니다. 이 때문에, 프로세스 간의 통신은 비교적 복잡한 방법을 사용해야 합니다. 이를 IPC(Inter-Process Communication, 프로세스 간 통신)라고 하며, 대표적인 방법으로는 파이프(pipe), 소켓(socket), 공유 메모리(shared memory) 등이 있습니다.1.2 스레드(Thread)란?스레드는 프로세스 내에서 실행되는 작업의 흐름입니다. 하나의 프로세스는 ..

QUIC 프로토콜1. 인터넷 통신의 기본: QUIC 이전의 세계1.1 인터넷 통신의 기본 개념인터넷을 통해 데이터를 주고받는 과정을 이해하기 위해, 우선 우체국 시스템을 떠올려봅시다. 편지를 보낼 때, 우리는 편지를 봉투에 넣고, 주소를 쓰고, 우체통에 넣습니다. 이와 유사하게, 인터넷에서 데이터를 보낼 때도 정보를 '패킷'이라는 단위로 나누고, 각 패킷에 목적지 주소를 붙여 보냅니다.1.2 TCP/IP: 신뢰성 있는 배달부TCP(Transmission Control Protocol)는 인터넷의 주요 통신 프로토콜 중 하나로, 마치 우체국의 신뢰할 수 있는 배달부와 같습니다. TCP는 다음과 같은 특징을 가집니다:연결 지향적: 통신을 시작하기 전에 '핸드셰이크'라는 과정을 통해 연결을 설정합니다.순서 보..

서킷 브레이커 (Circuit Breaker)서킷 브레이커?서킷 브레이커는 분산 시스템에서 장애 전파를 방지하고 시스템의 안정성을 높이기 위한 디자인 패턴입니다. 전기 회로의 차단기에서 영감을 받아 만들어졌으며, 소프트웨어 시스템에서 비슷한 역할을 수행합니다.작동 원리서비스 호출을 지속적으로 모니터링합니다.실패율이 설정된 임계값을 초과하면 '열린' 상태가 되어 호출을 차단합니다.일정 시간 후 '반열린' 상태로 전환하여 제한적인 호출을 허용합니다.호출이 성공하면 '닫힌' 상태(정상)로 돌아갑니다.주요 상태닫힘(Closed): 정상 상태. 모든 요청이 서비스로 전달됩니다.열림(Open): 장애 상태. 모든 요청이 즉시 실패로 처리되거나 대체 응답을 반환합니다.반열림(Half-Open): 복구 시도 상태. 제..

아래 내용은 The Art of Finishing 블로그 글을 번역한 내용입니다.프로젝트 히드라 효과: 끝없는 시작과 마주하기조용한 토요일 오후. 드디어 코딩에 집중할 수 있는 소중한 몇 시간을 확보했습니다. 뜨거운 커피 한 잔을 옆에 두고 익숙한 충동에 따라 프로젝트를 시작하려고 자리에 앉습니다. 터미널을 열고, 직면하게 되는 것은 이제 너무나도 익숙해진 도전입니다: 여러 미완성된 프로젝트 중 어느 것을 선택할 것인가.프로젝트 디렉토리로 이동하면, 마치 묻혀 있는 고대 유적지처럼 반쯤 구현된 아이디어와 중단된 작업들이 저를 맞이합니다. 각각은 제가 해결하려 했던 문제, 그리고 배우려 했던 기술을 대표합니다. 모두 흥미로운 프로젝트로, 각각의 목적과 잠재력을 지니고 있지만, 그것들을 살펴보는 순간 벌써부..

플로우(Flow)는 데이터 스트림을 비동기적으로 처리하기 위한 강력한 도구입니다. 플로우 연산자는 플로우 내에서 데이터를 변환하거나 처리할 때 사용하는 중간 연산자(intermediate operators)와 최종 연산자(terminal operators)로 나뉩니다. 플로우 연산자를 통해 데이터를 필터링, 변형, 조합하거나 오류를 처리하는 등 다양한 작업을 수행할 수 있습니다.1. 플로우의 구조중간 연산자: 플로우 내 데이터를 변형하거나 필터링하는 역할을 하며, 여러 번 사용할 수 있습니다. 플로우 자체를 변경하지 않고, 콜드 스트림을 유지합니다.최종 연산자: 플로우에서 데이터를 수집하는 역할을 하며, 데이터의 처리가 이 연산자를 통해서 완료됩니다. collect가 대표적입니다.2. 중간 연산자 (In..

1. Stream과 Flow의 차이점1.1 동기 vs 비동기Stream: 자바의 Stream API는 동기적으로 작동합니다. 이는 한 번에 하나의 스레드에서만 데이터를 처리할 수 있으며, 비동기 처리에는 적합하지 않습니다.Flow: 비동기적으로 데이터를 처리할 수 있도록 설계된 코틀린의 API입니다. 플로우는 코루틴을 기반으로 하며, 동시에 여러 작업을 처리할 수 있습니다. 지연된 데이터를 처리하거나 리액티브 프로그래밍이 필요할 때 유리합니다.1.2 백프레셔(Backpressure) 지원Stream: 자바의 스트림은 백프레셔를 지원하지 않습니다. 백프레셔는 데이터가 너무 빨리 방출되어 소비자가 이를 감당할 수 없는 상황을 처리하는 메커니즘인데, 스트림은 데이터 소비 속도를 제어할 방법이 없습니다.Flow..