There are 198 posts.

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

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에서는 하나의 기능이 여러 마이크로 서비스를 걸쳐 수행된다. 즉, 전체 트랜잭션이 마이크로 서비스의 물리적인 로컬 트랜잭션 여러개…


동시성 이슈로 인해 발생한 레디스 캐시 정합성 이슈

February 18, 2024

문제 상황 최근 회사에서 레디스를 사용하여 캐싱을 했는데, 정합성 이슈가 발생해서 이를 해결하게 된 과정을 적어보려고 한다. 일단 캐싱 구조에 대해 간략히 설명해본다. 캐시 구조 조회 API 호출 시, 이미 레디스에 캐시되어 있다면 캐시 데이터를 서빙하고, 그렇지 않다면 데이터베이스를 조회한 결과를 서빙한 뒤 레디스에 캐싱한다. (TTL은 2시간) 특정 …


Kafka Consumer 간략 정리

February 14, 2024

컨슈머(Consumer)와 컨슈머 그룹(Consumer Group) 토픽과 파티션 카프카에서 토픽(Topic)은 데이터를 구분하기 위한 단위이다. 일종의 데이터 카테고리이며, 굳이 비유하자면 관계형 데이터베이스의 테이블과 비슷한 개념이라고 생각해도 좋다. 이 토픽에는 1개 이상의 파티션(Partition)이 존재하는데, 이 파티션에 카프카 레코드(Rec…


2023년, 1년차 서버 개발자 회고

February 03, 2024

벌써 20대 후반이다. 아직 친구들과 만나면 중고등학교 시절 이야기를 마치 어제일처럼 이야기 하는데, 벌써 20대 후반이라니. 항상 회고는 12월 31일 또는 1월 1일에 올렸던 것 같은데, 올해 회고 작성은 바쁘다는 핑계로 차일피일 미루다 지금에서야 완성해서 포스팅한다. 그리고 회고가 단지 매년 형식적으로, 의례적으로 하는 행위가 되지 않기 위해서 고민…


성공/실패를 단언할 수 없는 네트워크 에러 안전하게 다루기

November 29, 2023

실패라고 단언할 수 있는가? 클라이언트가 서버로 네트워크를 통해 요청을 보낼때, 성공적으로 잘 처리되어 응답을 받는 경우가 대부분이겠지만, 일부 요청에서는 에러가 발생할 것이다. 그리고 이 에러 중 대부분의 경우 응답을 받은 즉시 요청이 정말로 실패했는지 확정지을 수 있겠지만, 일부 에러의 경우 실패를 확정지을 수 없다. 그런데 실패를 확정짓지 못한다는 …


slf4j MDC(Mapped Diagnostics Context)를 사용하여 로그에 맥락 더하기

October 20, 2023

뒤섞여 추적이 어려운 로그 우리가 회원가입 기능을 구현한다고 가정해보자. 유저가 회원가입을 마치기 위해서는 A, B, C 작업의 수행이 필요하다. 우리는 작업별 성공/실패 여부를 추적하기 위해 Logback을 사용해 로깅을 하기로 결정했다. 이를 에 구현해보자. , , 는 아래와 같이 작업의 성공, 실패 여부에 따라 다르게 로그를 남긴다. 이 서비스에…