글을 작성하게 된 계기 MySQL에서는 REPEATABLE READ 격리수준 에서 대부분의 상황 에서는 팬텀 리드(Phantom Read)가 발생하지 않는데, 이에 대해 학습한 내용을 정리하기 위해 글을 작성하게 되었습니다. 이번 포스팅은 꼭 실습을 하며 따라해볼 것을 권장드립니다. 1. 팬텀 리드와 MVCC 팬텀 리드(Pha...
왜 MySQL에는 팬텀 리드가 발생하지 않을까?
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은 한 작업이 다른 작...
Git History 관리 중 발생한 충돌 해결기
글을 작성하게 된 계기 프로젝트에서 Git Rebase 와 Squash Merge 를 사용해 히스토리를 깔끔하게 관리하고 싶었습니다. 이 과정에서 충돌이 발생했는데, 왜 발생했는지, 어떻게 해결했는지에 대해 정리하기 위해 글을 작성하게 되었습니다. Git도 꽤 익숙해졌다고 생각했는데, 생각지도 못한 이슈가 발생해서 꽤 재미있었네요. 😆...
비동기 환경에서 MDC의 문맥 복사 어떤 원리로 동작할까?
1. 글을 작성하게 된 계기 비동기에서 왜 MDC의 문맥 복사가 필요한지, 어떻게 동작하는지 한 번 더 정리하기 위해 글을 작성하게 되었습니다. 이를 이해하기 위해서는 ThreadLocal과 람다에 대해 알고 있어야 합니다. 2. 왜 비동기를 사용할 때, 문맥을 복사해야 할까? 비동기에서 MDC의 문맥을 복사 해서 처리하는 해...
애플리케이션의 타임존은 어떻게 관리하는 것이 좋을까?
1. 글을 작성하게 된 계기 서버/애플리케이션과 데이터베이스의 Timezone 설정 관리 에 대해 고민하면서 생각을 정리하기 위해 글을 작성하게 되었습니다. 2 시간대 관리 정책 먼저 서버/애플리케이션과 데이터베이스에서 Timezone을 관리하는 정책 케이스를 간단히 살펴보겠습니다. Server: UTC / Databas...
서버 리소스 변경으로 인한 롤링 배포 실패 해결기
1. 글을 작성하게 된 계기 프로젝트에서 ECS 컨테이너 스펙을 다운그레이드 한 후, 배포가 실패 했습니다. 원인이 복합적이라 정말 찾기 까다로웠는데요, 어떤 문제가 있었고, 어떻게 해결했는지를 정리하기 위해 글을 작성하게 되었습니다. 프로젝트는 ECS/EC2, 테라폼(Terraform)을 사용했으며, 이를 기준으로 설명하겠습니다. ...
분기문으로 개발 환경을 구분하는 것은 좋은 방법일까?
1. 글을 작성하게 된 계기 분기문으로 개발 환경을 구분하는 것은 좋은 방법인가? 에 대해 생각을 정리하기 위해 글을 작성하게 되었습니다. @Service @RequiredArgsConstructor public class ExampleService { private final String env; public void met...