본문 바로가기

분류 전체보기29

[Kafka] 프로듀서의 내부 구조와 최적화 전략 안녕하세요. 이번 글에서는 카프카 프로듀서의 내부 구조와 최적화 전략에 대해 알아보겠습니다. 실제 카프카 클라이언트 코드도 어떻게 구현되어 있는지 함께 살펴봅시다. [ 들어가기 전에 ] 아래에서 다루는 내용은 Apache Kafka Java Client에 대한 내용입니다. 언어별 Client에 따라 구현 내용 혹은 동작 방식이 다를 수 있습니다. 공식적으로는 Java만 지원하며, Confluent에서 관리하는 librdkafka 라이브러리를 사용하면 C/C++, Go, .NET, Python도 사용 가능한 것으로 보입니다. 그리고 Apache Kafka는 버전이 변경됨에 따라 Default 값, 내부 동작 방식 등 꾸준히 개선되고 변화하고 있습니다. 작성일 기준에 맞춰 작성됐다는 점을 참고해 주세요. 이.. 2024. 4. 6.
AULA F87(독거미)에서 맥북 fn키 고정이 안되는 문제 해결 안녕하세요! 가성비 키보드 중 핫한 녀석인 AULA F87 (aka 독거미) 키보드를 구매했습니다. 그러나... TL;DR AULA의 공식 소프트웨어는 백도어 등 보안 이슈가 생길까 봐 걱정됐습니다. Windows 모드와 Karabiner를 사용해서 해결했습니다. 최고의 가성비 키보드입니다. 문제 저는 F1~F12를 많이 사용합니다. 그래서 Fn 키를 누르지 않고 F12를 눌러도 크롬 개발자 도구가 나오도록 설정해서 사용합니다. 다행히도 맥북에서는 사용자가 세팅할 수 있도록 기능을 제공하고 있습니다. 설정 > 키보드 > 키보드 단축키 > 기능 키 > (Toggle) 펌웨어 측면에서 완성도가 높은 키보드들은 이렇게만 설정해도 잘 동작하겠지만, 아쉽게도 F87은 그렇지 않습니다. 그래서 이 글을 작성했습니다.. 2024. 3. 12.
[독후감] 비상식적 성공법칙 안녕하세요! 군 복무 중 다양한 자기 계발, 성공 법칙에 대한 책을 많이 읽었었는데 큰 도움이 되지 않아 한동안 쳐다보지 않았었습니다. 세상에 정답은 없고, 설령 정답이 있다 하더라도 사람마다 기질이 다르고 상황도 다릅니다. 그리고 자기 계발 서적보다 제 업무(소프트웨어 엔지니어링)에 관련된 서적을 읽는 것이 훨씬 나은 효용을 주고 있기 때문입니다. 약 한 달 전, 회사의 (신뢰하는) 조직장님과 식사 후 커피를 마시고 있는데 이 책을 추천해 주셨습니다. "다른 책과 차별점이 있을까?"라는 의심을 했지만 더 고민하지 않고 책을 구매해서 읽었습니다. 간다 마사노리의 "비상식적 성공법칙"입니다. https://www.yes24.com/Product/Goods/110103849 아래에는 제 의견과 저자의 생각이.. 2024. 3. 9.
[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.
[회고] 2023 생각 스냅샷 반가워! 2024년. 그리고 잘 가! 2023년. 저에게 있어 다사다난했던 한 해가 저물어 가고 있습니다. 단순히 지난 일 년을 돌아보는 것을 넘어서, 제 자신과 커리어에 대한 깊은 성찰의 시간을 가져봤습니다. 이 글을 통해 지난해의 경험을 정리하고, 배운 교훈을 바탕으로 앞으로 나아갈 방향을 설정하고자 합니다. ⭐️ 2023년 핵심 키워드 ⭐️ 이직, 이사, 인간관계, 관심사의 확장 정확히 말하면 이 글은 회고가 아닙니다. 제목에도 나와있듯 생각 스냅샷이라고 표현하면 적절합니다. 문득, 보통의 회고는 하기가 싫었습니다. 다음과 같은 순서로 진행되는 회고 글을 보통의 회고라 생각합니다. 나 이거 저거 했다. 이런저런 과정이 있었다. 앞으로 더 잘할 거다. 대체로 일어난 사건과 팩트 중심으로 전개되는 글을.. 2024. 1. 7.
[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.