테크 인사이트

채널톡 개발팀이 알려주는 엔지니어링 인사이트

DynamoDB와 함께한 아키텍처 현대화 여정 – 1부

채널코퍼레이션은 올인원 AI 메신저 ‘채널톡’을 운영하는 B2B SaaS 스타트업입니다. 채널코퍼레이션의 비전은 “고객과 기업 사이의 모든 문제를 해결하는 것”으로, 첫 제품인 채널톡은 고객과 기업 사이의 커뮤니케이션 문제를 해결하기 위해 등장했습니다. 채널톡은 채팅상담, 챗봇, AI 전화, CRM 마케팅, 사내 메신저가 합쳐진 통합 솔루션으로, 기업과 고객의 커뮤니케이션을 돕고 있습니다. 한국, 일본 그리고 미국을 포함한 총 22개국에서 약 15만 개 이상의 고객이 채널톡을 사용 중에 있으며, 매월 7천만 건 이상의 상담이 발생하고 있습니다. 그 결과 2018년부터 매년 2~5배의 속도로 매년 비즈니스가 성장하고 있습니다. 이번 블로그에서는 모든 비즈니스 규모에서 사용할 수 있는 Amazon DynamoDB를 이용한 채널코퍼레이션의 비즈니스 현대화 여정의 동기, DynamoDB를 선택한 이유, 그리고 PostgreSQL로 부터 마이그레이션 시 고민했던 포인트들을 공유합니다. 비즈니

· 에반

DynamoDB · Lambda · 채널톡 + 4

[톡터뷰 : 웹팀] 채널톡의 첫인상을 책임지는 웹팀

안녕하세요! 채널팀에서 채용을 담당하고 있는 한스입니다👨🏻‍💻 ’톡터뷰’ 여섯번째 이야기! 저는 이번에는 채널톡의 첫인상을 책임지고 있는 웹팀 이야기를 소개해보려 합니다. 이런 분에게 이 글을 추천합니다! ✅ 채널톡 ‘웹팀’ 문화/직무에 대해 알고 싶은 분 ✅ 채널톡 프론트엔드 개발자가 하고 있는 경험에 대해 알고 싶은 분 Q. 존, 아루 안녕하세요~ 자기소개 부탁드려요. - 존 : 안녕하세요! 채널팀의 존이라고 합니다. 저는 현재 데스크 팀에서 프론트엔드 개발을 담당하고 있으며, 사용자들에게 더 나은 경험을 제공하기 위해 UI/UX 개선 및 성능 최적화 작업을 주로 하고 있어요. 웹 개발을 통해서 채널톡에서 더 나은 서비스를 만들기 위해 노력하고 있습니다. - 아루 : 안녕하세요! 채널팀에서 프론트엔드 개발자로 재직 중인 아루입니다. 채널팀에 합류한 이후로 다양한 태스크에 참여하였고, 최근에는 채널톡 데스크탑 앱(Electron)의 신규 기능 개발과 유지보수를 주로 맡고 있어요. 비즈니

· Hans

테크 인사이트 · 개발자 · 개발자채용 + 3

[톡터뷰 : 백엔드팀] 채널톡 개발의 심장 백엔드팀

안녕하세요! 채널팀에서 채용을 담당하고 있는 한스입니다👨🏻‍💻 ’톡터뷰’ 네번째 이야기! 저는 이번에는 채널톡 서버를 든든하게 책임지고 있는 백엔드팀 이야기를 소개해보려 합니다. 이런 분에게 이 글을 추천합니다! ✅ 채널톡 ‘백엔드팀’ 문화/직무에 대해 알고 싶은 분 ✅ 채널톡 백엔드 개발자가 하고 있는 경험에 대해 알고 싶은 분 Q. 두기, 카멜 안녕하세요~ 자기소개 부탁드려요. - 두기 : 안녕하세요! 저는 채널팀에서 백엔드 엔지니어로 일하고 있는 두기라고 합니다. 채널팀에 합류한 지는 벌써 3년 6개월 정도 되었어요. 처음에는 프론트엔드 팀으로 입사해서 2년 정도 업무를 하다가, 백엔드 팀으로 옮겨 지금까지 열심히 일하고 있습니다. 백엔드 팀에서는 크게 ‘도큐먼트’라는 제품 개발, 그리고 내부적으로는 ‘메시지 큐’와 ‘스트리밍 시스템’을 담당하고 있어요. 저희 팀에서 큐와 스트리밍 시스템을 사용하는 패턴을 잘 정의하고 다른 팀원들이 잘 활용할 수 있도록 돕는 역할이라고 설명드릴 수

· Hans

테크 인사이트 · 백엔드 · 백엔드개발 + 8

[톡터뷰: 안드로이드팀] 채널톡의 모바일은 우리가 담당한다!

안녕하세요! 채널팀에서 채용을 담당하고 있는 한스입니다👨🏻‍💻 ’톡터뷰’ 두번째 이야기! 이번에는 채널톡 앱과 SDK 개발을 담당하는 안드로이드팀 이야기를 소개해보려 합니다. 이런 분에게 이 글을 추천합니다! ✅ 채널톡 개발자가 일하는 방식에 대해 알고 싶은 분 ✅ 채널톡 ‘안드로이드팀’ 문화/직무에 대해 알고 싶은 분 Q. 죠지, 필립 안녕하세요~ 자기소개 부탁드려요. - 죠지 : 안녕하세요! 최근 채널팀에서 3주년을 맞이한 안드로이드 개발자 죠지라고 합니다. 저는 현재 채널톡 고객사의 관리자용 앱인 '데스크 앱'과 고객사/엔드유저가 사용하는 'SDK'의 기능 개발 및 유지보수 업무를 담당하고 있어요. - 필립 : 반갑습니다! 저는 채널팀에 입사한 지 6개월 정도 지난 7년 차 안드로이드 개발자 필립입니다. 저는 가장 최근에 데스크 앱 에서의 SAML 로그인 기능을 개발했고, 지금은 고객사가 사용하는 SDK의 기능과 데스크 앱의 신규 기능 개발을 병행해가며 업무를 진행하고 있어요. Q.

· Hans

테크 인사이트 · 안드로이드 · 개발자채용 + 5

사용량 기반 과금 모델 구현하기: 해답편

이번 글에서는 저번 문제편에 이어서, 작년 12월에 릴리즈된 사용량 비례 과금 모델을 Amazon DynamoDB Streams에 기반한 스트림 처리 시스템을 이용하여 구현한 과정에 대해 살펴보겠습니다. 문제 정의 요약 사용량 비례 과금 모델의 요구사항을 다시 짚고 넘어갑니다. 1. 사용자가 어떤 기능을 사용할 때마다 측정이 이루어져야 합니다. 따라서, 우리는 기능 사용을 담당하는 비즈니스 로직에서 “기능 사용 이벤트”를 발행하고, 이벤트 스트림을 구독하는 consumer에서 이벤트를 집계하여 고객이 사용한 총량을 계산합니다. 2. 사용량 한도 기능: 기능 사용이 일어나는 로직에서 현재 사용량과 사용 한도를 비교할 수 있어야 합니다. 3. 사용량 집계가 일어나는 윈도우는 고객사마다 서로 다르며, 변경될 수 있습니다. 고객마다 결제를 원하는 날짜가 다르기 때문에, 한 달간의 사용량을 집계하더라도 그 기준일이 각자 다릅니다. 4. 실시간으로 변하는 사용량을 조회할 수 있어야 합니다. 5

· Dugi 🎈

techblog · backend · stream + 5

[AI] Table QA with LLMs - Huge table parser by pseudocode filtering

Hi, I’m Jenny (Soyoung Yoon), a research intern at channel talk AI team 🙂 Currently, I’m working on advancing the potential of ALF. Especially, I’m focusing on making LLMs to better understand tabular data. Background: Table QA with LLMs, and issues The task “Table QA” refers to any question answering task that needs to interpret tables. For example, given a table on weather data (Figure 1), the task is to answer the question: “What is the temperature on Busan?”. Commonly, we use the RAG(Retriev

· Jenny

테크블로그 · AI · LLM + 5

수천 줄의 코드 작성을 줄인 KSP 도입 과정

안녕하세요! 채널톡 안드로이드 엔지니어 딘입니다. 이번 글에서는 저희 팀에서 KSP를 활용하여 화면 전환 시의 데이터 전달의 안정성을 높이고 수천 줄의 보일러 플레이트 코드를 줄여내기까지의 고민과 도입 과정을 다뤄보겠습니다. --- 기본적인 전달 방식의 문제점 Android에서 Intent를 통해 Activity를 전환할 때는 아래와 같이 코드를 작성할 수 있습니다. class MainActivity : Activity() { fun onCreate() { val newIntent = Intent(this, SubActivity::class.java) newIntent.putExtra(SubActivity.EXTRA_USER_ID, userId) startActivity(newIntent) } } class SubActivity : Activity() { var userId: Int = 0 fun onCreate() { userId = intent.getIntExtra(EXTRA_U

· Dean

테크 인사이트 · 안드로이드 · kotlin + 4

[개발문화] 채널팀의 엔지니어 세션을 소개합니다!

안녕하세요. 채널 코퍼레이션의 소프트웨어 엔지니어 기리입니다. 이번 글에서는 채널팀의 자랑하고 싶은 개발 문화인 엔지니어 세션을 이야기해 보겠습니다. 채널 코퍼레이션에서는 매주 금요일에 온/오프라인으로 모여서 한 시간 정도 엔지니어 세션을 진행합니다. 주로 업무를 하면서 내가 배운 지식이나, 이슈 핸들링, 인사이트를 공유합니다. 이를 통해서 자신만 알고 있을 수 있는 것들을 모두에게 공유하는 개발 문화를 함께 만들어가는 시간입니다. 백엔드 팀에서 시작해, 지금은 웹팀, 모바일 팀, AI 팀 그리고 비 개발 직군까지도 함께 동참하고 있습니다. 2021년부터 시작된 엔지니어 세션은 지금까지 총 180개의 세션, 49명의 엔지니어가 세션을 진행해 주셨습니다. 채널의 기술 블로그에도 올라와 있는 두기의 AWS SQS 도입기나, 어셔의 SOCKET 개선에 대해서도 세션을 진행했었습니다. - 두기의 AWS SQS 도입기 - 어셔의 SOCKET 개선 세션을 시작하게 된 이유는 채널 코퍼레이션의

· GIRI

테크블로그 · 테크 인사이트 · 개발문화

유저 경험을 고려한 웹 메신저 SDK 개발하기

안녕하세요. 채널톡 프론트엔드 엔지니어 에이든입니다. 채널톡의 핵심 철학은 Customer-Driven, 고객 중심 입니다. 이는 개발자가 제품을 구현할 때도 고스란히 적용이 되는데요. 이번 글에서는 웹 기반의 메신저 SDK를 만들 때 유저 경험을 위해 고민했던 부분들을 몇 가지 사례와 함께 살펴보려 합니다. --- SDK의 두 사용자 집단: 고객사와 유저 채널 프론트(Channel Front)는 기업과 유저를 연결하는 올인원 AI 메신저입니다. 실시간 고객 상담뿐만 아니라 자동화 챗봇, 마케팅, 미트 등 다양한 기능을 제공하고 있는데요. 현재 보고 계신 채널톡 홈페이지의 우측 하단에서도 만나볼 수 있지요. 채널톡이 제공하는 JavaScript SDK를 사용하면 기업(이하 “고객사”)이 운영하는 웹사이트에 채널 프론트를 손쉽게 설치할 수 있습니다. 일반적인 웹서비스를 개발할 때와 비교했을 때, SDK의 경우 문제를 해결하기 위해 고민하는 지점이 약간 다르다고 느꼈습니다. 두 사용자

· Channel Talk

SDK · 테크 인사이트 · 테크블로그 + 2

대규모 코드 마이그레이션 자동화하기

안녕하세요 채널톡 웹팀의 앤드류입니다. 채널톡에서는 베지어라는 디자인 시스템을 자체 개발하여 채널톡 어플리케이션 개발에 활용하고 있습니다. 최근에 베지어의 메이저 버전을 올리면서 베지어의 css-in-js 라이브러리에 대한 의존성을 제거하고 보다 나은 인터페이스를 제공하기 위해 개선했던 작업이 있었습니다. 디자인 시스템이 사용하는 스타일링 시스템 자체를 변경하다 보니 상당히 많은 변경 사항(breaking change)이 발생했고, 어플리케이션에서는 만 줄 이상이 되는 코드를 바꿔야 했습니다. 이번 글에서는 이러한 변경 사항에 보다 효율적으로 대응하기 위해 마이그레이션의 대부분을 자동화하여 마이그레이션 비용을 감소시킨 경험을 소개하려고 합니다. --- 도전 과제 베지어에는 어떤 변경 사항이 있었길래 사용처에서 수작업으로 하나씩 대응하지 않고 자동화를 해야만 했을까요? 몇 개만 살펴보자면 아래와 같은 변경사항이 있었습니다. 1. 컴포넌트 네이밍 변경: 기존의 Stack을 레거시 처리하

· 앤드류

테크 인사이트 · javascript · typescript + 2

고객 상담을 효율적으로 요약하기

안녕하세요, AI팀 ML 엔지니어 도비입니다 🤗 이번 포스팅에서는 일반적인 요약 시스템 시나리오가 아닌, 채팅 시나리오에서 효율적으로 요약할 수 있는 방법에 대한 고민들을 담아 보았습니다. 채팅 시나리오에서 요약 최근 Large-scale Language Model (LLM)을 활용한 다양한 서비스들이 출시되고 있는데요. 요약 시스템을 구축하는데도 LLM의 능력을 사용하면 더 좋은 품질의 요약 결과를 얻을 수 있습니다. 하지만 LLM의 크기, 즉 모델의 파라미터 수가 많을 수록 요약 결과의 품질은 더 좋아지겠지만 그만큼 latency가 같이 높아지는 문제가 있는데요 😢 특히 OpenAI같이 RESTful API로 제공하는 SaaS 형태의 모델들을 사용하는 경우에, 1. 모든 채팅 내용을 한번에 요약하는 경우 요청의 body가 너무 클 수 있고 2. 채팅이 모두 완료될 때까지 기다린 뒤에 요약을 해야한다 는 주의점들이 있는데요. 이번 포스팅에서는 채팅의 특성을 살려서 이 부분들을 개선

· Dobby

테크 인사이트 · AI · LLM + 4

사용량 기반 과금 모델 구현하기: 문제편

사용량 기반 과금 모델 개편 2023년 12월 15일, 채널톡에 새로운 과금 모델이 적용되었습니다. 이번 개편의 가장 중심이 되는 아이디어는 "사용량 기반 과금"으로, 채널톡에서 제공하는 서비스를 얼마나 많이 이용했는가에 따라 비용이 결정됩니다. 개편 이전에는 고정된 구독료를 지불하면 부가 서비스를 사용할 수 있었습니다. “마케팅” 부가서비스를 구독하면 마케팅 기능을 사용할 수 있고, 마케팅 메시지를 한 달에 1건을 보내든 1억 건을 보내든 동일한 구독료를 지불했습니다. 새로운 과금 모델에서는 마케팅 메시지를 보낸 양이 많을수록 사용료가 올라갑니다. 2023.12.15 이후 적용된 과금 모델. (https://channel.io/ko/pricing) 이 글에서는 이번 과금 모델 개편의 비즈니스적 효과에 관해서는 잠시 접어두고, 기술적 관점에서 이 문제에 어떻게 접근했는지에 대해 풀어보고자 합니다. 이번 개편에서 구현되어야 하는 가장 중요한 기술 중 하나는 사용자별로 어떤 기능을 언제

· Dugi 🎈

techblog · backend · stream + 3

상담 효율을 높이기 위한 자동완성

안녕하세요 채널톡 AI팀 아모스입니다! 이번 포스팅에서는 사용자의 입력의 일부만 주어졌을 때, 사용자가 어떤 말을 하고 싶은지 예측하는 문장 자동완성을 만드는 방법과 채널톡에 적용하는 과정에서의 성능을 개선한 방법을 공유하고자 합니다. --- 자동완성이란? 자동완성이라는 단어를 다들 한 번쯤은 들어 보셨을 거라고 생각합니다. 우리는 이미 자동완성을 사용해왔습니다(아래 예시 그림을 보면 아마도 한 번에 이해할 수 있습니다). 일상에서 사용되고 있는 자동완성의 활용 사례들을 생각해 본다면, 검색을 할 때 단어의 일부만 입력했는데 내가 말하고 싶은 단어가 등장하거나 메일을 보낼 때도 몇 단어만 입력을 했는데 내가 말하고 싶은 문장이 등장한 경험을 한 번쯤 해봤을 것입니다. 이처럼, 자동완성은 몇 개의 글자로 나머지 부분을 예측하는 기능을 말합니다. 이번 포스팅에서는 몇 개의 단어가 주어지면 다음에 나타날 단어들을 예측하는 문장의 자동완성에 대해서 공유를 하고자 합니다. 어떤 효과가 있을까

· amos

테크블로그 · 테크 인사이트 · AI

상담 대화로부터 자동으로 FAQ 추출하기

안녕하세요. 채널톡의 AI팀 제이브입니다! 이번 포스팅에서는 제가 처음 채널톡에 합류해 인턴 기간 동안 진행했던 FAQ 자동완성 프로젝트에 대해서 소개드리려고 합니다. FAQ가 생소하실 분들을 위해 간단하게 FAQ에 대해서 정리하고, 제가 맡았던 FAQ 자동완성 기능에 대해 설명드린 후 실제 FAQ 자동완성 샘플 결과를 보시면서 어느정도의 퀄리티인지 직접 확인하는 것으로 포스팅을 진행하려고 합니다! --- FAQ란? FAQ는 Freuquently Asked Questions의 약자로, 말 그대로의 자주 묻는 질문과 이에 대응하는 답변 문서 혹은 리스트를 의미합니다. FAQ는 정말 많은 곳에서 발견할 수 있는데요, 저희 채널톡에서도 채널톡 사용 방법을 돕기 위한 사용 가이드 문서에서도 FAQ를 제공하고 있습니다. FAQ는 주로 상품 등의 설명만으로 부족한 부분이 있어 고객들이 자주 하는 질문들을 취합해 사전에 제공하는 용도로 사용됩니다. 설명에서 이해가 어렵거나 헷갈리는 부분 등이 발

· Jave

테크블로그 · 테크 인사이트 · AI

Swift Composable Architecture 를 도입하며 겪었던 문제와 해결법

안녕하세요 🖐️ 채널톡 iOS 엔지니어 우디입니다. 채널톡 iOS 팀에서는 SwiftUI를 적극적으로 활용하고 있는데요. 준비 중인 신규 서비스는 SwiftUI와 TCA를 사용해서 개발하고 있습니다. 이번 포스팅에서는 TCA를 도입하며 겪었던 문제와 해결법에 대해서 공유하고자 합니다. --- TCA ( Swift Composable Architecture )를 도입하게 된 이유 팀 내에서는 Redux와 유사한 ReSwift를 주요 기술 스택으로 사용하고 있습니다. 단방향으로 처리되는 상태 변경, 편리한 상태 구독 등. Redux 패턴이 주는 여러 장점을 통해 복잡한 기능들을 간결하게 구현했습니다. 이후 신규 앱에 SwiftUI를 사용하면서 여러 아키텍처들을 고민하기 시작했습니다. 그 과정에서 ReSwift와 유사한 단방향 아키텍처 중 하나인 TCA를 채택하게 되었는데요. 도입하게 된 이유는 다음과 같습니다. --- 1. 상태 관리와 데이터 플로우를 일관된 구조로 작성할 수 있습니다 S

· Woody

테크블로그 · 테크 인사이트 · ios

@Transactional의 해로움

들어가며: 23.12.31 Database outage 새해를 하루 앞둔 12월 31일 자정을 얼마 지나지 않아, 채널톡 서비스에 약 15분 간 지속된 서비스 장애가 발생했습니다. 00:37 ~ 00:52 시간대에 메인 데이터베이스로 사용하고 있는 RDS의 성능이 크게 저하되었으며 메인 API 서버가 함께 영향을 받아 응답 속도가 크게 떨어졌습니다. 장애 알람을 받은 팀에서는 RDS restart를 진행했고, 데이터베이스 지표와 메인 서버의 지표는 바로 정상으로 돌아왔습니다. 장애가 발생한 시점은 주로 batch 작업을 진행하는 시간대였기 때문에, 급한 문제점이 해소된 이후 수행되었어야 할 작업의 정합성에 관해 팀에서 조사를 진행했습니다. 정합성 검사와 후속 작업을 통해 장애로 인해 영구적인 문제나 손실이 발생하지 않도록 챙겨주셨습니다. 연말 클로징 중이었음에도 불구하고 새벽 시간대에 대응해주신 팀원들께 감사의 말씀 드립니다! 메인 데이터베이스의 문제는 금방 서비스 전반에 대한 장애

· Dugi 🎈

테크 인사이트 · backend · 테크블로그 + 5

HACKY-TALKY 채널톡 챌린저스 2기 해커톤 후기

안녕하세요, 채널코퍼레이션에서 채용을 담당하고 있는 주니입니다. 채널코퍼레이션은 아시아에서 가장 빠르게 성장하는 B2B-SaaS IT스타트업입니다. 한국, 일본, 미국에 오피스를 두고 글로벌 테크컴퍼니로 나아가고있어요. 프로덕트가 매출의 가장 큰 동력인 만큼 전체 팀 멤버의 절반이 개발자로 구성되어있습니다. 채널팀은 지금보다 더 많은 소프트웨어 인재가 한국에 필요하다고 생각해요. 따라서 IT 인재 육성을 위해 대학생 개발 동아리를 후원하는 챌린저스 프로그램을 운영하고 있어요. 2022년 1기를 시작으로 2023년 2기는 7개의 동아리와 함께했습니다. - 고려대 DevKor - 고려대 KUCC - 서울대 SCSC - 서울대 멋쟁이사자처럼 - 세종대 En# - 연세대 YCC - 카이스트 SPARCS 챌린저스 활동의 일환으로 11월 10일 금요일 저녁 채널톡 오피스에서 해커톤이 개최되었는데요, 80여명의 학생들과 채널팀 엔지니어들이 함께했습니다! 이번 해커톤의 주제는 채널의 한국 오피스가

· Channel Talk

테크 인사이트 · 챌린저스 · 해커톤

[AI] 텍스트 임베딩의 소개 - 2편 문맥을 이해하는 텍스트 임베딩 (Contextualized Text Embedding)

텍스트 임베딩 1편에서는 임베딩에 대한 개념과 이를 딥러닝 모델로 학습한 단어 임베딩인 word2vec에 대해서 알아보았습니다. word2vec은 여러가지 장점이 있긴 하지만 어떤 문맥에 대해서 사용되었는지, 그리고 나오지 않은 단어에 대해서는 임베딩을 구하기도 어렵다는 것이 한계였습니다. 따라서 word2vec 같은 단순한 단어 임베딩 보다는 단어 그 자체가 아닌 단어가 사용된 문맥까지 반영해서 임베딩을 만드는 문맥 기반 단어 임베딩 (Contextualized Word Embedding)이 나오게 되었습니다. 딥러닝을 이용해서 텍스트 임베딩 모델을 학습하기 위해서 언어모델이라는 것을 학습하게 됩니다. 텍스트 임베딩은 언어모델을 학습하는 과정에서 얻어지는 부산물이라고 볼 수 있으며 때로는 언어모델 자체가 사용되는 경우도 매우 많습니다. 언어모델이라는 것은 말그대로 사람이 사용하는 언어를 수식을 이용하여 구조를 모델로 표현하는 것을 말합니다. 좀 더 자세히 설명하자면 어떤 문장이 주

· James

AI · NLP · 테크 인사이트

채널톡 탐정사무소

들어가며 안녕하세요, 백엔드팀 개발자 두기입니다 👋 이번 글은 저희 팀에서 최근 경험했던 여러 버그와 트러블슈팅 과정을 이야기하는 글로, 셀 내에서 CT (Committee) 문화를 통해 주기적으로 공유했던 내용을 스토리로 풀어내 보았습니다. 실제로 발생한 상황과는 디테일에서 차이가 있을 수 있고, 자세히 설명하지 못하고 넘어가는 부분에 대해서는 이해해주시면서 읽어주시면 감사하겠습니다. Thread-safe하지 않은 redis transaction 두기는 한 여름날 갑자기 간단한 counter를 application에 구현해야 할 일이 생겼습니다. 사용자가 일정 횟수 이상 잘못된 액션을 시도하면, 더 이상의 액션을 막는 메커니즘을 빠르게 적용해야 했기 때문입니다. 간단히 머리를 굴려 보니, 이것을 만들기 위해 RDB나 DynamoDB에 테이블을 만들기에는 너무 손이 많이 갔습니다. 기존의 사용례에서도 간단한 데이터형을 가지고 있고, 데이터 휘발이 치명적이지 않은 경우 Redis를 이

· Dugi 🎈

backend · 테크 인사이트 · java

NPM Publish A to Z (feat. Channel Web SDK Loader)

안녕하세요😊 채널톡 엔지니어 제프입니다. 이번 글에서는 고객용 메신저(Web SDK) 설치 스크립트를 NPM 패키지로 배포하는 과정을 공유하려고 합니다. --- 1. NPM 패키지 기본 설정 1-1. package.json 파일 생성하기 - package.json 파일을 통해 사용자들이 패키지 정보를 확인하고 쉽게 설치할 수 있습니다. - NPM registry에 배포된 패키지는 package.json 파일을 포함해야 합니다. - npm init command를 사용해서 기본 정보가 입력된 package.json을 생성할 수 있습니다. - 생성된 package.json을 바탕으로 나머지 세부 설정을 진행합니다. 1-2. 세부 설정 진행하기 name (required) "name": "@channel.io/channel-web-sdk-loader" - 패키지 이름입니다. - 소문자와 한 단어로 구성해야 하며, hyphen(-)과 underscore(_)를 포함할 수 있습니다. - sc

· Channel Talk

NPM · javascript · SDK + 1

[AI] 텍스트 임베딩의 소개 - 1편: 단어 임베딩

채널팀에 새롭게 생긴 AI 팀의 리더 James입니다😀 앞으로 채널의 다양한 서비스에 AI 모델들을 실험하고 적용하면서 사용되었던 이론들에 대해서 하나씩 블로그에 소개해 드릴 예정입니다. 첫 번째로 텍스트 임베딩이라는 개념을 소개드리고자 하며 이 개념이 앞으로 어떻게 채널톡에 활용될 수 있을지 공유드리겠습니다. 텍스트 임베딩 모델도 여러가지 종류와 쓰임새가 있지만 이번 포스팅에서는 텍스트 임베딩의 목적과 단어 임베딩에 대해서 먼저 소개드리겠습니다. 1. Structured data vs Unstructured data 세상에는 많은 데이터들이 있고 우리는 이 데이터를 이용해서 여러가지 정보를 얻고자 합니다. 데이터들 중에서는 분석하기 쉽게 엑셀이나 DB 등을 통해서 구조가 잘 정리된 데이터도 있지만 훨씬 많은 양의 데이터는 그렇게 예쁘게 정리가 되어 있지 않습니다. 우리가 보통 웹에서 얻을 수 있는 텍스트 데이터들; 뉴스, 블로그, SNS, 대화, 댓글, 소스코드 등 그 형식이 너무

· James

테크 인사이트 · AI · Embedding + 1

AWS SQS를 도입하면서 했던 고민을 소개합니다.

안녕하세요 👋 채널톡 엔지니어 두기입니다. 이번 글에서는 저희 팀에서 messaging queue로 AWS SQS를 도입하기까지의 과정과, 실제 운영하면서 있었던 일들에 대해 다뤄보겠습니다. Why messaging queue? 나날이 성장하는 팀에서는 항상 많은 트래픽이 들어올 때마다 조마조마합니다. 12만 개가 넘는 고객사에서 사용 중인 채널톡의 인프라에서 받아내야 하는 요청 수도 어마어마한데요, 가장 요청이 많은 end-user를 대상으로 하는 서비스의 경우 월간 약 50억 건, 낮 시간에는 초당 4~5천 건의 요청을 받고 있어요. 💡 또, 채널톡은 채팅을 중심으로 하는 제품이기 때문에 WebSocket을 통한 실시간 업데이트의 트래픽도 엄청난데요, 이것을 해결하는 여정을 다루는 다른 테크블로그 글도 읽어보시면 어떨까요? - 채널톡 실시간 채팅 서버 개선 여정 - 1편 : 레디스의 'Pub/Sub' - Socket.io Redis Adpater 구현을 통한 트래픽 개선 채널톡도

· Dugi 🎈

테크 인사이트 · 백엔드 · backend + 2

Channel JavaScript SDK 번들 경량화를 위한 전략과 도구

웹 애플리케이션의 자바스크립트 번들 경량화 작업은 페이지 로딩 속도를 높이고 사용자 경험을 향상시키는 데 큰 도움이 됩니다. 또한, 이는 네트워크 대역폭을 절약하고 서버 부하를 감소시키는 효과도 있습니다. 이 글에서는 Channel JavaScript SDK 번들 경량화를 위한 전략과 도구를 소개합니다. 1. dead code 제거 번들을 분석해서 미사용중인 코드와 라이브러리를 확인, 제거합니다. - ts-prune - Typescript project에서 미사용중인 export 문을 검사합니다. - CI flow에 추가해서 pre-commit 이나 pre-push 전에 dead code를 검사합니다. - webpack bundle anaylzer - 번들 구성 요소를 Tree Map형태로 시각적으로 확인할 수 있는 webpack plugin입니다. - 번들을 분석해서 사용하지 않는, 불필요한 라이브러리를 제거합니다. - DevTools > coverage tab - 사용되지 않은

· Channel Talk

테크 인사이트 · SDK · bundle + 1

AWS Cross-Accounts IRSA 적용기

들어가며 안녕하세요 👋. 저는 채널톡 데브옵스팀 탄토라고 합니다. 채널톡 개발팀에서는 내부적으로 여러 가지 개발환경 및 운영환경을 가지고 있는데요. 각 환경은 용도에 따라 여러 개의 AWS 계정에 걸쳐 운영하고 있습니다. 데브옵스팀에서는 여러 AWS 계정에 배포된 서비스들을 효율적으로 관리하기 위해 별도의 내부 서비스(이하 Dyrgo)를 개발하고 있습니다. 이 Dyrgo는 채널톡의 다른 내부 서비스들 대부분을 모니터링해야 하기 때문에 서로 다른 AWS 계정들의 리소스 및 EKS 클러스터에 대한 접근 권한이 필요합니다. 이러한 요구사항을 만족하기 위해서는 AWS IAM, K8s ServiceAccount 및 IRSA(IAM Roles for Service Accounts)을 잘 이해하고 설정해 주어야 하는데요. 권한 설정을 위해 필요한 지식들 및 저희가 사용한 방법을 이 글에서 공유해 보려고 합니다. 전체적인 구조 시작하기 전에 저희가 구성하려는 Dyrgo의 대략적인 구조도를 그려보면

· Tanto

테크 인사이트 · 채널톡 뉴스 · DevOps + 6

Socket.io Redis Adapter 구현을 통한 트래픽 개선

안녕하세요 채널톡 백엔드 엔지니어 어셔입니다. 이번 글에서는 socket.io redis Adapter의 pattern subscribe 구조를 개선하여 불필요한 트래픽을 줄인 경험에 대해 공유하려고 합니다. Socket.io Adapter Socket.iO Adapter란, 다중화된 socket.io 서버가 redis나 mongoDB 같은 다른 백엔드와 통신하기 위한 모듈입니다. export declare class Adapter extends EventEmitter { readonly nsp: any; rooms: Map<Room, Set<SocketId>>; sids: Map<SocketId, Set<Room>>; private readonly encoder; constructor(nsp: any); addAll(id: SocketId, rooms: Set<Room>): Promise<void> | void; del(id: SocketId, room: Room): Promise

· Asher

테크 인사이트 · 채널톡 뉴스 · 백엔드 + 5

We Make a Future Classic Product

채널팀과 함께 성장하고 싶은 분을 기다립니다

사이트에 무료로 채널톡을 붙이세요.

써보면서 이해하는게 가장 빠릅니다

회사 이메일을 입력해주세요