January 05, 2025
Step1. ngram parser로 문서 토큰화 문서 텍스트를 n-gram 단위로 분리 N-gram Parser가 각 토큰을 생성 각 토큰의 문서 내 위치 정보 기록 Step2. 메모리 캐시 단계 (FTS 캐시) 생성된 토큰을 R-B 트리에 저장 각 토큰마다 문서 ID와 위치 정보를 역인덱스 형태로 관리 같은 토큰이 이미 있다면 해당 토큰의 문서/위…
January 04, 2025
MySQL ngram parser 기본 개념 및 사용법 MySQL의 Full-Text Ngram Parser는 텍스트 데이터를 효율적으로 검색하기 위해 사용되는 내장 파서로, 특히 한국어, 일본어, 중국어(CJK)와 같은 언어에서 강력한 성능을 발휘합니다. 이는 단어를 고정된 크기의 문자 시퀀스(ngram)로 분해하여 검색을 수행합니다. 주요 특징 N-g…
January 04, 2025
ngram parser 소스코드 링크 전달한 문장에 대해 하나씩 읽을때, 유효하지 않은 단어들은 넘어간다. 읽은 문자가 설정한 토큰 개수와 같다면, ngram을 추가한다. 는 파서가 찾아낸 각각의 토큰(단어)을 MySQL의 FULLTEXT 인덱스 시스템에 전달하는 역할을 한다. 토큰 처리 인덱스 저장 각 토큰은 InnoDB의 특별한 인덱스 테이블에…
December 20, 2024
SMTP란 SMTP(Simple Mail Transfer Protocol)는 인터넷에서 이메일을 전송하는 데 사용되는 표준 프로토콜입니다. 이 프로토콜은 서로 다른 이메일 시스템 간의 메시지 전달 및 중계를 가능하게 해 주며, TCP/IP를 기반으로 동작합니다. SMTP 구성요소 MUA (Mail User Agent): 이메일 클라이언트로, 사용자가 …
December 18, 2024
제 의견이 아닌 TDD에 대한 자료들을 정리했습니다. Bob Martin(클린 코드 저자)과 Jim Coplien이 테스트 주도 개발(TDD)에 대해 심층적으로 토론 출처 https://www.youtube.com/watch?v=eRxc4PD6RN0&ab_channel=%EB%8D%B0%EB%B8%8C%EC%9B%90%EC%98%81DVWY TDD의 가치…
November 24, 2024
Redis 버전 7.0.15 기준으로 설명합니다. Redis Master Slave Architecture 기본적인 Redis Replication 구조는 Master-Replica 구조로 이루어져 있습니다. Master는 데이터를 저장하고, Replica는 Master의 데이터를 복제합니다. 레디스는 비동기(asynchronous) 복제를 합니다. …
November 23, 2024
웹 소켓 웹 소켓은 웹 서버와 웹 브라우저가 서로 실시간 메시지를 교환하는 데에 사용됩니다. 핸드셰이크를 한 후, 지속적인 연결이 유지됩니다. 웹 소켓은 처음엔 HTTP 프로토콜을 시작으로 하되, 연결이 성립된 후에는 WS(WebSocket) 프로토콜로 전환됩니다. 아래는 웹 소켓 연결을 위한 과정입니다. TCP 연결 수립 TCP 3 way handsha…
October 30, 2024
데이터베이스가 2대 이상 있는 상황이나 NoSQL과 서로 다른 DBMS을 사용하는 상황일때, 트랜잭션 하나를 앞서 비관적락이나 낙관적락으로 해결할 수 없는 상황이 많습니다. 이런 분산데이터베이스 혹은 분산환경에서 CAP 이론이 적용됩니다. CAP 이론이란 Consistency(일관성): 모든 노드가 동일한 시점에 동일한 데이터를 볼 수 있습니다. 즉 데…
October 29, 2024
데이터베이스에서 트랜잭션을 하나씩 순차적으로 실행하면 동시성 문제가 발생하지 않습니다. 그러나 이 방법은 성능 저하를 초래할 수 있습니다. 현실적으로는 여러 서버에서 네트워크를 통해 다수의 트랜잭션이 동시에 데이터베이스에 접근합니다. 따라서 동시성 문제를 해결하는 다른 방법이 필요합니다. 동시성 문제를 해결하면서 성능을 유지하는 방법 동시에 여러 트랜잭션…
October 28, 2024
자바에서의 동기화 기법 - 메모리 영역 자바에서 하나의 프로세스는 메모리를 점유하고 있으며, 그 프로세스 내의 여러 스레드가 자원을 공유하게 됩니다. 여기서 공유되는 자원은 주로 힙 영역에 존재하는 객체와 변수 값입니다. 이 코드의 기대 결과는 이지만, 실제로는 20000보다 작은 값이 나올 수 있습니다. 이유는 두 스레드가 방식으로 겹쳐 실행되기 때…