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

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

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을 사용해 로깅을 하기로 결정했다. 이를 에 구현해보자. , , 는 아래와 같이 작업의 성공, 실패 여부에 따라 다르게 로그를 남긴다. 이 서비스에…


SpringBootTest와 WebTestClient를 사용한 E2E 테스트 중 발생한 JPA 지연로딩 이슈

July 13, 2023

테스트 전략에 대한 고민 스프링 부트를 사용하여 사이드 프로젝트를 하고 있다. 나는 테스트 작성을 중요하게 생각하고, 테스트 작성을 그다지 싫어하지는 않는 편이다. 그래도 테스트 작성은 다소 지루한 작업이라는 점은 사실이기 때문에 좋은 (혹은 작성하기 즐거운) 테스트에 대한 고민이 많았다. 달록 프로젝트를 할 때에는 테스트를 레이어 하나 하나 정말 꼼꼼히…


Git Hooks를 사용한 커밋 메시지 Prefix 자동화

July 01, 2023

사이드 프로젝트를 진행하며, 간단한 이슈 트래킹을 위해 Github Issue를 사용하고 있다. 개발을 하다 보면, 이전의 커밋이 어떤 이슈를 해결하기 위한 작업이었는지 배경을 파악할 필요가 있다. 따라서 나는 커밋과 연관된 이슈를 파악하기 쉽도록 이슈 티켓 번호를 커밋 메시지 Prefix로 두는 것을 선호한다. 하지만 일일히 이슈 티켓 번호를 사람이 커…