본문 바로가기

💻 개발 이야기21

[Kafka] 프로듀서의 내부 구조와 최적화 전략 안녕하세요. 이번 글에서는 카프카 프로듀서의 내부 구조와 최적화 전략에 대해 알아보겠습니다. 실제 카프카 클라이언트 코드도 어떻게 구현되어 있는지 함께 살펴봅시다. [ 들어가기 전에 ] 아래에서 다루는 내용은 Apache Kafka Java Client에 대한 내용입니다. 언어별 Client에 따라 구현 내용 혹은 동작 방식이 다를 수 있습니다. 공식적으로는 Java만 지원하며, Confluent에서 관리하는 librdkafka 라이브러리를 사용하면 C/C++, Go, .NET, Python도 사용 가능한 것으로 보입니다. 그리고 Apache Kafka는 버전이 변경됨에 따라 Default 값, 내부 동작 방식 등 꾸준히 개선되고 변화하고 있습니다. 작성일 기준에 맞춰 작성됐다는 점을 참고해 주세요. 이.. 2024. 4. 6.
[Kafka] 넓고 얕게 카프카를 이해해보자 안녕하세요! 다소 난해하고 복잡해 보이는 카프카에 대해서 넓고 얕게 알아보겠습니다. 00 | 이 글에서 얻을 수 있는 것 카프카 시스템을 구성하는 요소를 중고 거래 시스템에 빗대어 이해할 수 있다. 카프카 토픽과 파티션의 상관관계에 대해 이해할 수 있다. ISR 상태에 대해 이해할 수 있다. 카프카에 대해 아는 척할 수 있다. 01 | 카프카 구성 요소 아파치 카프카(Apache Kafka)는 실시간 스트리밍 데이터 파이프라인을 구축하는... 와 같은 어려운 정의는 구글 어디에서나 찾아볼 수 있습니다. 카프카는 메시지를 누군가에게 전달하는 시스템이라고 이해하시면 됩니다. 비유를 들어서 조금 더 쉽게 풀어보겠습니다. 만약 제가 당근마켓에서 중고 맥북을 구매하려 한다고 가정합시다. 우선 판매자는 맥북을 박스.. 2024. 2. 24.
[Infra] 분산 시스템에서의 일관성(Consistency) 이야기 안녕하세요!! 최근 AWS Lambda와 DynamoDB에 대한 세션에 참여했는데, DynamoDB에 일관성 개념이 잘 이해되지 않아서 정리해 봤습니다. 뿐만 아니라 컴퓨터 시스템에서 일관성(Consistency)이 굉장히 중요한 개념이기 때문에 요리조리 알아보도록 하겠습니다. 이 글에서 얻을 수 있는 것 분산 시스템 환경, 데이터 관점에서 일관성을 지키는 방법에 대해 이해할 수 있다. CAP 이론에 대해 이해할 수 있다. ACID, BASE 트랜잭션 모델에 대해 이해할 수 있다. 3가지 일관성 모델에 대해 이해할 수 있다. 트랜잭션과 일관성 DB 트랜잭션을 공부해보신 분이라면 ACID라는 단어를 들어보신 적이 있을 것입니다. ACID의 C가 Consistency, 일관성을 의미합니다. 트랜잭션이 데이터.. 2024. 2. 18.
[Redis] 디버깅 시 MONITOR 명령을 조심하세요 안녕하세요. 여러분은 Redis를 자주 사용하시나요? 아마 대부분 사용해 보셨거나 사용 예정이실 겁니다. 😏 Redis는 굉장히 빠르며 가장 인기있는 키-값 데이터베이스입니다. 이번에는 Redis의 MONITOR 명령을 조심해서 사용해야 하는 이유에 대해 소개하겠습니다. 요약 Redis의 MONITOR 명령으로 쿼리 패턴과 빈도를 분석할 수 있다. MONITOR 명령을 사용하면 50% 이상의 성능 감소가 발생할 수 있다. 꼭 필요하다면 최소한의 시간만큼 사용하거나, 비-운영 환경에서 재현하거나, 외부 로깅 도구를 사용한다. 이 글에서 얻을 수 있는 것 Redis MONITOR 명령이 무엇이고 어떻게 사용하는지 알 수 있다. MONITOR 명령 사용 시 성능이 느려지는 것을 확인하고 느려지는 원인을 알 수.. 2024. 2. 4.
[MongoDB] Dynamic field name(동적 필드명)을 꼭 사용해야 하나요? 개요 최근 Dynamic field name(이하 동적 필드명)을 사용하는 데이터베이스에서 많은 쿼리를 실행해야 하는 상황이 있었는데, 굉장히 불편하고 느렸던 경험이 있어서 공유하고자 글을 작성합니다. NoSQL과 설계 방법부터 차근차근 얘기해 보겠습니다. NoSQL 사용 목적 데이터베이스는 전통적으로 2개의 패러다임을 가지고 있습니다. MySQL과 같은 관계형 데이터베이스와 MongoDB 같은 NoSQL 데이터베이스가 있습니다. NoSQL 데이터베이스는 특히 대량의 데이터와 비정형 데이터를 처리할 때 확장성, 유연성, 고성능을 제공하도록 설계됐다는 특징이 있습니다. 스키마가 없기 때문에 스키마 설계에 큰 시간을 들이지 않을 수 있으며, 다양한 형식의 데이터를 처리할 수 있으므로 웹 애플리케이션, 실시간.. 2023. 12. 24.
[Kotlin] value class를 활용해서 "원시 값과 문자열을 포장하라" 성능 최적화하기 안녕하세요! 이번 글에서는 "모든 원시 값과 문자열을 포장하라" 원칙에 대해 알아보고, Kotlin으로 성능 최적화 하는 방법에 대해 알아보겠습니다. 요약 객체지향 생활체조의 "모든 원시 값과 문자열을 포장하라" 원칙을 Kotlin으로 구현할 때 value class를 '잘' 활용하면 불필요한 오버헤드를 줄일 수 있습니다. 생성 성능 측정 결과, 유의미한 차이는 없었습니다. 참조 및 연산 성능 측정 결과, value class가 일반 클래스보다 약 32% 느렸습니다. JVM Heap dump를 분석한 결과, value class가 일반 클래스에 비해 약 58%의 공간만 차지했습니다. 이 글에서 얻을 수 있는 것 객체지향 생활체조의 "모든 원시 값과 문자열을 포장하라" 원칙을 이해할 수 있다. Kotlin.. 2023. 12. 10.
[React] Maximum update depth exceeded 에러를 해결한 방법 안녕하세요. 황진성입니다. 이 글은 지난 글에서 이어집니다. [React/TS] MUI DataGrid로 수정 가능한 테이블 만들기 기능을 개발하며 처음 보는 에러가 발생했는데, 해결하신 분들마다 방식이 제각각이라 제가 해결한 방법도 소개하고자 합니다. 무슨 에러일까? Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render. # DeepL 번역 최대 업데이트 깊이를 초과했습니다. 컴포넌트가 useEffe.. 2023. 11. 20.
[React/TS] MUI DataGrid로 수정 가능한 테이블 만들기 안녕하세요. 황진성입니다. 이번 글에서는 React.js와 TypeScript를 활용해서 수정 가능한 테이블을 만들어보려 합니다. 구글의 Material UI Design을 구현한 라이브러리인 MUI를 활용해 볼 예정이며, MUI의 DataGrid 컴포넌트로 테이블을 생성할 수 있습니다. 이번에 다룰 내용이 간단하지만 블로깅 하는 이유는 공식 문서에 제가 원하는 방식이 설명되어 있지 않아서 많이 애먹었기 때문입니다... MUI DataGrid를 사용하시는 분들 중 저와 비슷한 기능을 만드시는 분들은 시간 낭비를 하시지 않았으면 좋겠습니다. 목표 React 프로젝트 생성부터 DataGrid로 테이블을 생성하고 변경된 값으로 상태를 변경하는 것까지 해보겠습니다. 프로젝트 생성 스크립트 $ npx create.. 2023. 11. 17.
[ELK] 엘라스틱서치 샤딩, 이 정도는 알고 사용하자 안녕하세요. 황진성입니다. 오늘은 Elasticsearch에서 데이터를 나눠 저장하는 단위. 샤드에 대해 알아보고 샤딩을 제대로 사용하기 위해 알고 있으면 좋은 내용들에 대해 알아보겠습니다. 이 글을 이해하기 위해서는 엘라스틱서치 노드, 특히 데이터 노드가 무엇인지 알고 있는 것이 좋습니다. [ELK] 엘라스틱서치 클러스터를 구성하는 다양한 노드에 대해 알아보자 [ELK] 엘라스틱서치 데이터 노드를 효율적으로 관리하는 방법 이 글의 내용은 작성일 기준 최신 버전인 Elasticsearch 8.10 문서를 따라 작성됐습니다. 샤드란? Elasticsearch는 여러 대의 노드를 효율적으로 활용해서 분산 처리를 하기 위해 데이터를 샤드(Shard)라는 단위로 나눠서 분산 저장합니다. 데이터를 분산 저장하면 .. 2023. 11. 3.
[ELK] Nori(노리) Tokenizer로 형태소 분석하기 /w Docker 안녕하세요. 황진성입니다. 오늘은 한글 형태소 분석기를 사용해서 주어진 텍스트에서 필요한 단어만 뽑아내는 방법에 대해 알아보겠습니다. 또한 나만의 사전을 만들어서 커스텀 분석기를 만드는 것까지 실습해 보겠습니다. 아래에서 진행한 모든 내용은 작성일 기준 Elasticsearch 8.10에서 정상적으로 동작합니다. 노리 형태소 분석기란? 한국어 형태소 분석기 중 많이 사용되는 형태소 분석기인 노리(Nori) 입니다. 노리는 Elasticsearch 엔진과 함께 구동하는 것이 일반적입니다. Lucene 분석 모듈을 사용하기 때문입니다. 노리는 mecab-ko-dic 사전을 통해 한국어 분석을 수행합니다. (제가 ES와 분리된 형태로 사용하는 방법을 찾아봤는데 못 찾았습니다.. 아시는 분은 제보 부탁드립니다... 2023. 10. 30.