MySQL Gap Lock 데드락. 원인 분석과 해결 방법
TL;DR 서로 다른 트랜잭션이 Unique Key 인덱스의 같은 갭에 INSERT하면 데드락이 발생한다. Gap Lock끼리는 호환되지만, Insert Intention Lock과는 충돌한다. 해결책은 분산 락으로 직렬화하거나 READ COMMITTED 격리 수준을 사용하는 것이다. 문제 상황 운영 환경에서 다음과 같은 데드락...
TL;DR 서로 다른 트랜잭션이 Unique Key 인덱스의 같은 갭에 INSERT하면 데드락이 발생한다. Gap Lock끼리는 호환되지만, Insert Intention Lock과는 충돌한다. 해결책은 분산 락으로 직렬화하거나 READ COMMITTED 격리 수준을 사용하는 것이다. 문제 상황 운영 환경에서 다음과 같은 데드락...
문자열 키(“korName”)로 객체의 프로퍼티 값을 가져와야 한다면, 어떻게 하시겠어요? 리플렉션? ObjectMapper? 이 글에서는 Spring MVC가 @ModelAttribute에서 사용하는 BeanWrapper를 인사카드 시스템에 활용한 경험을 공유합니다. 왜 런타임에 필드를 결정해야 했나? API 응답 구조의 특징 클라이언트에 내...
문제 상황 로컬 환경에서 할일 알림이 DB에 저장되지 않는 문제가 발생했습니다. 신기하게도 DEV, PROD 환경에서는 정상적으로 동작하고 있었고, 최신 DB 스냅샷과 dev 브랜치로 업데이트해도 문제가 지속되었습니다. 디버깅 과정 먼저 디버거를 통해 데이터 흐름을 확인했습니다. 디버깅 결과 데이터가 정상적으로 저장되는 것을 확인할 수 있...
들어가며 서비스를 운영하면서 크고 작은 장애들을 경험했다. 처음엔 당황스러웠지만, 이제는 어느 정도 패턴이 보이기 시작했다. 특히 “코드를 어느 계층에서 수정해야 할까?”라는 고민이 가장 어려웠는데, 나름의 판단 기준을 정리해보고자 한다. 주요 장애 유형 지금까지 경험한 장애 유형들이다. 비즈니스 로직 오류 (70%) - VOC, QA...
6개월간의 취준 끝. 2024년 8월 초부터 12월까지 flab 멘토링을 들은 후, 4월까지 취준을 마치고 원하는 조건들을 갖춘 서비스회사에 인턴을 시작했다. flab이 개발 방향을 잡는데에 가장 큰 역할을 했기에, 오랜만에 회고를 해보려한다. 멘토링을 시작하게 된 계기 나는 예전부터 멘토링 방식의 학습을 선호해왔다. 학교 멘토링 프로그램이나 개...
리팩토링을 시작하게 된 배경 오래된 제 코드를 살펴보면서 리팩토링의 필요성을 느꼈습니다. 리팩토링을 하려는 이유는 숨겨진 버그나 취약점을 발견하고 수정하기 위함과 가독성을 높여 확장성을 향상시키기 위함 입니다. 리팩토링을 시작하려 했지만, 오래된 코드의 내용이 기억나지 않아서 먼저 코드를 보면서 어떤 요구사항이고 도메인이었는지 떠올려야 했습니다. ...
Step1. ngram parser로 문서 토큰화 문서 텍스트를 n-gram 단위로 분리 N-gram Parser가 각 토큰을 생성 각 토큰의 문서 내 위치 정보 기록 Step2. 메모리 캐시 단계 (FTS 캐시) 생성된 토큰을 R-B 트리에 저장 각 토큰마다 문서 ID와 위치 정보를 역인덱스 형태로 관리 같은 ...
ngram parser 소스코드 링크 while (next < end) { char_len = my_mbcharlen_ptr(cs, next, end); /* Skip the rest of the doc if invalid char. */ if (next + char_len > end || char_len == 0) { break;...
MySQL ngram parser 기본 개념 및 사용법 MySQL의 Full-Text Ngram Parser는 텍스트 데이터를 효율적으로 검색하기 위해 사용되는 내장 파서로, 특히 한국어, 일본어, 중국어(CJK)와 같은 언어에서 강력한 성능을 발휘합니다. 이는 단어를 고정된 크기의 문자 시퀀스(ngram)로 분해하여 검색을 수행합니다. 주요 특징...
기능 요구사항 관리자는 이메일 주소를 입력하여 새로운 멤버를 초대할 수 있습니다. 초대 이메일은 지정된 템플릿 형식으로 발송되어야 합니다. 초대 링크는 10분간 유효합니다. 초대 링크는 1회만 사용가능합니다. 만료되거나 사용된 초대 링크는 더 이상 사용할 수 없습니다. 비기능 요구사항 초대 링크는 추측할 수 없는 안전한...