내가 알고리즘이랑 라이브러리 디자인 능력이 부족해서 잘하는 사람들에게 피드백을 받고자 개발커뮤니티 여기저기 올리는 중임

---


간단한 시연 코드를 적은 runkit

---

수행하는 기능들은 다음과 같음

- 트라이 구조에 문자열을 저장
- 저장된 문자열을 트라이로부터 삭제
- 아호코라식 알고리즘을 사용해서 문자열 안에 존재하는 모든 트라이 속 문자열들을 탐색해서 반환
- 직렬화/역직렬화

---

만든 이유는 es 나 meilisearch 같은 검색엔진을 쓰기엔 부담스러운 상황에서 간단한 검색을 하기위해 만들엇음

-

나같은 경우 내가 운영중인 핫딜 키워드 알림 시스템에서 이걸 사용해서 핫딜 제목 안에 사용자들이 등록한 키워드들 중 어떤 키워드들이 잇는지를 빠르게 검색하려고 함

---

라이브러리로 만든 이유는 이 기능들을 내가 만든 여러개의 컨테이너에서 공통코드로 사용해서 관리용이성을 위해 라이브러리로 배포하게 되엇음

솔직하게 말하자면 저것도 잇지만 나보다 더 잘하는 사람들의 피드백과 컨트리뷰션을 받고싶은 마음도 큼

평소 자주 눈팅하는 사이트이기도 하고, 깃갤에서 누군가가 자작라이브러리를 올리고 또다른 누군가가 거기에 컨트리뷰션을 해주는 걸 보고 여기도 올려보게 됨

---

현재 보완이 필요하다고 생각하는 부분들은 이러함

먼저, 키워드를 새로 삽입할 때마다 아호코라식 연산을 수행하기 전에 필요한 failure link 를 만들어주는 과정을 계속 수행해야 함

hot reload 처럼 새로운 키워드가 들어와서 새로운 트라이들이 만들어질때, 딱 그거에 필요한 failure link 만을 만들고싶은데 그 방법이 없을까 고민하다가 막혓음

-

그 다음으로는, 현재까지 직렬화/역직렬화 시에 failure link 들을 저장하는데 실패햇단 점임

트라이 자체는 위에서 아래로 내려가는 단방향성이지만, 아호코라식을 위해 전처리로 만들어주는 failure link 의 경우는 순환적이잖음? root 애서 terminal 로 node 가 이어지다가 탐색에 실패하면 다시 root node 를 찍는 등의 상황이 발생하니깐.

이걸 어찌 해야하나 고민하다가 일단 직렬화/역직렬화 하는 과정에서 얘내는 일단 빼버리고 만듦

---

부족하기에 많은 조언을 부탁드립니다...