테크 뉴스
테크 뉴스 더 보기
기술 블로그
음성 전처리를 위한 Audio Path의 중요성
음성 전처리가 원할히 동작하기 위한 Audio Path의 구성을 설명드리겠습니다.여기에서 다룰 Audio Path는 음성 인식을 위한 전처리 과정에 필요한 Recording 관점의 Audio Path가 됩니다.간단하게 일반적으로 App에서 Recording을 수행하면 H/W의 mic로부터 들어온 데이터가 App에 전달되는 것입니다.그런데 Application에서 Audio Playback과 동시에 Record를 수행하게 되면 다음 그림과 같이 Playback 소리도 Mic로 입력되게 됩니다. 이렇게 되면 Application 스스로 출력한 소리가 다시 Mic에 Recording 되어 어떤 소리가 진짜로 외부의 소리가 Recording된 것인지 구분이 불가능해지며,이를 Echo 상황이라고 합니다.이러한 Echo 상황을 피하기 위해 Echo cancellation이 필요하게 되었고 잘 동작하기 위해 SW Audio Path 구성이 필요해졌습니다.그렇다면 Echo Cancellation 기능이 잘 동작하기 위한 조건을 살펴보겠습니다.우선 SPK로 출력된 소리는 공중으로 퍼진 후 MIC에 들어오게 되기까지 시간이 걸립니다. 비록 사람이 알아채기 어려울 정도로 짧기는 합니다.Echo Cancellation을 하기 위해서는 MIC의 입력값에서 SPK을 출력값을 일정한 간격에 맞춰서 제거해줘야 합니다.이 간격을 가장 잘 측정할 수 있는 부분은 Hardware 부분입니다.가장 물리적이고 가장 바깥에 있는 영역으로 이 간격을 일정하게 제거할 수 있습니다. 이 부분은 곧 H/W 전처리 칩이 됩니다.Echo Cancellation 측면에서 어떻게 제거하는 지에 대한 알고리즘을 빼면 이 곳이 delay를 가장 명확하게 판단할 수 있습니다.그리고 HW Echo Canncellation을 사용할 수 없는 상황이라면 SW Echo Cancellation을 해야하며 위 그림 중 어느 곳에서 처리할 지를 고민해야 합니다.보통 App Layer로 갈 수록 Delay를 측정하기 어려워집니다.위 그림은 pulse audio의 echo cancellation의 동작을 도식으로 표현한 그림입니다.이전 그림 기준으로는 framework 부분에 해당됩니다.App Layer에서 수행하는 것보다는 좋지만 이곳에서의 문제는 mic에서 spk로의 delay를 측정하기 어렵다는 문제가 있습니다.각 박스마다 buffer가 있고, playback과 record는 각각 다른 thread 또는 다른 process에서 동작합니다.그렇기 때문에 이 시점에 가지고 있는 buffer의 audio data가 speaker에 언제 출력될지 예측하기 힘들고 또 mic를 통해 들어온 audio data가 언제쯤 application에 전달될지 예측하기 힘듭니다.물론 이를 예측하기 위해 남은 buffer가 언제쯤 나갈지 예측하는 계산을 추가로 하거나 timestamp를 비교하여 서로 sync하기 위해 노력을 하기는 합니다.SKT AI 음성인식 전처리는 대부분 App layer에서 진행됩니다. 위에서 말씀드려왔던
SK텔레콤
·
오늘
여기어때 Hackathon 2024 : Gen AI를 활용한 챗봇
여기어때 Hackathon 2024 : Gen AI를 활용한 챗봇안녕하세요. iOS 개발팀 드락입니다.2024년 11월 28~29일에 걸쳐 여기어때 해커톤 1회가 열렸는데요. 저도 팀을 꾸려서 참여했고, 1박 2일 동안 집중하느라 몸은 피곤하지만 신선한 고민들을 하면서 즐거운 시간을 보냈습니다. 저희 팀의 아이템은 숙소 추천 챗봇이었고요. 이를 구현하기 위해 사용된 몇 가지 기술과 방법론, 느낀 점 등을 기술 블로그를 통해 공유하려 합니다.사실 여기어때는 7년전에 챗봇을 출시했던 적이 있어요. 알프레도라는 숙소 검색을 도와주는 집사 챗봇입니다.숙소 검색 도우미 챗봇이라면..자연어로부터 핵심 키워드들을 추리 및 추출해 내고이를 통해 알맞은 숙소를 유저에게 제공하는 기능위 두 가지가 핵심 기능이라고 할 수 있겠는데요. 당시에는 자연어 파싱을 LLM의 도움 없이 직접 개발한 엔진을 통해서(!!) 처리했었습니다. 자연어의 무궁무진한 배리에이션 때문에 이 파싱이란 게 무진장 어렵습니다. 개발하면서 샘플로 상정하고 테스트한 텍스트들에는 그럭저럭 대응되겠지만..조금만 말이 달라져도 잘 안되고 어리버리한 모습을 보였었죠..재미는 있었지만 서비스로 지속되기에는 좀 부족한 퍼포먼스로.. 그렇게 알프레도는 출시 후 오래 지나지 않아 은퇴했습니다.안녕 알프레도..저희 팀의 해커톤 아이템 컨셉은 알프레도의 부활이었습니다. 그때 모습과 성능 그대로 부활만 해서는 의미가 없겠죠? Google Vision API, ChatGPT API, Apple STT(Speech to Text) Framework 등을 사용하여 이전 알프레도보다 강력해져서 돌아왔습니다!돌아온 알프레도의 무기들돌아온 알프레도에 사용된 핵심 기술은 다음과 같이 4가지로 정리할 수 있겠는데요.자연어 파싱STT(Speech to Text)태그기반 이미지 검색해시태그 추천하나씩 차례대로 이야기해보겠습니다.1.자연어 파싱챗봇을 만들려면 우선 가장 기본 기능인 자연어 파싱 성능부터 확보해야 했습니다. 자연어는 굉장히 난해하고 배리에이션이 다양하기 때문에, 직접 파싱 엔진을 만드는 것은 그다지 현명한 방법이 아닙니다. 세상엔 이미 강력한 LLM들이 여럿 공개되어 있으니까요 :) 이를 활용하기로 합니다. Google의 Gemini와 OpenAI의 ChatGPT, 두 가지 솔루션을 최우선 후보로 두고 며칠에 걸쳐 다양한 대화를 통해 면접(?)을 진행한 후 최종적으로 ChatGPT를 채용하기로 했습니다.자연어로 이루어진 유저의 질문으로부터 숙소 검색에 핵심적인 내용들을 찾아내고 이를 숙소 검색에 필요한 내용으로 정제해 내는 기능을 ChatGPT 프롬프팅을 활용해서 구성했습니다. LLM에 프롬프팅을 활용해서 자연어를 xml, json, SQL 등의 정제된 내용으로 치환하는 방법은 최근에 많은 곳에서 사용되고 있는 핫한 기술이기도 합니다.저희는 여기어때의 검색 API가 연동되어 동작할 수 있도록 필요한 파라미터들이 자연어로부터 추출될 수 있는 프롬프트를 작성했습니다.알프레도의 DEBUGTEXT 구문 아래에 JSON형식
여기어때컴퍼니
·
하루 전
스플래시 화면을 활용한 홈화면 백화현상 개선하기
안녕하세요. 여기어때컴퍼니 iOS 개발팀 대니입니다.앱을 처음 실행했을 때 사용자에게 보이는 첫 화면은 앱의 첫인상을 결정짓는 중요한 요소입니다. 이때 화면에 아무것도 표시되지 않는 빈 화면이 노출된다면 사용자는 앱이 느리거나 불안정하다고 느낄 수 있습니다. 이러한 빈 화면이 나타나는 현상을 ‘백화현상’이라고 하며, 이는 사용자 경험을 저해하고 앱에 대한 신뢰를 떨어뜨릴 수 있습니다.이번 글에서는 스플래시 화면을 활용하여 초기 앱 진입시 홈 화면 로딩 중 발생하는 백화현상을 최소화하고 온보딩 플로우를 간소화함으로써 사용자 경험을 개선한 개발 과정을 공유해 보고자 합니다.홈 화면의 백화현상 원인 파악홈 화면의 백화현상은 네트워크 상태나 서버 응답 지연으로 인해 발생할 수 있는 문제입니다. 특히 앱의 UI가 Server Driven 방식으로 구성된 경우, 이러한 현상이 더욱 두드러질 수 있습니다.Server Driven 방식이란 앱의 UI 레이아웃과 콘텐츠 구성을 서버에서 제공하는 데이터에 따라 동적으로 결정하는 구조를 말합니다. 이를 통해 서버에서 UI를 실시간으로 제어하거나 배포 없이 화면 구성을 변경할 수 있는 유연성을 제공합니다. 하지만 이 방식은 서버 응답에 의존하기 때문에, 응답이 지연되거나 실패하면 빈 화면이 표시되는 문제가 발생할 수 있습니다.여기어때 앱 또한 Server Driven UI 구조로 되어 있어, 홈 화면을 구성하는 데이터가 서버 응답에 의존합니다. 따라서 네트워크 상태가 불안정하거나 서버 응답 시간이 길어지면, 빈 화면이나 로딩 상태가 길어지는 문제가 발생할 수 있습니다.Launch Screen과 초기화 작업Configure a launch screen storyboardConfigure a launch screen in an plist앱 초기 로딩 시 기본적으로 제공되는 스플래시 화면인 Launch Screen은 정적 화면으로 구성됩니다. Launch Screen은 앱 로고나 이미지를 보여주는 용도로 사용되며, Storyboard나 정적 이미지 레이아웃으로 설정됩니다. 하지만 이 화면은 코드 실행이 불가능하다는 한계가 있어, 홈 화면 진입 전에 필요한 작업을 처리하려면 Launch Screen 이후에 동작할 별도의 ViewController를 만들어야 합니다.여기어때 앱에서는 Launch Screen 이후 초기화 작업을 담당하는 별도의 InitializeViewController를 사용합니다. 이 화면은 앱 로고를 표시하는 1차 스플래시 이미지를 보여줍니다. 이후, API를 통해 2차 스플래시 이미지를 선택적으로 노출합니다. 2차 스플래시 이미지는 마케팅과 연관된 콘텐츠로, 최소 노출 시간이 지정되어 있습니다.홈 화면까지 진입 과정1차 스플래시 이미지가 노출된 이후, 앱 실행 시점에 필요한 API 호출, 초기 세팅 작업, 앱 사용 권한 요청, 업데이트 팝업 표시 등 홈 화면 진입 전에 필요한 다양한 작업이 진행됩니다. 이 작업들이 완료되면 2차 스플래시 이미지를 표시한 뒤, 홈 화면인 HomeViewContro
여기어때컴퍼니
·
하루 전
여행 검색의 편리함을 더하다 : 해외 자동완성 개선
여행 검색의 편리함을 더하다 : 해외 자동완성 개선안녕하세요. 여기어때컴퍼니 검색추천개발실 아론 입니다.여행 준비를 할 때, 우리는 종종 검색창에 도시명이나 숙소명을 입력합니다. 그런데 몇 글자만 입력해도 관련된 도시나 숙소 이름이 자동으로 뜨는 경험, 해보셨죠? 바로 검색어 자동완성 기능이 그 역할을 하는데요. 이 기능 덕분에 여행 계획이 훨씬 간편해집니다. 그럼 이 기능이 어떻게 작동하는지, 그리고 왜 유용한지 알아볼까요?검색어 자동완성, 어떻게 작동할까?여행을 계획하면서 검색창에 원하는 도시나 숙소를 타이핑할 때, 그 입력을 실시간으로 감지하여 사용자가 입력한 글자에 맞는 예상 검색어를 빠르게 제시해줍니다. 이 제안은 입력한 내용에 맞춰 자동으로 업데이트되며, 사용자가 선택할 수 있도록 리스트 형태로 화면에 표시됩니다. 예를 들어, “파리”라고 입력하면 도시명 “파리”와 파리에 있는 숙소/관광지가 추천됩니다.그리고 무엇보다 중요한 점은, 사용자가 어떤 검색어를 자주 선택했는지에 대한 데이터를 분석하여, 더 나은 제안을 할 수 있도록 계속해서 개선된다는 것입니다. 이는 반복적인 학습과 최적화를 통해 이루어집니다.자동완성 기능이 빠르고 원활하게 작동하려면, 지연 시간 없이 즉시 결과를 보여주는 것이 매우 중요합니다. 그래서 시스템은 지속적으로 최적화 작업을 거쳐, 사용자가 검색하는 동안 지체 없이 결과를 제공할 수 있도록 개선됩니다.왜 자동완성 기능이 유용할까?자동완성 기능은 단순히 검색 시간을 줄여주는 것을 넘어, 여행 준비를 더욱 효율적으로 도와줍니다. 여행지나 숙소에 대한 정보가 빠르게 제시되기 때문에, 여행객들은 보다 쉽게 원하는 정보를 찾을 수 있습니다.또한, 검색어 자동완성 기능은 사용자가 예상하지 못한 유용한 정보를 제공하기도 합니다. 예를 들어, 특정 도시를 검색할 때, 관련 숙소뿐만 아니라 해당 도시에서 즐길 수 있는 액티비티나 음식 정보까지 자동으로 뜬다면, 여행 준비가 한층 더 알차고 편리해지겠죠?그렇다면 여기어때 검색추천개발실에서는 이 자동완성 기능을 어떻게 개선하고 있었을까요? 먼저 말씀드리고 싶은 점은, 이 글을 통해 자동완성에 대한 정답을 제시하는 것이 아니라, 서비스에 최적화된 방식으로 이를 구현하기 위한 다양한 고민을 공유드리고자 한다는 것 입니다.여행 숙소 예약, 사용자 경험을 위한 작은 변화여행을 떠나기 위한 첫 걸음은 숙소 예약입니다. 이때, 많은 사람들이 검색창에 도시명이나 숙소명을 입력하죠. 특히 해외 여행지의 경우, 도시명이나 숙소명이 한글 발음으로 여러 가지 형태로 입력되는 경우가 많습니다. 예를 들어, “푸꾸옥”이라는 도시명을 검색한다고 할 때, “푸쿠옥”, “푸쿽” 등 다양한 표기로도 검색될 수 있죠.이처럼 동일한 도시를 의미하지만 서로 다른 방식으로 표현된 검색어들이 존재할 때, 검색 결과가 제대로 나오지 않거나 부정확한 데이터가 표시될 위험이 있습니다. 예를 들어, “푸꾸옥”을 서비스 도시명으로 설정해놓은 상황에서 사용자가 “푸쿠옥”을 입력하면 어떻게 될까요?검색 흐름:서비스 도시명 =
여기어때컴퍼니
·
하루 전
[백서] 비전 AI 실무자를 위한 합성 데이터 생성 가이드라인 및 활용 전략
비전 AI 프로젝트의 데이터 부족 문제를 해결하는 합성 데이터 생성 가이드라인, 실무자들이 직접 활용할 수 있는 방법과 전략을 슈퍼브에이아이가 알려드립니다. 커스텀 도메인 합성 데이터 만들기, 합성 데이터 성공 사례가 궁금하시다면 이 백서에서 답을 얻으실 수 있을 것입니다.현재 AI 기술은 다양한 산업에서 혁신을 이끌고 있지만, 여전히 많은 실무자들이 데이터 부족이라는 현실적인 한계에 직면하고 있습니다. 특히 커스텀 도메인에서 고품질의 이미지나 영상 데이터를 확보하는 것은 시간과 비용 측면에서 큰 도전 과제입니다. 이러한 문제를 해결하기 위해, 합성 데이터는 비전 AI 프로젝트 실무자들에게 중요한 대안으로 떠오르고 있습니다.이 백서는 특정 도메인이나 전문 영역에서 실제 데이터 취득이 어려울 때 합성 데이터를 활용해 비전 AI 프로젝트의 성능을 극대화할 수 있는 방법과 전략을 제시합니다. 텍스트에서 이미지로 변환하는 최신 생성 모델부터 특정 산업에 특화된 커스텀 데이터 생성 기법까지, 실무자들이 실질적으로 적용할 수 있는 구체적인 사례와 가이드라인을 제공합니다.비전 AI 모델의 성능을 한 단계 끌어올리고 싶은 실무자, 데이터 부족 문제를 극복하고 싶지만 방법을 찾지 못한 실무자라면, 이 백서를 추천합니다.2. 합성 데이터가 모델 성능에 기여하는 원리4. 커스텀 도메인 데이터를 위한 전략• 컨트롤 가능성의 중요성
슈퍼브에이아이
·
하루 전
카카오페이 성능 테스트 존을 소개합니다.
marriott.jw 카카오페이에서 개발한 k8s 서비스에 대해 성능 테스트를 어떻게 하고 있는지 잘 설명한 글입니다. 서비스 안정성을 고려하는 엔지니어라면 꼭 한번 읽어보면 좋겠습니다.bri.ghten 카카오페이에서 어떻게 개발자 친화적으로 쉽게 성능 테스트를 할 수 있게 시스템을 구축했는지에 대한 글입니다. 성능 테스트 시스템 구축을 고민하고 있는 엔지니어 분들께 참고할 만한 하나의 인사이트가 될 것입니다.안녕하세요, 카카오페이 SRE팀 RE파트 에드워드입니다. 오늘은 카카오페이에서 성능 테스트 환경을 구축하고 제공한 경험을 공유하려고 합니다. 구체적인 경험을 공유하기에 앞서 어떠한 배경과 목표로 성능 테스트 환경을 만들게 됐는지 말씀드리겠습니다. 이 글은 성능 테스트 환경 개선 및 효율적인 모니터링 도구에 관심 있는 엔지니어를 대상으로 합니다.카카오페이는 대규모 트래픽이 예상되는 이벤트 전이나, 기존 서비스 아키텍처의 변경이 있을 때에는 필수적으로 중요 서비스의 성능 검증을 진행하고 있습니다. 그러나 성능 테스트를 하기 위한 준비 과정이 길고, 개발자들에게 불편함으로 다가와서 이를 개선할 필요가 있었습니다. 이런 불편을 겪는 개발자들에게 보다 쉽게 성능 테스트를 수행할 수 있고, 운영 서비스에 영향을 주지 않을 수 있는 성능 테스트 환경 (이하 성능 테스트 존)을 구축하여 제공하게 되었습니다.프로젝트를 시작하기 앞서, 개발자들과 인터뷰를 통해 현재 상황과 필요한 기능을 파악했습니다. 다음은 인터뷰 내용입니다.• 🙍♂️ 개발자 A: 성능 테스트를 하기 위해 유관부서 협조하에 장비 발급부터 환경 세팅 등 준비 과정들이 있는데요. 길면 한 달까지도 소요되어 성능 테스트 준비하는 데 많은 시간이 소요되어 준비기간을 줄일 수 있으면 좋겠어요.• 🙋♀️ 개발자 B: 저희 부서는 성능 테스트를 진행하고 그 결과를 위키페이지에 정리하곤 하는데요. 언제든지 과거에 진행했던 성능 테스트에 대한 이력을 확인할 수 있으면 좋겠어요.이러한 개발자들의 의견을 바탕으로, 아래와 같이 성능 테스트 존 프로젝트의 방향성을 결정했습니다.• 환경 준비: 유관부서 협조 없이 개발자들이 직접 필요한 성능 테스트 환경을 꾸릴 수 있도록 한다.• 개발 환경: 장애 발생 예방 차원에서, 성능 테스트 환경을 운영환경이 아닌 개발환경에 구성한다.• 테스트 이력: 과거에 수행한 성능 테스트 이력 조회 및 비교를 위해, 테스트 이력을 관리/보관한다.• 테스트 도구: nGrinder, K6 등 다양한 성능 테스트 도구를 지원한다.성능 테스트 존은 말 그대로 성능 테스트를 하기 위한 전용 환경을 말하며, 더 나아가서 개발자들이 유관부서 협조 없이 간단한 설정만으로 쉽고 빠르게 준비할 수 있도록 제공하는 서비스입니다. 성능 테스트 존 환경은 k8s를 기반으로 구축했습니다. 그 이유는 대부분의 서비스가 k8s 환경에서 동작하고, 서비스의 리소스 조정과 scale in/out이 쉽게 가능하여 성능 테스트 결과의 질을 향상하는 데 도움이 되기 때문입니다.성능 테스트 존은 크게 2개의 기능
카카오페이
·
하루 전
기술 블로그 더 보기
테크 뉴스
테크 뉴스 더 보기
코드너리에서 이용할 수 있는
새로운 기능
새로운 기능
지금 확인해 보세요!
이달의 컨퍼런스
컨퍼런스 일정 더 보기