글을 작성하게 된 계기 최근 OpenSearch를 사용하게 됐는데, 이전에 학습했던 Elasticsearch의 Near real-time 검색 원리와 내부 구조와 동작 원리를 복습 및 정리하기 위해 글을 작성하게 되었습니다. 1. ElasticSearch의 내부 구조 엘라스틱서치의 내부는 다음과 같이 구성 돼 있습니다. 하나의 인덱스(...
ElasticSearch의 내부 구조와 동작 원리
ISO Week Numbering: ISO 주와 일반 주의 차이점
글을 작성하게 된 계기 MySQL YEARWEEK( ) 함수를 사용하다 ISO 주와 일반 주의 차이점에 대해 궁금해서 글을 작성하게 되었습니다. 1. ISO 주와 일반 주의 차이점 일반적인 달력에서 사용하는 주차 계산 방식은 단순합니다. 1월 1일이 속한 주를 해당 해의 첫 번째 주, 즉 1주차로 정합니다. 그래서 1월 1일이 포함된 ...
LOAD DATA의 중복 데이터 삽입 방지
글을 작성하게 된 계기 영중소 차액정산 프로젝트를 진행하며 MySQL LOAD DATA 를 사용해 수 천만 건의 데이터를 삽입 하는 작업을 했습니다. 이 과정에서 중복 데이터 삽입 방지 에 대해 고려하게 되었고, 알게된 방식을 정리하기 위해 글을 작성하게 되었습니다. 대용량 데이터의 정의는 사람마다 다를 수 있습니다. 저는 이번 프로젝트에...
ISOLATION LEVEL의 관습적 사용
글을 작성하게 된 계기 ISOLATION LEVEL을 관습적으로 사용하던 것을 느꼈고, 이를 정리하기 위해 글을 작성하게 되었습니다. 1. 왜 이런 고민을 하게 됐을까? 문제가 발생했던 것은 아닌데요, 스프링에서 @Transactional을 사용할 때, 관습적으로 REPEATABLE READ 만 사용하고 있는 것을 느꼈습니다. 별도 설...
외부 API 문서화
글을 작성하게 된 계기 외부 API 문서화에 대해 정리하기 위해 글을 작성하게 되었습니다. 1. 외부 API 문서화, 자동화의 필요성 외부 API 문서화는 단순한 문서 작업이 아니라, 팀 전체의 생산성을 높이는 방법 입니다. 외부 API 스펙을 자동으로 문서화하기 위해서는 외부 API를 문서화해야 하는 케이스 와 외부 API 문서화 방...
Exception
최근 로그를 잘 남기는 것에 관심이 많아졌는데요, 이를 위해 자바의 예외(Exception)를 한 번 더 정리하고 싶어 글을 작성하게 되었습니다. 1. 자바의 예외 자바에서는 예외 처리를 위해 Exception 과 Error 두 가지 클래스를 제공합니다. 이들은 모두 Throwable의 하위 클래스로, 실행 중 발생할 수 있는 오류나 예...
올바른 장애 대응 문화에 대한 생각 정리
글을 작성하게 된 계기 전사 차원의 장애를 보고 겪으며, 생각을 정리하기 위해 글을 작성하게 되었습니다. 1. 장애에 대한 생각 변화 입사 후 몇 차례 전사적인 장애를 겪으면서, 처음에는 단순한 기술적 결함이나 실수라고만 생각했습니다. 하지만 꽤 큰 비용을 들이고 모니터링을 강화 했음에도 비슷한 문제가 반복 되는 것을 보며, 장애는 단...
대량 쓰기 작업에서의 멱등성은 어떻게 보장할까?
글을 작성하게 된 계기 회사에서 대량의 데이터를 쓰기 작업 하면서 멱등성 있게 처리 하는 방법에 대해 고민하게 되었고, 이 과정에서 알게 된 내용을 정리하기 위해 글을 작성하게 되었습니다. 1. 왜 멱등성이 필요할까? 대량 데이터를 다루는 작업에서는 종종 네트워크 오류, 시스템 장애, 휴먼 에러 등의 이유로 일부 요청이 실패하는 상황이...
감사 이력 관리 방법 비교
글을 작성하게 된 계기 PG사는 대부분의 변경 작업에 대해 감사 이력을 남겨야 하는데요, 이 과정에서 여러 가지 방법을 비교하며 생각을 정리하기 위해 글을 작성하게 되었습니다. 1. 히스토리 관리 방법 고민했던 히스토리 관리 방법에는 크게 Trigger, Jpa Envers, 직접 INSERT, 로그 정도가 있었습니다. 각 방식의 장/...
MySQL 벌크 UPDATE에 대한 오해: Row-by-Row
글을 작성하게 된 계기 회사에서 벌크 업데이트를 사용하며 새롭게 알게된 내용 과 벌크 업데이트를 할 때 주의할 점 에 대해 정리 하기 위해 글을 작성하게 되었습니다. 1. 무엇을 잘못 알고 있었을까? MySQL에서 하나의 트랜잭션으로 여러 Row를 업데이트 하면 쿼리가 한 번만 실행 되는 줄 알았는데, 실제로는 InnoDB가 각 Row...