🚀

Jun-Cheol CTO Interview

0.5초만에 옷을 분석하는 AI, 어떻게 만들어졌을까?

옷 하나의 속성들을 입력하는데 얼마나 걸릴까요? 사람이 아무리 빠르게 해도 30초~1분은 걸릴텐데요. 옴니어스는 이 과정을 0.5초만에 95%의 정확도로 해주는 AI입니다. 이를 기반으로 유사한 상품을 추천해주는 서비스도 제공하며 지그재그, 에이블리, 현대백화점, LF 등의 고객사와 함께하고 있습니다.

최근 기술신용평가에서 우수 등급을 받고 코스닥 상장을 진행 중인 옴니어스는 기술력이 뛰어나다는 점을 여러 곳에서 인정 받고 있습니다. 핵심 기술인 이 AI는 어떻게 만들어졌을까요? 박준철 CTO는 "패션 이미지를 검색하고 분석하는 분야에 있어서는 우리가 최고다." 라고 말할 정도로 기술력에 대한 자신감을 보여주셨습니다.

해외의 한 조사에서 MZ세대 62%가 이미지 검색을 원한다고 답했고, 개인화 추천, 추천 검색어 등은 이제 커머스에서 필수 요소가 되었습니다. 고객들의 쇼핑 경험을 만족시키고 매출을 높이는 기술을 개발하는 옴니어스의 개발 조직을 이끌고 있는 박준철 CTO는 팀원들에게 "개발 분야의 진짜 능력자"라고 불린다고 합니다. 박 CTO님은 인터뷰를 하면서도 수줍음이 많았지만 개발 관련 이야기를 할 때는 정말 자신감 있고 상세하게 말하시는 모습이 너무 멋지다고 느껴졌어요. "진짜 능력자" 박준철 CTO님의 이야기 같이 들어볼까요?

  • CTO님이 자신감을 가질 수 있는 이유, 옴니어스 기술이 뛰어난 이유는?
  • 옴니어스 태거 서비스는 최대 95% 정확도로 이미 여러 고객사들이 상업적으로 기술을 사용하고 있는데요. 서비스를 개발하면서 6년간 구축해 온 데이터셋 품질, AI팀과 패션 전문가팀의 역량 그리고 개발팀의 노하우로 이런 기술을 만들 수 있었습니다.

    저희는 공동 창업자 모두가 KAIST에서 석사/박사 과정을 진행했기 때문에 높은 품질의 모델을 위해서는 알고리즘 외에도 데이터셋의 품질도 중요하다는 점을 인지하고 있었습니다. 이를 위해 창업 초기부터 지금까지 패션 에디터, MD 출신의 전문가들로 구성된 패션 데이터 팀과 AI 연구팀이 데이터 기획부터 수집, 모델 검증까지의 과정을 함께 진행 해왔구요. 이렇게 구축한 패션 이미지 데이터셋은 의류부터 잡화류까지 대부분의 패션 아이템을 포괄하고 있고, 1,000여개 이상의 속성들로 구성되어 있습니다.

    AI 연구팀의 경우 2016년 이미지 인식 세계 대회(IMAGENET 챌린지 2016)에서 국내 1위를 했던 경험이 있고, 머신러닝 분야의 주요 학회인 ICML, AISTATS에 논문을 출판하는 등 최고 수준의 역량을 가지고 있습니다. 이런 역량으로 직접 구성한 고품질 패션 데이터셋으로 서비스를 위한 AI 모델을 자체 개발할 수 있었어요. 그리고 모델 자체적으로 병렬 분산 처리가 가능한 구조로 설계되어 있어서 필요한 경우에는 클라우드 GPU 자원을 사용해 하루 1,000만건 이상의 이미지 처리도 가능합니다.

  • 채용 홍보 영상에서 개발자분들이 인프라, 모델 성능이 우수하다고 말해주셨는데 자세하게 말씀해주실 수 있을까요?
  • 현재 Tagger API와 LENS API는 고객사 시스템에 연동되어 24시간 API 호출이 있는 상용 서비스입니다. 기능 및 모델 개선을 지속적으로 진행하면서 1달에 1회 이상은 배포를 하고 있고, 월 2~3회 이상 기능 개선 또는 버그 해결을 위한 Hotfix 배포도 이루어지고 있습니다. 배포 작업은 기능 개발을 담당하는 개발자 분들이 직접 진행하고 있는데, Kubernetes 기반의 인프라가 Rancher 라는 GUI 관리 도구와 연동이 되어 있어서 입사 1년차인 신입 개발자 분들도 큰 부담 없이 서비스 중단 없이 10~30분 이내로 손쉽게 배포 작업이 가능해요. AWS 클라우드 인프라 구성도 Terraform 이라는 도구를 통해 코드로 정리되어 있어서 담당 개발자 분들이 인프라 변경 이력을 파악하고 필요한 클라우드 자원을 직접 구성할 수 있습니다. 아마 이러한 부분에 있어서 개발자분들이 인프라가 잘 갖추어져 있다고 느끼셨을 것 같아요.

    AI모델이 실제 제품으로 서비스되고 있다 보니 내부적으로 대량으로 추론(Inference) 작업을 수행하거나 모델의 분석 결과가 얼마나 정확한지 QA를 하는 과정에 개발자 분들이 많이 참여하고 있는데요. 이 과정에서 자연스럽게 모델의 성능을 바로 옆에서 체감 하시면서 모델 성능이 정말 우수하다고 평가해주시는 것 같습니다.

  • 지금 개발팀이 집중하고 있는 건 무엇인가요?
  • 현재는 더 많은 고객들이 우리의 AI 서비스를 편리하게 이용할 수 있도록 여러 방면에서 준비하고 있는데요. 첫 번째로는 서비스를 운영하면서 고객분들께 받은 피드백을 반영하여 서비스를 고도화 하고 안정성을 높이는 작업에 집중하고 있습니다. 특히 대용량 데이터 분석을 안정적으로 빠르고 정확하게 진행할 수 있도록 전반적인 데이터 파이프라인을 강화하고 있는데, 이를 위해 이번에 데이터 엔지니어 직군도 채용을 진행하고 있습니다.

    두 번째로 해외의 고객들이 서비스 이용에 불편함이 없도록 현재 국내 기준으로만 운영하였던 서비스 들을 해외 Region에도 배포할 수 있도록 준비하고 있는데요. 이를 위해서 전반적인 네트워크, 인프라, 백엔드 아키텍쳐 전반의 Multi Region을 고려하여 개선하는 작업을 진행하고 있습니다.

  • 옴니어스, 개발자들이 일하기 좋은 회사인가요?
  • 개발자의 입장에서 자체 솔루션을 개발한다는 점은 큰 메리트라고 생각해요. 내가 개발한 기능이 실제로 배포가 되어 사용되고, 그 동안에 시도해왔던 것들이 프로젝트에 누적되어 팀의 자산으로 쌓이기 때문에 가설→기획/프로토타입 구현 → 상용화 → 운영 이슈 및 제품 개선 피드백 등의 사이클을 직접 경험해볼 수 있죠.

    그리고 AI 기술이 제품이 된다는 점이 큰 매력이라고 생각해요. 특히 딥러닝 기술의 경우에는 실험실 밖을 나와 사람들에게 익숙해진 기간이 얼마 안되었습니다. AI 모델의 정확도를 위한 모델의 학습/고도화 과정에서 빅데이터를 다루고, GPU와 같은 병렬 연산 하드웨어를 효율적으로 활용하기 위해서는 관련된 최신의 라이브러리를 제품 개발에 활용해야 합니다. 서비스 확장을 위해 AWS, GCP와 같은 클라우드 인프라도 적극 활용하죠. 한마디로 말하자면 이 모든 것들을 직접 경험하고, 적용하면서 성장할 수 있습니다.

    추가로 개발자 모임을 통한 정보 공유, 리모트 근무, 도서 지원 등의 복지를 제공하고 있고, 추가적인 복지를 늘려가고 있기 때문에 개발자 분들이 회사와 함께 자신의 성장을 이루기에 최적화 된 환경을 제공하려 노력하고 있습니다.

  • 옴니어스 개발팀의 분위기 그리고 어떤 분들이 함께하면 좋을 것 같으세요?
  • 개발팀은 기본적으로 자율적이면서 주체적으로 문제를 해결해나가는 분위기에요. 그 과정에서 자연스럽게 고민하는 문제에 대해 팀원들끼리 활발하게 논의가 이루어지고 있고, 업무 관련된 새로운 제안도 장려하며 받아들이고 있습니다. 추가로 다른 구성원이 다른 업무를 맡고 있어 자주 소통 하지 않더라도 업무를 효율적으로 하기 위한 방법 등에 대한 논의를 위해 소통할 수 있는 자리를 만들어 드리고 있습니다.

    옴니어스에 오시는 분들은 솔직(정직)하고 소통이 잘 되는 분이면 좋을 것 같아요. 저희가 매일 접하고 있는 문제들이 단순히 어떤 기능을 구현한다기 보단 머신러닝, 패션, 비즈니스 등 여러 도메인에 걸쳐서 숨겨져 있는 복잡한 문제를 해결해야 하는데요. 예를 들어 개발자가 Tagger API 서비스를 모니터링하면서 특정 이미지에 대해 일부 속성에 대한 오분류 문제를 발견했다고 했을 때, 단순히 로직상의 오류가 원인이 아닌 이상 해당 문제를 개발자 혼자 판단해 해결하기는 어렵습니다. 해당 이미지에 대해 실제 트렌드가 변하여 기존에 구축해 둔 분류 체계로 표현이 안되거나 미쳐 몰랐던 분류 체계의 모호성이 원인 일수도 있으며, 모델의 학습과 추론 과정을 개선하여 해결 가능한 문제일 수도 있기 때문이죠.

    위와 같은 복잡한 문제를 빠르고 정확하게 해결하기 위해서는 개발자 본인이 인지한 상황을 (이 과정에서 본인의 실수로 인한 로직상의 버그를 발견하더라도) 스프린트 구성원에게 정확하게 공유하고, 전체적인 관점에서의 해결책을 제시할 수 있어야 합니다.

    한편으로 현재 옴니어스의 개발자들이 매일 다루는 데이터의 규모가 LENS 서비스의 경우 기본 100만개의 이미지 단위이고, 누적된 데이터의 경우 억 단위가 넘어갑니다. 이런 대량의 데이터를 처리하는 과정에서는 조그마한 실수나 버그가 있는 경우에도 이로 인한 영향이 크게 나타나요. 그렇기 때문에 데이터를 많이 다루어 본 경험이 있거나 꼼꼼하신 분들이 오시면 좋을 것 같습니다.

  • 옴니어스 개발팀은 연구팀, 패션데이터팀과 활발하게 협업하며 업무를 하고 있는데 이 과정에 대해 말씀해주실 수 있을까요?
  • 패션 분야에 특화되어 있는, 상업적으로 활용될 수 있는 완성도 높은 머신러닝 기반의 제품을 만들어 나가기 위해 앞서 설명한 예시처럼 머신러닝 연구자, 패션 전문가가 개발자와 함께 하나의 스프린트 구성하여 제품을 만들어나가고 있습니다. 보통 3주 내외의 기간으로 진행되는 스프린트의 플래닝 단계에서 배포에 적용될 기능들을 같이 논의하고, 처음부터 데이터 수집이 필요하거나 검증이 필요한 신규 속성 혹은 기능에 대해서는 좀 더 장기적인 관점으로 따로 계획을 세워 관리합니다.

    패션 데이터팀과 연구팀에서는 패션 이미지를 AI 모델이 어떻게 잘 표현할 수 있을지에 대해 같이 고민하면서 새로운 분류 체계를 정의하거나 실제 고객의 피드백과 모델의 추론 결과를 바탕으로 기존 분류 체계를 정비합니다. 그리고 이에 따라서 신규로 수집되거나 모델 학습을 위해 필요한 ETL 과정을 개발자(데이터 엔지니어)들이 같이 협업하고 있어요.

    <출처:

    연구팀에서 개선 및 검증을 마친 모델은 도커 컨테이너 기반의 모델 서빙 Pipeline을 통해 내부적으로 버전 별로 배포가 이루어 지는데요. 해당 과정은 자동화가 되어 있어서 연구팀 담당자가 Git의 main branch에 추론용 코드를 커밋하고, DVC 저장소에 이에 맞는 학습된 모델 데이터를 버전을 매겨서 올리게 되면 자동으로 Unit Test, Docker Build, version Tagging 등의 과정이 이루어집니다.

    이렇게 준비된 모델은 개발자들에 의해 제품에 반영되어 별도의 QA를 위한 환경에 배포되는데, 해당 과정은 cdk8s 기반으로 작성된 배포 환경 코드에 의해 버전별로 이력이 관리되며, 최종적으로 GPU Instance가 포함된 Kubernetes cluster에 배포됩니다.

    보통 모델이 제품에 반영되는 경우 서로 다른 종류의 모델 (예를 들어 이미지 전체에서 패션 아이템의 위치를 검출하는 Detector model)과 같이 사용되거나 언어별 속성 정보 적용 등 의 후처리 로직이 적용되므로, End to End QA를 별도로 진행하여 최종 배포 여부를 판단합니다. 물론 해당 QA 과정은 패션 전문가로 이루어진 패션데이터팀과 함께 하고 있습니다.

  • 개발자 개인의 성장을 위해 개발자들은 어떻게 일해야 할까요?
  • 개발자라면 아래 이미지를 한 번쯤 보았을 것이라 생각해요. 실제 개발 업무를 하다 보면 내가 개발한 코드가 나의 PC를 벗어나 통합 개발 환경이나 실제 운영 환경에 배포되었을 때 예상과 다르게 동작하는 경우가 생각보다 많습니다. 이 때 "왜 그렇지?"에 대한 의문이 들텐데요, 정확한 이유를 찾을 때까지 끝까지 파고들어서 조사를 해보는 경험을 가지는 걸 추천 드립니다. 하루 또는 반나절 안에 그 원인을 찾는 경우도 있겠지만 며칠 혹은 그 이상의 기간을 거쳐 그 원인을 알게 되는 경우도 있을거에요. 원인을 찾는 과정을 경험하면 단순히 코드 레벨에서는 생각하지 못했던 프로세스나 쓰레드, 메모리 등의 시스템 자원 운용, 네트워크 구성, Docker Image를 구성할 때 기본 패키지의 버전과 설치 순서, 환경 변수, 데이터베이스 구성 등 프로그램이 동작할 때 영향을 주는 여러 요소들에 대한 경험적인 지식을 터득하게 되며, 이론으로만 접했던 CS지식과 실제 경험이 연결되어 좀 더 넓은 시야로 개발을 할 수 있게 됩니다.

    여기에 한 가지만 더 한다면, 문제 해결 과정을 혼자서 진행하기보다 옆 자리 동료와 상의하거나 구글 검색을 통해 관련된 라이브러리의 공식 문서나 github issue, stack overflow 등에 올라온 게시물 등을 찾아보거나 더 나아가 직접 커뮤니티에 이슈 리포트를 하는 등 적극적으로 문제 해결을 위한 커뮤니케이션을 하는 습관을 들이는 것도 추천 드립니다.

    image

  • 준철 CTO님은 개발자 분들의 성장을 위해 어떻게 도움을 주고 계신가요?
  • 팀 내의 개발자 분들이 기술적인 문제와 마주하였을 때 같이 고민을 하거나 논의를 하면서 가능한 한 근본적인 원인을 찾아 해결할 수 있도록 힘쓰고 있어요. 간혹 팀 내에서 해결하기 어려운 문제가 있는 경우에는 팀 외부의 분들과 커뮤니케이션을 통해 문제를 해결 할 수 있도록 돕기도 하죠. 예를 들어 AWS와 같이 외부 자원을 사용하는 도중 발생하는 기술적 이슈가 있는 경우, 제가 활용할 수 있는 여러 서포트 채널을 통해 적극적으로 도움 요청을 합니다. 필요한 경우에는 해외의 엔지니어와 live chat이나 화상회의를 진행하기도 하구요.

    그리고 이 과정에서 개발자 개개인의 아이디어나 해결 방안이 실제 문제 해결 과정에 적용될 수 있도록 하는 게 중요하다고 생각해요. 이를 위해 제가 생각하는 내용을 이야기하기 보다는 좋은 질문을 하고, 스스로 길을 찾을 수 있도록 도움 드리는 역할을 하려 노력하고 있습니다.

  • 옴니어스에서 가장 기억에 남는 일이 있다면?
  • 작년 6월 LENS 서비스가 처음 상용화 되었을 때가 가장 기억에 남습니다. 그 당시 상용으로 서비스되고 있던 Tagger API 서비스와 다르게 LENS API의 경우 고객사의 고객인 일반 소비자들의 트래픽(상품 추천)이 LENS API로 그대로 오는 방식이었는데요. 그렇다 보니 사람들이 많이 쇼핑을 하는 시간인 평일 밤 시간대에 평소보다 많은 양의 API 호출이 있었고, 기존 서버 인스턴스 2대 만으로 운영 중인 서버만으로는 처리가 어려워 인프라 증설을 처음으로 했었습니다.

    물론 처음 서비스 아키텍처를 설계할 때부터 이러한 요소를 고려 했었기 때문에 실제로 증설을 하는 것은 바로 가능했지만, 실제로 증설을 해보니 저를 비롯하여 서비스를 개발한 개발자 분들 모두 "오 이게 정말 되네?" "우리가 개발한 서비스가 정말 이 정도로 사용이 되네?"라는 생각과 함께 뿌듯함을 느꼈어요. 개발자들 입장에서 회사가 성장한다는 느낌을 실제 수치로 체감할 수 있는 부분이어서 기억에 남습니다.

  • 앞으로 옴니어스를 어떻게 만들고 싶으신가요?
  • 많은 사람들이 정말로 필요로 하고 실제로 활용되는 AI 서비스를 제대로 만드는 곳이 되었으면 하고, 사람들도 그렇게 인식하는 곳이 되었으면 합니다. 그 과정을 함께 하게 될 모든 분들이 "나는 패션 AI 분야에서 제대로 된 제품을 만들어 봤어"라고 자신할 수 있는 커리어와 자신감을 가져가셨으면 해요. 이를 위해 지금도 최선의 방향을 찾고 달려가기 위해 저 뿐만 아니라 함께하는 분들과 같이 노력하고자 합니다.