당근에서는 중고거래, 동네생활, 알바 등 동네를 연결하는 다양한 서비스를 만나볼 수 있죠. 그중에서 수많은 게시글을 일일이 살펴볼 필요 없이 내게 필요한 정보만 쉽게 찾을 수 있는 이유는 바로 검색 기능 덕분인데요. 사용자가 원하는 정보를 오류 없이 빠르게 검색할 수 있도록 눈에 띄지 않는 곳에서 묵묵히 힘쓰는 팀이 있어요. 검색의 안정성과 편리함을 더하기 위해 노력하는 당근 검색플랫폼팀과 이야기 나눠봤습니다.
검색플랫폼팀 Johnny, Ellie, Teddy, Hy
Johnny: 안녕하세요. 검색플랫폼팀 리더를 맡고 있는 Johnny입니다. 당근에는 2020년에 합류했어요. 입사하기 전 외부 스터디 모임에서 당근 사람들을 처음 만나게 됐는데, 회사 칭찬을 하도 많이 하길래 얼마나 좋아 그러나 싶어 궁금해 합류하게 됐어요. (웃음) 당시 육아 중이라 당근을 많이 쓰는 사용자이기도 했고요. 그렇게 벌써 4년째 다니고 있네요.
Teddy: 검색플랫폼팀 내 검색인프라 파트 Backend Engineer Teddy예요. 이전 회사에서도 검색 일을 하면서 기술적으로 많은 걸 배웠는데, 이걸 좀 더 주도적으로 활용해보고 싶은 생각이 들었어요. 당근이 내가 갖고 있는 걸 펼치기 좋은 회사라는 생각이 들어 합류하게 됐어요.
Ellie: 저도 Teddy와 함께 검색인프라 파트에서 일하고 있어요. 이제 당근과 함께한 지 1년 가까이 돼 가는데, 사용자와 맞닿아 있는 경험을 할 수 있어 즐겁게 다니고 있어요.
Hy: 검색플랫폼팀에서 Backend Engineer로 일하고 있는 Hy예요. 저는 규모가 작은 곳부 터 큰 곳까지 다양한 회사를 경험해 봤는데요. 주어진 일만 하는 것보다는 주도적으로 일을 찾아서 할 수 있는 곳이 제게 맞더라고요. 당근이 그런 문화를 가지고 있어서 오게 됐어요.
Teddy: 저희는 당근의 검색 트래픽을 감당하고 더 좋은 검색결과를 빠르게 제공하는 플랫폼을 만드는 팀이에요. 당근에서는 하루에도 천만 건 가까이 되는 검색이 일어나거든요. 1초에 수백 건의 검색이 이뤄지는 셈인데, 절대 적은 양은 아니죠. 이런 검색 기능의 안정성을 유지하는 일을 하고 있어요.
원하는 정보를 간편하게 찾을 수 있도록 검색 서비스의 안정성을 유지하는 검색플랫폼팀
Johnny: 사용자들은 검색 기능을 통해 여러 게시글을 일일이 확인할 필요 없이 찾고 싶어 하는 정보만 얻을 수 있어요. 그런데 A라는 키워드를 검색했는데 B를 보여주거나 잘못된 정보를 알려주면 어떻게 될까요? 서비스에 대한 부정적 경험이 쌓이겠죠. 저희 일은 검색 중에서 이런 문제가 발생하지 않도록 플랫폼을 안정적으로 유지하는 거예요.
또 사용자가 검색을 하는 데 들이는 시간이나 리소스를 최소화하는 일도 해요. 원하는 결과를 더 쉽고 빠르게 찾을 수 있도록 돕는 거죠. 예를 들어 검색창에 단어를 입력할 때 자동완성으로 검색어를 완성해 주거나 검색 결과 내에서 범위를 설정하면서 결과를 좁힐 수 있도록 도와줘요.
검색 장애나 어뷰저로부터 서비스를 보호하는 장치들을 개발하거나 운영 측면에서 어드민 페이지를 고도화하는 작업도 해요. 눈에 잘 띄지는 않지만 서비스가 잘 운영되도록 뒤에서 묵묵히 힘쓰는 조직이죠.
Teddy: 제가 속해있는 검색플랫폼팀의 검색인프라 파트에서는 저희 팀이나 검색실 사람들이 인프라 측면을 고려하지 않고 서비스에만 집중할 수 있게끔 지원하고 있어요. 검색 서비스, 검색 품질, 검색 플랫폼을 운영하는 데에 필요한 모든 인프라 구성 요소들을 지원하고 관리하죠.
Johnny: 맞아요. 서비스 팀들 모두 본인들 서비스가 잘 검색돼 사용자들에게 효과적으로 노출되기를 원하니까요. 그래서 이전까지는 관련 요청이 들어오면 저희가 일일이 다 구현해 줬었는데요. 그러다 보니 서비스 팀은 저희 팀이 기능 구현을 마칠 때까지 계속 기다려야 했고, 저희 팀도 요청이 들어오면 기존에 하던 일과 병행하는 게 힘들었어요.
각 서비스에 맞게 검색 기능을 직접 만들 수 있는 셀프 서치 플랫폼
그래서 최근에 각 팀이 직접 검색 기능을 만들 수 있는 ‘셀프 서치'라는 플랫폼을 만들었어요. 사실 각 서비스의 데이터 구조나 검색이 잘 돼야 하는 데이터들은 그 팀이 가장 잘 알거든요. 그래서 저희는 플랫폼으로 전문적이고 기술적인 부분에서 도움을 주되, 서비스팀에서 직접 간단한 설정만으로 본인 도메인에 맞는 검색 기능을 세팅할 수 있도록 했죠.
Hy: 당근에는 중고거래, 알바, 부동산, 중고차 등 다양한 서비스가 존재하고 서비스별로 특징도 제각각이라, 저희 팀이 모든 서비스의 도메인을 이해하기는 쉽지 않아요. 그래서 도메인과 관련된 부분은 서비스 팀에서 직접 기여하고 저희는 기술 쪽으로 지원하는 방식으로 영역을 분담한 거죠. 서비스팀 반응도 좋았어요. 특히 로컬 비즈니스실에서는 검색 기능에 직접 서비스 도메인의 특징을 잘 반영할 수 있어서 좋았다고 말씀해 주시더라고요.
Ellie: ‘리전 샤딩(Region Sharding)’이라고 부르는 프로젝트가 기억에 남아요. 똑같은 검색 요청에도 응답 속도를 최소화할 수 있는 방법을 고민하던 중에 Johnny가 좋은 아이디어를 제안해 준 건데요. ‘리전 샤딩(Region Sharding)’은 지역 기반으로 데이터를 저장하고 검색하도록 하는 작업이에요. 저희가 사용하는 검색 엔진에서 지역별 데이터 구조를 어떤 식으로 구성할지 수많은 케이스를 나눠서 다양한 실험을 진행했어요. 실험을 기반으로 어떤 구조일 때 응답 속도가 빨라지는지 확인하며, 검색 성능을 효과적으로 개선할 수 있었죠.
Johnny: 당근은 지역 기반으로 운영되는 하이퍼로컬 서비스이고, 그런 특성을 검색에서도 잘 활용하려고 해요. 그래서 지역 기반 데이터를 대규모로 모아 검색에 활용하는 인프라 구조를 만들었고 꾸준히 개선하고 있어요. 똑같은 문서 수, 검색 요청량이더라도 응답 시간이나 인프라 비용을 최대한 적게 사용하도록 말이죠.
Hy: 맞아요. 저희 팀은 과거의 경험이나 감에 의해 결정을 내리지 않고, 실험을 통해 얻은 확실한 근거를 기반으로 판단해요. 최근에도 실험을 통해 검색어 자동 완성 기능을 개선했고요. 이전에는 자동 완성 결과를 모두 똑같이 제공하고 있었는데, 지금은 유저 특성에 따라 다른 결과가 나오도록 하고 있어요. 일종의 개인화를 시도해 본 거죠. 물론 저희가 전문적인 모델러가 아니라서 정교하게 구현해내진 못했지만, 그래도 검색 관련 지표가 올라간 걸 확인할 수 있었어요.
Teddy: 저희 팀에서는 직군에 구애받지 않고 필요한 것들을 자유롭게 제안할 수 있어요. 팀에 정말 필요한 일이라면 무엇이든 시도하고 실험해 볼 수 있죠. 그 결과가 좋으면 적용까지 이어지고요.
Ellie: 장애를 낸 당사자는 그것만으로도 이미 마음이 안 좋을 텐데, 주변 동료들까지 불안해하면 마음이 더 불편해지잖아요. 그런데 저희 팀은 장애가 발생하면 어벤저스처럼 다들 모여서 이슈를 해결하기 위해 같이 고민해 줘요. 저도 초반에 간단한 코드를 내보내고 장애처럼 느껴져서 롤백하는 경우가 몇 번 있었는데요. Hy에게 의심되는 지점을 말하면, Hy가 함께 고민해 주고 오히려 다른 원인을 찾아주기도 했어요. 덕분에 빠르게 대처할 수 있었죠.
이슈를 해결한 이후에는 팀에서 꼭 회고를 진행해요. 근본 원인을 파악했다면 그에 대한 해결책을 마련하고, 원인 파악이 어렵더라도 마지막 단서까지 파고들어요. 덕분에 이제는 장애를 마주해도 크게 불안하지 않아요. 팀원들과 함께 해결하리라는 믿음이 있기도 하고, 그런 장애들을 겪으면서 플랫폼적으로 성장하는 점들도 많은 것 같아요.
Johnny: 저희 팀은 장애가 나더라도 개인을 탓하기보다는 서로에게 도움을 주려고 해요. 오히려 ‘내가 좀 더 시스템을 잘 만들었더라면 저분이 저런 장애를 경험하지 않을 텐데'하면서 미안해하는 분들도 계시고요. 장애가 발생하면 그 사람이 심리적 안정감을 가질 수 있도록 배려하되, 그런 실수를 최소화하기 위해 모두 배우려는 태도를 가져요. 저희 팀은 스터디를 끊임없이 하거든요.
Ellie: ‘검색은 이렇게 일한다'라는 스터디인데요. 검색 개발 경험이 없는 분들이 입사했을 때, 검색에 대한 이해도를 빠르게 높이고 팀에 잘 적응할 수 있도록 도우려는 스터디예요. 팀에서 다양한 분들이 하나씩 주제를 맡아서 발표를 해요. 예를 들어 Teddy는 검색 엔진 내부 구조를 발표한 적이 있고, Hy는 개발할 때 마주하는 빅데이터 처리 문제 해결 노하우를 공유한 적이 있어요. 일반적인 책 스터디보다 검색을 이해하는 데 훨씬 도움이 됐죠.
Hy: 저도 당근에 합류하기 전에는 검색 개발 경험이 없었는데요. 여기 와서 팀원들에게 모르는 것들을 물어보면 정말 꼼꼼하게 알려주셨어요. Johnny랑 Teddy는 실제로 외부 강의를 나가기도 할 정도로 수준급 전문가이시고요. 뛰어난 동료들 덕분에 많은 것들을 배우고 큰 어려움 없이 적응할 수 있었죠.
Johnny: 검색 도메인을 쉽게 학습할 수 있는 기회를 팀 내부에서 지속적으로 제공하고 있어요. 검색 도메인을 잘 모르더라도 두려움 없이 팀에 기여할 수 있도록 팀 전체가 함께 도와야 한다고 생각해요. 앞으로도 도움을 줄 수 있는 방식이 있다면 다양하게 시 도해 볼 예정이에요.
Teddy: 우선 의사결정 과정이 합리적이에요. 탑 다운 방식으로 “이거 해야 돼!”하고 내려오는 일이 거의 없어요. 팀이 다 함께 참여해서 필요한 일, 중요한 일을 충분히 합의하죠. 또 실제로 일을 진행할 때는 거의 매번 실험을 거쳐요. 실험 기반으로 결과가 가장 우수한 걸 사용자에게 최종적으로 배포하기 때문에 논쟁의 여지가 없죠.
사용자 경험을 최우선 가치로 생각하는 것도 장점이에요. 물론 다른 기업과 마찬가지로 비용 절감도 중요시하지만, 비용이 절감되더라도 사용자 경험에 부정적인 영향을 주면 바람직하지 않다고 봐요. 그래서 저희 팀에서는 비용 절감과 사용자 경험 개선, 두 마리 토끼를 모두 잡을 수 있는 다양한 방법을 시도할 수 있어요. 그런 방법을 주도적으로 찾아서 도전할 수 있도록 권한에 대한 지지를 많이 해주고, 실패하더라도 다음에 개선할 점을 함께 고민하죠.
Ellie: 이건 검색플랫폼팀의 장점이자 당근의 장점이기도 한데요. 각 조직마다 능력자가 많아서 그분들의 노하우를 직접 공유받을 수 있다는 거예요. 이전에 제가 있던 회사는 큰 기업이라 그런지 몰라도 다른 팀 지식을 공유 받을 수 있는 기회가 컨퍼런스 말고는 잘 없었어요. 그런데 당근에서는 도움을 청하면 직접 자리에 오셔서 가르쳐주시기도 하고, 따로 회의를 잡아서 상세히 알려주시기도 해요. 엔지니어로서 개개인이 노하우를 많이 얻어갈 수 있죠.
Teddy: 우선 당근의 핵심 기능인 검색을 만들기 위해 다양한 기술적 도전을 해볼 수 있어요. 사용자 입장에서 고민해 봤을 때 필요한 일이라면 뭐든 도전해 볼 수 있죠. 그 과정에서 뛰어난 동료들과 함께 교류하며 끊임없이 성장할 수 있고요. 또 저희 팀원들이 능력뿐만 아니라 인성적으로도 되게 훌륭한 분들이라 서로 배려하고 존중하면서 일할 수 있어요.
Eliie: 저도 동의해요. 개발을 하다 보면 스스로 딥다이브 해보고 싶은 부분을 발견할 때가 있잖아요. 그럴 때 팀에서 응원과 격려를 아끼지 않아요. 각자가 가진 지식을 아낌없이 나눠주고, 실제로 그 일을 해냈을 때 자기 일처럼 기뻐해줘요. 덕분에 지치지 않고 팀에서 계속 성과를 낼 수 있는 것 같아요.
Teddy: 저희 팀은 파고드는 능력이 정말 뛰어나요. 문제를 해결하는 방법은 되게 다양하잖아요. 저희는 여러 방법 중에서 항상 최적의 해결책을 찾기 위해 딥다이브하죠. 또 오랜 시간 투자해서 진행된 과정과 결과물을 이해하기 쉽도록 간결하게 공유해 줘서 팀 내부적으로 지식 공유도 잘 이루어져요.
예를 들어 지금 Hy가 색인 파이프라인을 고도화하고 있는데요. 색인 파이프라인은 요구사항이 여러 팀에서 들어오기 때문에 병목 현상이 자주 발생해요. 이전에도 병목을 없애보자는 취지에서 여러 프로젝트를 시도했지만 실패했던 케이스가 많았죠. 그런데 Hy가 스스로 정말 많은 고민을 거치면서 설계해 준 끝에 병목 현 상이 많이 해소됐어요. 덕분에 현재 당근의 다양한 서비스에서 검색을 빠르게 활용하고 있죠. Hy가 중간중간 진행 과정을 팀에 꾸준히 공유해 줘서 팀원들도 좋은 아이디어가 있을 때마다 함께 기여하기도 했어요.
Johnny: 검색 쪽 개발 경험은 없어도 괜찮지만, 아무래도 검색을 좋아하는 분이면 좋을 것 같아요. 검색을 많이 쓰면서 ‘여기는 이런 점이 불편하네', ‘이런 걸 개선하면 좋겠다' 같은 생각을 자주 한다면, 저희 팀에 빠르게 적응하고 재밌게 일할 수 있을 거예요. 검색을 어떻게 구현하는지는 저희가 잘 알려드릴 수 있으니 검색에 대한 관심과 의지가 중요할 것 같아요.
Ellie: 주어진 일을 수동적으로 하기보다, 그 일에 본인 생각을 녹일 수 있는 분이 합류하면 좋겠어요. ‘지금 계획대로 개발하면 나중에 사용자가 많아진 이후에는 어떻게 될까’, ‘오픈소스를 쓰니 잘 작동되는데 왜 그럴까' 이런 부분들을 한 번 더 고민하는 거죠. 원리를 파고드는 사람이 저희 팀에 더 잘 적응할 수 있지 않을까 해요.
Johnny: 1차적인 목표는 앞으로 사용자가 더 많아지고 검색 기능을 원하는 서비스 팀이 늘어나더라도, 현재 인원을 최대한 유지하면서 대응 가능한 구조를 만드는 거예요. 이상적인 플랫폼이라면 스케일업에 효율적으로 대응해야 될 테니까요. 동시에 사용자들이 검색 기능을 사용할 때 만족할 수 있도록 안정성을 유지하는 건 당연하고요. 앞으로도 다른 팀들과 계속 잘 협업하면서 그런 목표를 성취해나가고 싶어요.
장기적으로는 사용자의 검색 의도를 이해하고 그 맥락에 맞는 검색 결과를 제공하는 게 기능적인 목표예요. 예를 들어 사용자가 ‘노란색 원피스'를 검색했을 때, 게시글에 그 키워드가 없더라도 이미지 정보를 바탕으로 노란색 원피스 사진이 포함된 게시글을 보여주는 거죠. 이런 고품질의 검색 결과를 지속적으로 제공할 수 있는 플랫폼을 만들어 나갈 예정이에요.
당신 근처의 지역 생활 커뮤니티