카테고리 자동완성 개발기

Circlee7
29CM TEAM
Published in
6 min readOct 28, 2022

안녕하세요.
29CM 발견스쿼드에서 백엔드개발을 담당하고 있는 이동권입니다.
검색페이지에서 카테고리 자동완성 기능을 개발한 경험을 공유합니다.

카테고리 자동완성 기능이란?

29CM 앱내의 검색에서 “코트” 입력 시
아래와 같이 “트랜치 코트” 와 같은 카테고리 링크를 제공하는 기능입니다.

카테고리 자동완성 및 바로가기

해당 기능은 검색 자동완성에서 카테고리 바로가기를 제공하면, 카테고리+검색 구간을 통한 상품 상세 페이지(이하 PDP)의 진입수가 증가할 것이다. 라는 가설을 검증하기 위해 만들어졌습니다.

설계

29CM 의 개발조직은 개발 시작 시 개발디자인 문서를 작성하여 팀내 리뷰어 분들과 함께 개발방향과 대안 배포전략 등을 논의하는 과정을 거칩니다.

이 과정에서 잘못된 설계와 문제점 등을 피드백 받고 논의하며 올바른 방향의 솔루션을 도출하려고 노력합니다.

개발디자인 문서

개발 디자인 문서를 작성하는 과정에서.
카테고리 자동완성 기능 개발을 위한 몇 가지 방법을 생각해 보았고.
아래와 같은 방법들을 도출했습니다.

구현 방향 논의 ADR 문서

3개의 option 을 도출하면서, 요구사항을 명확히 할 수 있었고.
이 기능에서 목표가 아닌것을 명확히 구분하여
각 option 별 장단점, 변경의 영향범위 등을 파악할 수 있었습니다.

구현 방향성 선택

도출된 option 들은 장단점이 명확했습니다.
Elasticsearch (이하 ES) 검색엔진을 통한 카테고리 자동완성은
ES 가 제공하는 형태소 분석과 유사어검색을 통해 검색 과정에서 사용자에게 보다 나은 편의성을 제공해줄 수 있는 방법이었습니다.

하지만 해당 option 을 위해서는 검색 데이터 적재 작업이 선행되어야 했는데, 이는 해당 기능이 유저에게 적합한지를 확인하기 위한 실험의 목적으로 봤을 때에는 공수가 큰 작업이었습니다.
제가 ES 에 대한 경험이 많이 없었던 것도 해당 option 을 선택하지 않았던 사유 중의 하나입니다.

빠른 실험을 통해 가설을 검증하자.29CM의 개발조직은 긴밀하게 움직이고 있습니다.
빠르게 가설을 검증하고, 성공한다면 확장해야 합니다.

도출된 3개의 option 으로 개발방향성 검토를 진행했고.
빠른 가설검증을 위해 option2 (Trie 구조체를 통한 자동완성 기능제공) 로 개발하기로 결정하였습니다.
(29CM의 의사결정 리더분들은 누구보다 빠르게 합리적인 방법을 도출합니다.)

ㅋ..빠른 의사결정

실험이 성공한다면?
확장성있는 장기 목표를 잡고 계획을 세운다.

Trie 구조체를 사용한 자동완성 기능은 단기적인 방법이기 때문에, 추후 기능의 효용성이 검증된다면 Long-term solution 을 실행해야 합니다. 이 때문에 개발 디자인 문서에는 ES 를 사용하는 자동완성 기능 전환을 위한 마일스톤도 함께 작성하였습니다.(전환전략까지 고려.)

장기 전략

Trie 를 사용한 구현은?

자료구조 Trie 에 대한 설명은 위키백과 링크로 대체합니다.

구현체는 apache common-collection4 의 PatriciaTrie 구현체를 사용했습니다.

Trie 는 prefix 매칭을 지원하기 때문에
카테고리 자동완성 기능의 요구사항의 중간매칭을 위해 문자열을 분할해 적재하는 방법으로 하였습니다.
전체 카테고리 갯수가 600개 정도이기 때문에 메모리 사용량도 검토하였습니다.

또 검색 키워드에 따른 우선순위 노출을 위해. 검색 키워드와 카테고리 명의 스코어 계산로직도 구현하였습니다.

카테고리 데이터 조회를 위한 인터페이스 등은 이미 존재하는 상태였고.
유닛테스트를 작성하며 기능구현에 걸린 시간은 2일 정도였습니다.
이런 과정을 통해 가설 검증을 위한 실험을 빠르게 시작할 수 있었습니다.

개발을 진행하며 배운점

카테고리 자동완성 기능을 위한 개발 디자인 문서를 작성하면서
여러 방법과 대안들을 모색하고, 빠른 의사결정을 할 수 있었습니다.

또 기능의 목표와 목표가 아닌 것을 명확하게 하여, 요구사항을 준수하는 빠른 실험 방법을 찾을 수 있었다는 점이 좋았습니다.

실험의 성공이후 개선 방향도 명확히 해서, 확장된 실험을 시작하기 위한 준비도 할 수 있었습니다.

ES 에 대한 경험치를 늘려야겠다는 다짐을 하면서 글을 마무리 합니다.

함께 성장할 동료를 찾습니다

29CM (무신사) 는 3년 연속 거래액 2배의 성장을 이루었습니다.

이제 더 큰 성장을 위해 기존 모놀리틱 서비스 구조를 마이크로서비스 구조로 전환하고, 앵귤러 기반 프론트엔드 코드를 리엑트로 전환하는 등의 기술적인 시도를 진행하고 있습니다.

함께 성장하고 유저 가치를 만들어낼 동료 개발자분들을 찾습니다
많은 지원 부탁합니다!

🚀 29CM 채용 페이지 : https://www.29cmcareers.co.kr/

--

--