개요URL 단축(URL Shortening) 서비스는 긴 URL을 짧은 형태로 변환해주는 웹 서비스이다. 예를 들어, https://example.com/very/long/pathasdasdasd 같은 URL을 https://tinyurl.com/2ee6n3sn처럼 훨씬 짧은 주소로 바꾸어준다. 이렇게 생성된 단축 URL을 클릭하면 원래의 긴 URL로 리디렉션된다. 대표적인 예로 TinyURL이나 Bitly 등이 있으며, 트위터와 같이 글자 수 제한이 있는 플랫폼에서 인기를 끌었다. 이러한 서비스는 긴 URL을 짧게 공유하기 쉽게 만들어주고, 데이터베이스에 그 매핑 정보를 저장하여 사용자의 접근 시 원래 주소로 안내해준다. 이제 이러한 URL Shortener 서비스를 설계하는 방법에 대해 단계별로 살펴..
개요 데이터 엔지니어와 백엔드 개발자들이 자주 다루는 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에 매핑된 ..