@Hudi
꾸준히, 의미있는 학습을 기록하기 위한 공간입니다.

코틀린 동시성 환경에서 컬렉션 잘 다루기

August 11, 2024

회사에서 대규모 데이터 처리의 성능 향상을 위해 코틀린 코루틴을 자주 사용하는데, 예전에 이런 동시성 환경에서 컬렉션을 잘못다루어 문제를 겪은적이 있었다. 이 포스팅에서는 이때 경험을 되살려 코틀린 동시성 환경에서 안전하게 컬렉션을 다루는 여러 방법을 소개한다. 동시성 이슈 발생 사례 단일 쓰레드에서의 작업 우리가 100개의 유저 ID 리스트를 가지고 있…


책 '일의 격' 정리

July 27, 2024

책 ‘일의 격’은 KT 엔터프라이즈 부문장 신수정의 책이다. 정확히는 ‘일의 격’은 저자가 저자의 페이스북에 꾸준히 올리는 일과 삶에 대한 글을 책으로 엮어 만든 것이다. 직전에 포스팅한 '프로그래머의 길, 멘토에게 묻다'와 마찬가지로 몇 달전에 읽은 책이지만 지금 올린다. 사람은 어떻게 성장하는지, 조직을 어떻게 이끌어야 하는지, 어떤 삶의 태도를 가져…


책 '프로그래머의 길, 멘토에게 묻다' 정리

July 21, 2024

‘프로그래머의 길, 멘토에게 묻다’ 라는 책을 몇달전에 읽었다. 책의 내용이 좋아 그냥 머릿속에서 휘발시켜버리기에는 아까워 블로그에 (내가 생각하는) 핵심 내용을 간단히 요약 정리해보고자 한다. 앞으로는 읽었던 책 중에서 블로그에 올릴만한 좋은 책들은 비슷하게 정리해서 올려볼까 한다. 이 책의 원제는 ‘Apprenticeship Patterns : Gui…


Bulkhead 패턴을 사용한 장애 격리

July 07, 2024

배경 최근 특정 데이터를 Apache POI를 사용해서 엑셀 파일로 만들어서 유저에게 서빙하는 기능을 개발했었다. 유즈 케이스를 조금 찾아보았는데, Apache POI로 규모가 큰 데이터를 다룰 때 Out of Memory 가 쉽게 발생한다는 사실을 알게 되었다. 다른 중요한 기능도 수행하고 있는 서버인데, 엑셀 파일을 만들다가 Out of Memory가…


MySQL는 Order By가 없다면 정렬을 보장하지 않는다

July 06, 2024

MySQL이 알아서 PK로 정렬해줄 것이라는 오해 흔히 쿼리를 실행하면 Primary Key 기준으로 오름차순 정렬이 되는 것을 보고, MySQL의 기본 정렬은 PK 기준이라고 생각할 수도 있다. 이를 확인해보기 위해서 위와 같이 테이블을 만들고, 실제와 비슷한 환경을 만들기 위해 10만개의 더미 데이터를 추가해두었다. 먼저, 테이블에 대해서 아무런…


그 이모지는 사실 한 글자가 아닐수도 있다

May 06, 2024

이 글을 읽기 전에 직전 포스팅인 유니코드는 어떻게 구성되어 있을까? 를 먼저 읽고 온다면 더욱 도움이 될 것이다. 이모지 이모지… 이모지가 무엇일까? 단순한 텍스트로는 감정 전달이 어려운 그 미묘한 부분을 시원하게 긁어주는 그림 문자. 한국에서는 스마트폰이 보급되고, SNS가 유행하기 시작하면서 많이 사용하게 되었던 것 같다. 그 유용성은 실로 어마무…


유니코드는 어떻게 구성되어 있을까?

May 01, 2024

유니코드 (Unicode) ASCII의 등장과 ASCII 확장이 빚은 혼란 초창기 컴퓨터에서는 아스키(ASCII)라는 문자 인코딩 방식을 사용했다. 문자 인코딩이란 문자나 기호등을 컴퓨터가 이용할 수 있는 어떠한 신호로 만드는 것을 의미한다. 아스키의 경우 위 표처럼 특정 숫자 코드에 문자를 매핑하는 문자 인코딩 방식이다. 예를 들어 아래 테이블 처럼 1…


개발자 성장에 관한 유튜브 채널 '드림코딩' 영상 정리

February 25, 2024

커리어와 성장에 대해 고민이 많은 요즘, 드림코딩이라는 유튜브 채널에서 관련된 좋은 영상을 보게 되어 이를 내 생각과 함께 정리해본다. 학습한 내용들을 글로 작성하여 인출하며 장기기억화에 큰 도움이 되므로, 앞으로 이런 좋은 영상을 보았을 때도 블로그에 내 생각과 함께 정리해보려고 한다. 첫번째 영상 - 개발 공부 제대로 하는 법 🤓 (정체기에서 성장기로…


레디스 다중 명령에 대한 원자성 보장 방법

February 25, 2024

레디스는 싱글 쓰레드로 동작하므로, 단일 명령의 처리는 원자적으로 동작하여 경합이 발생하지 않는다. 하지만 여러 명령을 한번에 수행하게 되면 이야기는 달라진다. 서로 다른 레디스 클라이언트에서 기능을 수행하기 위해, 한번에 여러 명령을 보낸다면, 각 클라이언트의 여러 명령이 뒤섞여 실행되며, 이로 인해 경합이 발생하고, 예상치 못한 문제가 발생할 수 있다…


SAGA 패턴을 통해 MSA에서의 데이터 일관성 보장하기

February 21, 2024

MSA에서의 데이터 일관성 기존 모놀리식 환경에서는 DBMS가 트랜잭션의 원자성과 일관성을 보장해주었다. 트랜잭션의 작업 중 일부가 실패하면, 전체 작업을 롤백하는 All or Nothing 구현이 어렵지 않았다. 하지만 MSA에서는 하나의 기능이 여러 마이크로 서비스를 걸쳐 수행된다. 즉, 전체 트랜잭션이 마이크로 서비스의 물리적인 로컬 트랜잭션 여러개…