본문 바로가기

분류 전체보기31

[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.
[ELK] 엘라스틱서치 데이터 노드를 효율적으로 관리하는 방법 안녕하세요. 황진성입니다. 지난 글에 이어서 데이터 노드를 효율적으로 관리/활용하는 방법에 대해 알아보겠습니다. 연산이 많고 접근이 잦은 데이터와 거의 접근되지 않는 데이터를 분리하면 비용, 공간 측면에서 크게 절약할 수 있습니다. 주로 대용량 데이터를 다루는 상황이라면 차이가 극명하게 날텐데, Elasticsearch에서는 어떻게 이 문제를 해결하는지 알아봅시다. 혹시 독자님도 JVM based 언어를 많이 사용하시는지 ~? 저는 이번 글을 쓰면서 JVM GC 힙 영역의 Survivor1 + Survivor2 + Eden + Old 구조가 떠올랐습니다. 접근 확률에 따라 점점 밀어넣는 방식인데, 그림을 대충 보시고 아래 글을 읽으면 이해가 조금 더 빠를 것 같습니다 😁 이 글의 내용은 작성일 기준 최신.. 2023. 10. 24.
[ELK] 엘라스틱서치 클러스터를 구성하는 다양한 노드에 대해 알아보자 안녕하세요. 황진성입니다. 오늘은 Elasticsearch에서 클러스터를 구성하는 다양한 종류의 노드를 알아보고, 특히 마스터 노드가 선출되는 과정과 주의해야 할 점에 대해서도 알아보겠습니다. 이 글의 내용은 작성일 기준 최신 버전인 Elasticsearch 8.10 문서를 따라 작성됐습니다. 클러스터 구성에 앞서, 클러스터를 구성해야 하는 이유 일반적으로 클러스터는 여러 대의 컴퓨터를 병렬로 연결해서 마치 하나의 시스템인 것처럼 구성하는 것을 의미합니다. 클러스터를 구성하면 시스템 장애를 대비한 고가용성(High availability)을 높이는 동시에 시스템 성능도 높일 수 있습니다. Elasticsearch는 클러스터 구성에 필요한 여러 기능을 제공하고 있으며, 분산 처리를 지원하고 있기 때문에 굉.. 2023. 10. 17.
[일기] 첫 한강 러닝 다녀왔습니다 안녕하세요. 황진성입니다. 오늘은 처음으로 한강에 러닝 하러 다녀왔습니다. 처음 서울에 왔을 때부터 한강에 대한 로망이 조금 있었는데, 날씨 좋은 날 달려보고 싶다는 생각이 있었습니다. 하지만 마음먹은걸 행동으로 옮기는 데 까지 꽤 오랜 시간이 걸린 것 같습니다. 오늘 러닝을 진행했던 코스입니다. 동작역 2번출구에서 출발해서, 잠수교와 동작대교를 거쳐 한 바퀴 도는 코스였습니다. 제 폰으로 측정하기로 5.2km 정도가 나왔습니다. 생각보다 날씨가 쌀쌀해서 반팔티 반바지 입고 나왔다가, 긴팔티로 바꿔 입고 나왔습니다. 처서가 지난지 한 달이 넘었다는 것이 체감 되었습니다. 찬 기운에 공기는 한없이 무거웠지만, 한강으로 가는 발걸음은 가벼웠습니다. 잠수교 앞에서 예쁜 조명과 함께 물을 뿌려주는 모습. 예뻤습.. 2023. 10. 3.
[독후감] 출근했더니 스크럼 마스터가 된 건에 관하여 : 리뷰 안녕하세요. 황진성입니다. 애자일 조직에서 일하기 위해서 애자일에 대한 이해가 어느 정도 필요하다는 생각이 들었습니다. 그리고 회사에서도 애자일 조직의 운영을 위해 비용 투자를 하고 있는데, 뭐가 좋은 거고 어떻게 하는 거고 내 행동을 어떻게 바꿔야 하는지 알고 싶어서 책 한 권을 읽어봤습니다. 책 제목은 "출근했더니 스크럼 마스터가 된 건에 관하여" 입니다. https://product.kyobobook.co.kr/detail/S000200083569 출근했더니 스크럼 마스터가 된 건에 관하여 | 니시무라 나오토 - 교보문고 출근했더니 스크럼 마스터가 된 건에 관하여 | product.kyobobook.co.kr 각 섹션은 상황별로 구성되어 있고, 섹션별로 전달하고자 하는 바를 요약 및 해석해 봤습니다.. 2023. 9. 27.
[Infra] UUID vs Snowflake ID : 분산 시스템에서 유일한 ID를 만들어보자 안녕하세요. 황진성입니다. 오늘은 분산 시스템에서 유일한 ID를 만드는 방법에 대해 알아보겠습니다. 다양한 방법이 있지만, Twitter(X)에서 만든 Snowflake 방식과 UUID 방식을 주로 비교해 보겠습니다. 그리고 ID 생성기를 직접 Kotlin으로 구현하고, Spring Boot, JPA와 통합해서 간단한 블로그 애플리케이션을 만들어보겠습니다. 개요 개발을 하다 보면 유일한 ID를 만들어서 데이터를 관리해야 할 일이 생기기 마련입니다. 대표적으로 관계형 데이터베이스의 테이블 내 레코드 별로 고유 식별자를 가지는 경우가 있습니다. PK로써 테이블 내 고유함을 결정하는 지표가 되며, 인덱스 생성 시에도 활용합니다. 하지만 데이터와 트래픽이 많아진다면 ID 부여 방식에 대해 한 번쯤 고민해봐야 합.. 2023. 9. 10.