개요 데이터 엔지니어와 백엔드 개발자들이 자주 다루는 Apache Parquet 포맷은 일반적인 텍스트 데이터를 zip으로 압축한 것보다 훨씬 빠른 쿼리 성능을 보여준다. 이번 포스트에서는 Parquet가 왜 그렇게 빠른지, 열 지향(columnar) 구조가 어떤 원리로 쿼리 성능을 높이는지, 그리고 Parquet에서 사용되는 주요 압축 및 인코딩 기법들을 살펴보자. 또한 Trino, Spark, Hive 같은 분산 쿼리 엔진이 Parquet 데이터를 효율적으로 읽는 방법과, 일반 zip 압축 파일과 열 지향 압축 방식의 성능 차이도 비교해보자. Parquet가 일반 Zip 압축보다 빠른 이유일반적인 zip 등의 파일 압축은 모든 데이터를 통째로 묶어 압축하는 반면, Parquet 포맷은 열 단위로 데이..
개요 Redis는 메모리 기반의 키-값 저장소로 유명하며, 뛰어난 성능을 자랑한다. 이러한 높은 성능의 비결 중 하나는 I/O 멀티플렉싱(IO Multiplexing)을 활용한 싱글 스레드 이벤트 루프 구조에 있다. 특히 리눅스에서 Redis는 epoll이라는 고성능 I/O 이벤트 통지 메커니즘을 사용해 수많은 클라이언트 연결을 효율적으로 다룬다. epoll은 기존의 select(2)나 poll(2) 호출과 달리 커널 내부에서 관심있는 파일 디스크립터들을 관리하며, 이를 위해 레드-블랙 트리(Red-Black Tree) 기반의 자료 구조를 활용한다. 본 글에서는 커널 레벨에서 epoll이 어떻게 동작하고 select/poll 대비 무엇이 다른지, epoll 구현에 쓰이는 레드-블랙 트리가 I/O 성능에 ..
개요현대 웹 애플리케이션에서는 사용자가 한 번 로그인한 후에는 요청마다 다시 로그인하지 않고도 인증 상태를 유지해야 한다. 이를 구현하는 대표적인 방법으로 세션(Session) 기반 인증, JWT(Json Web Token) 기반 인증, OAuth 2.0 기반 인증(제3자 인증 위임)이 있다. 각각의 개념과 동작 흐름, 장단점, 보안 고려사항을 살펴보고 간단한 코드 예시를 통해 이해해보자. 세션 기반 인증 (Session-Based Authentication)개념세션 기반 인증은 서버가 사용자 인증 정보를 직접 저장하고, 클라이언트(브라우저)는 이 세션에 대응하는 세션 ID를 쿠키로 가지고 있는 방식이다. 브라우저가 요청을 보낼 때마다 쿠키에 담긴 세션 ID를 보내주면, 서버는 해당 세션 ID에 매핑된 ..
개요Docker에서 네트워크는 컨테이너 간 통신과 외부 서비스 연동에 매우 중요한 역할을 한다. 컨테이너 기술은 프로세스를 격리하여 실행하지만, 대부분의 실제 애플리케이션은 데이터베이스나 웹 등 다른 서비스와 통신해야 한다. 따라서 Docker에서 네트워킹을 잘 이해하면 컨테이너끼리 연결하고, 호스트 또는 외부와 안전하게 소통하며, 필요한 경우 특정 네트워크 환경을 구성할 수 있다.이 글에서는 Docker의 네트워크 관련 핵심 개념들을 정리해보자. 먼저 컨테이너를 실행할 때 설정할 수 있는 네 가지 네트워크 모드인 bridge, host, none, container: 모드를 알아보고 각각 언제 사용하는지 살펴볼 것이다. 이어서 Docker 네트워크를 사용자가 정의해서 만드는 방법과 종류(예: bridg..