글을 작성하게 된 계기 회사에서 회원 등급을 조정하는 배치로직을 개발하던 중, INSERT...SELECT 구문에서 테이블 락이 발생하는지 궁금해졌고, 이 과정에서 알게 된 내용을 정리하기 위해 글을 작성하게 되었습니다. 1. 진행 배경 테스트를 진행한 이유는 데이터를 SELECT한 뒤, 같은 트랜잭션 내에서 INSERT를 수행할 때 ...
INSERT...SELECT 구문에서 테이블 락 발생 여부
ElasticSearch와 Opensearch의 차이점
글을 작성하게 된 계기 ElasticSearch 스터디를 하다가 명현님이 Opensearch와 ElasticSearch의 차이점을 물어보셨는데 명확하게 대답을 못했습니다. 그래서 두 제품의 차이점을 확실히 알기 위해 글을 작성하게 되었습니다. 이직한지 얼마 안되긴 했지만…… 비겁한 변경 같습니다. 🤔 1. 탄생 배경 Elast...
ElasticSearch의 내부 구조와 동작 원리
글을 작성하게 된 계기 최근 OpenSearch를 사용하게 됐는데, 이전에 학습했던 Elasticsearch의 Near real-time 검색 원리와 내부 구조와 동작 원리를 복습 및 정리하기 위해 글을 작성하게 되었습니다. 1. 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 문서화 방...
올바른 장애 대응 문화에 대한 생각 정리
글을 작성하게 된 계기 전사 차원의 장애를 보고 겪으며, 생각을 정리하기 위해 글을 작성하게 되었습니다. 1. 장애에 대한 생각 변화 입사 후 몇 차례 전사적인 장애를 겪으면서, 처음에는 단순한 기술적 결함이나 실수라고만 생각했습니다. 하지만 꽤 큰 비용을 들이고 모니터링을 강화 했음에도 비슷한 문제가 반복 되는 것을 보며, 장애는 단...
대량 쓰기 작업에서의 멱등성은 어떻게 보장할까?
글을 작성하게 된 계기 회사에서 대량의 데이터를 쓰기 작업 하면서 멱등성 있게 처리 하는 방법에 대해 고민하게 되었고, 이 과정에서 알게 된 내용을 정리하기 위해 글을 작성하게 되었습니다. 1. 왜 멱등성이 필요할까? 대량 데이터를 다루는 작업에서는 종종 네트워크 오류, 시스템 장애, 휴먼 에러 등의 이유로 일부 요청이 실패하는 상황이...
감사 이력 관리 방법 비교
글을 작성하게 된 계기 PG사는 대부분의 변경 작업에 대해 감사 이력을 남겨야 하는데요, 이 과정에서 여러 가지 방법을 비교하며 생각을 정리하기 위해 글을 작성하게 되었습니다. 1. 히스토리 관리 방법 고민했던 히스토리 관리 방법에는 크게 Trigger, Jpa Envers, 직접 INSERT, 로그 정도가 있었습니다. 각 방식의 장/...