글을 작성하게 된 계기 프로젝트에서 버그가 발생해 이전 버전으로 롤백(Rollback)을 하게 되면서, 이 과정에서 배운 내용과 생각을 정리하기 위해 글을 작성하게 되었습니다. 1. 장애 대응 일정 관리를 도와주는 Dailyge 프로젝트에서 다른 사람의 일정이 조회되는 버그 가 발생했습니다. 장애를 완전히 해결하기까지 다음과 같은 프로...
서비스 장애 대응과 롤백, 그 과정에서 배운점
EVAL, EVALSHA 명령어의 차이점과 레디스 내부 코드 살펴보기
글을 작성하게 된 계기 EVAL과 EVALSHA 명령어의 차이점 과 레디스 소스 코드를 살펴보며 알게된 내용 을 정리하기 위해 글을 작성하게 되었습니다. 1. EVAL, EVALSHA EVAL는 서버 측에서 루아 스크립트를 실행 하는 명령어입니다. 클라이언트가 스크립트를 레디스 서버로 보내면, 서버는 이를 실행합니다. 이는 스크립트를 ...
Retry 패턴을 적용할 때, 어떤 점을 고려해야 할까?
1. 글을 작성하게 된 계기 멱등키를 학습하다 Retry를 할 때도 고려할 점이 있다는 것 을 알게 되었고, 이를 정리하기 위해 글을 작성하게 되었습니다. 2. Retry 패턴 Retry 패턴은 네트워크, 데이터베이스 또는 다른 외부 리소스에 대한 연결이 일시적으로 실패할 때 사용할 수 있는 방법입니다. 이는 일시적 오류가 발생했을 경...
ChainedTransactionManager는 왜 Deprecated 됐을까?
글을 작성하게 된 계기 분산 트랜잭션(Distributed Transaction) 학습 과정에서 ChainedTransactionManager 에 대해 알게 된 내용을 정리하기 위해 글을 작성하게 되었습니다. A distributed transaction is a database transaction in which two or more ...
메시지 유실은 언제 발생할 수 있을까?
1. 글을 작성하게 된 계기 메시지 유실(Message Loss) 이 발생할 수 있는 구간에 대해 학습하는 과정에서 글을 작성하게 되었습니다. AWS CloudWatch, SNS, SQS를 예로 설명하기 때문에 AWS 기본 인프라를 이해하고 있으면 좋습니다. 2. 메시지 유실과 구간 메시지 유실(Message Loss)은 생산...
왜 MySQL에는 팬텀 리드가 발생하지 않을까?
글을 작성하게 된 계기 MySQL에서는 REPEATABLE READ 격리수준 에서 대부분의 상황 에서는 팬텀 리드(Phantom Read)가 발생하지 않는데, 이에 대해 학습한 내용을 정리하기 위해 글을 작성하게 되었습니다. 이번 포스팅은 꼭 실습을 하며 따라해볼 것을 권장드립니다. 1. 팬텀 리드와 MVCC 팬텀 리드(Pha...
Semantic Versioning이란?
글을 작성하게 된 계기 프로젝트의 버전을 자체적인 규칙으로 관리 했는데, 명확한 기준 이 없다 보니 언제 버전을 업데이트할지에 대한 판단이 잘 서지 않았습니다. 이 과정에서 시멘틱 버저닝에 대해 알게 되었고, 이를 정리하기 위해 글을 작성하게 되었습니다. 1. 시멘틱 버저닝 시멘틱 버저닝(Semantic Versioning)은 소프...
Github Action Workflow 삭제 자동화
글을 작성하게 된 계기 프로젝트를 하면서 Github Action이 실행되면 남는 Workflow를 자동으로 삭제하고 싶었습니다. 이 과정에서 어떤 점을 고려했고, 어떻게 자동화를 했는지 과정을 기록하기 위해 글을 작성하게 되었습니다. 1. 문제 상황 프로젝트에서 Github Action을 사용한 후 Workflow를 수동 으로 삭제하...
Google File System은 어떻게 구성 돼 있을까?
글을 작성하게 된 계기 The Google File System 논문을 읽고 학습한 내용을 정리하기 위해 글을 작성하게 되었습니다. 1. 개념 정리 글을 읽기 전, 아래와 같이 알고 있어야 할 개념들이 있는데, 이를 먼저 살펴보겠습니다. Metadata Chunk Chunk Handle Operation Log C...
dependsOn과 mustRunAfter는 무슨 차이가 있을까?
글을 작성하게 된 계기 Java로 된 프로젝트를 Kotlin으로 마이그레이션 하면서 build.gradle을 수정해야 할 일이 발생했습니다. 이 과정에서 dependsOn과 mustRunAfter의 차이점 에 대해 알게 되었고, 이를 정리하기 위해 글을 작성하게 되었습니다. 1. dependsOn dependsOn은 한 작업이 다른 작...