목록분류 전체보기 (145)
쿼카러버의 기술 블로그
현재 카프카 정리 시리즈를 포스팅 하고 있다. 카프카 정리 시리즈에서 다루는 여러가지 주제가 궁금할 경우 본 글 을 참고하길 바란다. 본 글은 컨슈머 개념을 이해하기 위해 작성했다. 컨슈머에 대한 개념과 구현예시를 중점으로 다룬다. Consumer란? 토픽의 파티션에 저장되어 있는 메시지를 소비하는 역할을 하는 애플리케이션이나 서버를 컨슈머라고 부른다. 컨슈머가 단순하게 카프카로부터 메시지만 가져오는 것 같지만 내부적으로는 컨슈머 그룹, 리밸런싱 등 여러 동작을 수행한다. 컨슈머는 데이터를 요청할 때 리더 파티션을 가지고 있는 카프카 브로커와 통신한다. Consumer 동작 방식 프로듀서가 카프카의 토픽으로 메시지를 전송하면 해당 메시지들은 브로커들의 로컬 디스크에 저장된다. 그리고 컨슈머는 토픽에 저장..
현재 카프카 정리 시리즈를 포스팅 하고 있다. 카프카 정리 시리즈에서 다루는 여러가지 주제가 궁금할 경우 본 글 을 참고하길 바란다. 본 글은 프로듀서의 개념을 이해하기 위해 작성했다. 프로듀서에 대한 개념과 기본적인 동작방식그리고 간단한 파이썬 프로듀서 구현체 대해 다룬다. Producer란? 프로듀서는 메시지를 생산해서 카프카의 토픽으로 메시지를 보내는 역할을 담당한다. 프로듀서는 데이터를 전송할 때 리더 파티션을 가지고 있는 카프카 브로커와 직접 통신한다. Producer 동작방식 먼저 프로듀서의 전체 흐름을 아래 그림과 함께 설명하겠다. Producer Record 카프카로 전송하기 위한 실제 데이터며, 레코드는 토픽, 파티션, 키, 밸류로 구성된다. 프로듀서가 카프카로 레코드를 전송할 때 카프카..
현재 카프카 정리 시리즈를 포스팅 하고 있다. 카프카 정리 시리즈에서 다루는 여러가지 주제가 궁금할 경우 본 글 을 참고하길 바란다. 본 글은 카프카의 아키텍처 및 구성요소, 즉 카프카를 이해하기 위해 알아두어야 할 필수 Term들에 대해 다룬다. Kafka의 아키텍처 pub - sub 모델 : 앞 글에서 다루었듯, publisher subscriber모델은 데이터 큐를 중간에 두고 서로 간 독립적으로 데이터를 생산하고 소비한다. 이런 느슨한(loose) 결합을 통해 publisher나 subscriber가 죽더라도 서로 간에 의존성이 없기 때문에 안정적으로 데이터를 처리할 수 있다. 특히 kafka에는 offset을 통해 특정 토픽을 어디까지 읽었는지에 대한 정보를 관리하고 있기 때문에 컨슈머중 어느 ..
현재 카프카 정리 시리즈를 포스팅 하고 있다. 카프카 정리 시리즈에서 다루는 여러가지 주제가 궁금할 경우 본 글을 참고하길 바란다. 본 시리즈는 아파치 카프카 시리즈의 첫 번째 글로, 카프카가 무엇인지에 대해 간략하게 소개한다. 카프카란? 대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 분산 메시징 플랫폼이다. 기술적으로 표현하면 비동기 처리를 위한 메시징 큐의 한 종류이며, 프로듀서와 컨슈머가 있다. 비동기라는 단어에서 겁먹지 말고 우리가 흔히 사용하는 메일의 예시로 비동기 메시징 큐의 의미를 한번 이해해보자. Mail : 비동기 메시징 우리가 일상적으로 사용하는 메일에서 보내는 사람은 받는 사람이 언제 메일을 받을지 모르는 상태에서도 메일 서버로 메시지(메일)를 보낼 수 있다. 보낸 메시지는..
카프카는 이제 개발자라면 꼭 알아야 하는 플랫폼이다. 예전 일이지만 아파치 카프카를 알기 전의 내가 카프카를 처음 들었을때는 의 작가 프란츠 카프카? 라고 반문했다 ㅋㅋ (실제로 카프카의 이름은 프란츠 카프카 이름에서 따왔다고함) 개발 공부를 시작하면서부터 내가 카프카라는 단어를 듣게되면 이제 아파치 카프카가 떠오르기 시작했다. 카프카카 무엇인지, 그리고 MSK를 사용할줄 아는 정도에 머물렀던 찰나에 회사에서 카프카를 활용해볼만한 일이 생기면서 카프카에 대해 열심히 찾아봤다. 하지만 책을 읽고 여러 포스팅을 읽는다 하더라도, 뭔가 머릿속에 딱 그려지는 느낌이 없어서 나중에 내가 보기 위해 카프카에 대한 정리 시리즈를 작성하려고 한다. 본 시리즈는 고승범님의 를 토대로 여러가지 웹 상에 존재하는 글들을 종..
웹서버 개발을 하다보면, 혼용되는 단어들이 꽤 있다. 로드 밸런서, 웹서버 등이 대표적인 예인데, 이번 글에서는 웹서버와 어플리케이션 서버를 하드웨어, 소프트웨어, 아키텍처 측면에서 간단하게 정리해보려고 한다. Web server(웹서버) 웹서버의 개념은 크게 두 가지 측면으로 요약할 수 있다. 소프트웨어 측면 : 웹서버는 HTTP와 같은 프로토콜을 통해 넘어온 클라이언트의 요청에 HTML과 같은 웹 페이지로 응답하는 소프트웨어다. 대표적인 예로 nginx, apache가 있다. 이 소프트웨어들은 호스팅하고 있는 서버(컴퓨터)에서 웹페이지의 컴포넌트 파일들(html, image, css, javacript 등)에 어떻게 접근하는지를 관리한다. 하드웨어 측면 : nginx나 apache와 같은 소프트웨어가..
DNS에 대해 공부하다보면, 나만 그렇게 느낄지 모르겠지만, 명확하게 정리된 내용을 잘 찾지 못했다. 필자는 DNS서버를 개발하려는 목적보다는, DNS가 어떻게 동작하는지, 그리고 어떻게 활용해볼 수 있을지에 대해 궁금했지만, 막상 내용을 찾아보면 너무 국소적으로 설명하거나 이론적 정의에만 치중된 글들이 많았고, 또 사용하는 용어들도 다르다 보니 전반적인 그림이 쉽게 이해가 되지 않았다.. 따라서 본 글에서는 DNS의 전반적인 그림에 대해 이해하고, DNS에서 필자가 가장 헷갈렸거나, 제대로 이해하지 못했던 내용들을 정리해보려고 한다. 항상 그렇지만 파고파도 끝이 없기 때문에, 관심있는 부분에 대한 키워드를 얻어가는 정도로 이 글을 읽으면 좋을 것 같다. 목차는 다음과 같다. DNS에 대한 간단한 소개 ..
Go httpclient connection pool 필자는 현재 Go언어로 MSA 아키텍쳐의 API 서비스를 개발하고 있다. 서비스 내부에서는 gRPC, jRPC, REST 등 다양한 HTTP기반 프로토콜을 사용해보고 있지만, 외부에 배포되는 서비스로는 HTTP를 기반으로 XML 또는 JSON을 이용하여 서버-클라이언트가 데이터를 주고받는 통신 방식인 REST API를 개발하고 있다. 트래픽이 적은 토이 프로젝트를 개발할 때는 성능 문제를 다룰 필요성을 못느꼈었는데, 회사에 와서 대용량 트래픽을 경험하다보니 connection explosion이 발생하면서 내가 알고있지 못했던 부분들을 많이 배우게 됐는데 그 중 하나가 httpclient의 connection pool관리였다. DBCP는 많이 들어봤지..