들어가며 Airbridge는 광고를 통해 유입된 사용자의 행동을 분석하고, 어떤 광고가 실제 성과로 이어졌는지 측정하는 서비스입니다. 이를 위해 광고 클릭과 앱 설치, 구매 같은 여러 이벤트를 실시간으로 매칭합니다. 이 과정에서는 이벤트를 빠르게 처리하는 것만큼 어떤 순서로 처리하는지가…
들어가며 안녕하세요. AB180에서 Airbridge 서비스의 DevOps 업무를 맡고 있는 정동호입니다. Airbridge 서비스가 커지면서 운영 중에 확인해야 할 신호도 함께 늘어났습니다. 장애를 더 빨리 발견하고, 담당자가 더 빠르게 대응을 시작할 수 있도록 Alert을 만드는 방…
개요 AB180은 AI를 단순한 개인 생산성 도구가 아니라, 조직의 업무 인프라로 다루고 있습니다. 그 시작점이 Slack에서 누구나 사용할 수 있는 사내 AI Agent, 에이봇입니다. 에이봇은 사내 지식과 업무 도구를 연결해 구성원이 더 빠르고 깊게 일할 수 있도록 돕습니다. 이 글…
들어가며 지난 몇 년 사이, 흥미로운 장난감 수준에 불과하던 AI 기반 개발 보조 도구들이, 함께 개발하는 동료 또는 그 이상으로 발전해 가고 있습니다. 이 글에서는 최근 AI 에이전트를 활용 경험, 그 한계 나아가 더 잘 사용하는 방법에 대해 이야기합니다. 나의 AI 개발 도구 활용…
들어가며 이번 글에서는 Airbridge 인증 서버에서 간헐적으로 응답 속도가 느려지는 현상을 분석하고 개선한 경험을 공유합니다. 문제 해결 과정에서 구조 개선을 함께 진행하여 간헐적인 응답 지연 문제를 해결했을 뿐만 아니라 트래픽 급증 상황에도 안정적으로 작동하는 인증 시스템을 구축할…
들어가며 수많은 데이터를 처리하는 '에어브릿지(Airbridge)' 서비스 특성상, AWS 인프라 비용을 잘 관리하는 것은 저희에게 매우 중요한 과제입니다. 사업 초기에는 성장에 집중하느라 비용 관리에 많은 리소스를 투입하기 어려웠지만, 회사가 성장하고 데이터 트래픽이 늘어남에 따라 비…
인턴십을 시작한 계기 저는 ICT 학점연계 인턴십 프로그램을 통해 AB180에서 인턴십을 시작하게 되었습니다. 원래는 4개월 예정이었지만, 업무와 배움이 흥미로워 2개월을 더 연장하여 결과적으로 총 6개월간 인턴십을 수행했습니다. AB180은 마케팅 솔루션을 제공하며, 다양한 기업의 성…
안녕하세요, Airbridge Report&Platform 팀에서 백엔드 개발자로 일하고 있는 박예준입니다. 저는 ICT 학점 연계 인턴십 프로그램을 통해 AB180에서 처음 실무 환경에 발을 디뎠습니다. 개발자라는 꿈을 현실로 마주한 첫 순간이었고, 동시에 제가 어떤 방향으로 성장하고…
Geon Kim — 김건 @KimMachineGun 들어가며 배경 지난 글에서 소개해드린 작업을 통해 Luft의 아키텍처를 Shared Nothing(각 노드가 모든 자원을 독립적으로 관리하는 구조)에서 Shared Storage(각 노드들이 독립된 컴퓨팅 자원을 사용하되, 공통 스토리…
Geon Kim — 김건 @KimMachineGun 들어가며 본 <Luft’s Road to Elasticity> 시리즈에서는 지난 1년간 Luft의 성능 향상과 비용 절감을 위해 시도한 스케일링 최적화에 대해 이야기를 나눠보고자 합니다. 시리즈는 총 두 편의 글로 이루어져 있으며, 이…
하나의 레포에서 여러 컴포넌트 배포, 어떻게 더 잘할 수 있을까? Changkyu Kim — 김창규 @glenn-kim 안녕하세요. 데이터 파이프라인 팀에서 광고 데이터 처리를 담당하는 김창규입니다. 우리 팀에서는 목적에 따라 여러 컴포넌트를 유지보수하고 있는데, 가능한 언어별로 하나의…
배경 Luft 워크로드 OLAP 데이터베이스인 Luft는 독특한 워크로드를 처리합니다. 성능과 부하 측면에서 살펴보면, 대시보드용 데이터 생성과 배치 처리 작업 등을 위해 다양한 쿼리를 수행하는데, 이 처리량은 시간대별로 매우 유동적이고 예상하기 어렵습니다. % 로 표기한 Luft 시간…
적절한 공수로 Throughput 을 많이 끌어올릴 방법은 없을까? Juho Choi — 최주호 @juho 들어가며 Airbridge 에는 마케팅 데이터를 다양하게 분석할 수 있는 여러 종류의 Report 가 있습니다. 이 중 Actuals Report 는 가장 기본적이면서 가장 많은…
배경 문제 하지만 현재 Luft 쿼리 성능으로 더 많은 유저에 대한 리텐션을 집계하기 어렵습니다. 물론 수평 확장이 가능한 디자인으로 개발되었기 때문에 무수히 많은 EC2 인스턴스를 사용한다면 불가능하지 않지만 비용 관점에서 현실적이지 않습니다. 더 자세히 설명하면 스타트 이벤트 설정을…
빠르게 변하는 환경에서도 모니터링이 코드를 더럽히지 않게 만들기 Youngmin Shin — 신영민 @holyachon 1. 도입 배경 모니터링은 개발자에게 중요한 요소 중 하나입니다. 대부분의 엔지니어는 크게 두가지 항목에 대해 모니터링을 고려합니다. 먼저 CPU, Memory Uti…
Luft는 복잡한 OLAP 워크로드를 빠르고 효율적으로 처리하기 위해 설계된 데이터베이스 관리 시스템으로, 다양한 알고리즘과 기술을 적용하여 사용자의 쿼리를 신속하게 해결해 왔습니다. 그러나 특수한 대형 쿼리에 대해서는 아직 적절한 해결책을 찾지 못했습니다. 이 문제를 극복하기 위해,…
직렬화 포맷과 압축을 통해 용량 절약하기 Byeonghoon Yoo — 유병훈 @isac322 디퍼드 딥링크 기능 제공을 위한 Elasticache의 메모리 사용량을 52%, 비용을 66% 절약하는 최적화 작업을 설명합니다. 최적화 대상을 찾은 과정부터 실제로 Elasticache 이주…
Golang으로의 마이그레이션 과정에서 인수 테스트를 활용했던 경험 Jaewon Kim — 김재원 @j1king • 성능, 강타입 언어 등의 이점을 누리기 위해 거대한 레거시 시스템을 Python에서 Go로 마이그레이션 했던 경험을 간단하게 소개합니다. • 마이그레이션 검증 과정에서 큰…
상황을 고려한 엔지니어링으로 검색 속도 개선하기 Wonbin Ha — 하원빈 @wonbin 문제의 인식 트래킹링크는 유저가 발생시킨 데이터를 수집하는 에어브릿지의 핵심 기능입니다. 대시보드에서는 매일 약 10만개씩 생성되는 트래킹링크에 대해서 조회 및 검색 기능을 제공하고 있습니다. 처…
1. 성능 향상의 필요성 고성능 애플리케이션을 통해 우리는 고객에게 탁월한 기능을 경쟁력 있는 비용으로 제공할 수 있습니다. 특히 AB180의 경우, 대규모 사용자 데이터를 신속하고 효율적으로 처리해야 하므로, 성능향상은 더욱 중요한 가치를 가집니다. 개발과정에서 우리는 성능이 의사결정…
패키지 매니저를 바꾸고 1년 동안 사용해보며 든 생각들 Chanhee Lee — 이찬희 @hiddenest 이번 글에서는 Yarn에서 pnpm으로 옮기기로 한 이유, pnpm의 도입을 통해 얻은 장점 등을 간략하게 이야기해드리려고 합니다. 1/ Yarn PnP가 Git에 지속적으로 주는…
Luft, TrailDB 그리고 Ziegel AB180 은 유저행동 분석을 위해 Luft 라는 OLAP 데이터베이스를 직접 구현해 사용하고 있습니다. 그리고 Luft 데이터 저장을 위해 지금까지 TrailDB 라는 오픈소스 스토리지 엔진을 사용하고 있었습니다. 지난 4개월 간 성능향상을…
satisfies 키워드란? 왜 필요한가? “satisfies” 키워드는 literal (값) 이나 변수를 안전하게 upcast 하는 기능을 수행합니다. 그런데 이게 어떤 것을 의미할까요? 먼저 아래 예시의 코드를 봐주세요. const variable = 10 TypeScript 복사…
Postback 이야기 모바일 마케팅에서 Postback은 매우 중요합니다. 광고 매체에서는 앱 설치 또는 앱 내 전환을 유도하기 위한 광고들을 지면에 띄우고, 광고를 클릭하는 것까지는 추적할 수 있습니다. 하지만, 앱 스토어나 앱 내로 이동한 뒤의 데이터는 앱에 광고 매체의 SDK가…
Airbridge 개발팀 QA Engineer로 일한다는 것은 Soeun Choi — 최소은 아무리 멋진 기능이 많은 프로덕트라도, 유저가 사용할 때마다 에러가 발생한다면 과연 좋은 프로덕트라고 할 수 있을까요? 고객사 개발자와 고객사의 서비스 이용자가 에러를 마주하지 않도록, AB18…
원인 모를 문제를 해결하고 ‘위너위너 치킨디너’ 하는 방법 Chanhee Lee — 이찬희 @hiddenest 복잡한 환경과 원인을 알 수 없는 문제 개발을 하다 보면 도저히 원인을 알 수 없는 문제를 만나고는 합니다. 특히 웹 프론트엔드는 조금 더 꼬여있어서, 서버의 상태 외에도 브라…
개요 AWS ECS는 꽤 편리하고 생각보다 여러 곳이 사용하고 있는 운영 환경입니다. 그런데도 클라우드 환경에서는 매우 중요한 Auto Scaling과 관련하여 아쉬움이 많았던 서비스인데요. 트래픽이 갑자기 spike 치는 일이 종종 발생하는 Airbridge 워크로드에서는 고통이 꽤…
에어브릿지(Airbridge)는 다양한 플랫폼 환경에서 광고의 성과를 분석하고 측정하기 위한 데이터를 자동으로 수집하고 이를 서버에 전달하기 위한 SDK를 제공하고 있습니다. 이런 SDK는 1억대 이상의 디바이스 안에서 하루 10억 건에 달하는 데이터를 수집하고 있기에 어떤 환경 속에서…
하루 100억 트래픽도 끄떡없는 시스템을 만드는 팀으로 Soeun Choi — 최소은 AB180이 직접 개발한 마케팅 성과분석 소프트웨어 에어브릿지는 200개가 넘는 고객사의 마케팅 데이터를 실시간으로 수집, 처리하고 있습니다. 비즈니스의 성장에 따라 분당 100만건, 하루 10억건이…
Monorepo 도입 배경 SaaS를 만들어 고객에게 제공하는 과정에서 한 개로 시작한 컴포넌트가 필요에 따라 여러 개로 나누어져 관리되는 경우를 흔히 볼 수 있습니다. 이렇게 나누어진 컴포넌트 사이에는 연관관계가 생기고, 때로는 하나의 컴포넌트가 다른 컴포넌트에 의존성이 생기기도 합니…
• Airbridge 서비스와 Workload 소개 ◦ Daily 1B 이벤트 수집, 처리한 것을 Dashboared에 제공 ◦ Dashboard에서는 고객의 다양한 Needs를 빠르게 구현하고 안정적으로 제공해야하는 미션을 가짐 • Airbridge API 운영 환경 ◦ Python,…
입에 쓴 좋은 약, Review AB180에서는 다양한 review를 합니다. 작성한 코드에 대한 review, Tech spec에 대한 review, 좀 더 넓은 관점에서는 회고, 동료 평가 등이 있습니다. 단어 뜻 그대로 다시 한번 보면서(review) 더 좋은 방법은 없는지, 잘못…
스타트업에 있다 보면 “우리 회사는 일하는 체계가 없다“ 라는 이야기를 심심치 않게 듣습니다. 일하는 방식이 정해져 있지 않고, 그때그때 구두로 내려온 일을 쳐내기 급급하다는 불만을 같이 토로하기도 합니다. 일을 잘하기 위해 글을 찾아보면 ‘개발을 잘하고 커뮤니케이션을 잘하자’라는 좋은…
개발 경험과 확장성. 두 마리 토끼를 잡기 위한 마이그레이션 경험기 Chanhee Lee — 이찬희 @hiddenest 로컬에서 빌드를 돌리다보면 느린 속도에 답답함을 느끼곤 합니다. 많은 이유가 있지만 하나만 꼽는다면 기능이 늘며 코드 베이스가 큰 폭으로 증가했기 때문입니다. 당장 서…
Intro 몇 년 전만 해도 Serverless 라는 것은 생소한 개념이었는데 이제는 많은 곳이 활용하는 기술이 됐습니다. 그렇지만 여전히 많은 분이 익숙하지 않은 기술이기도 합니다. Serverless는 말 그대로 항시 서버를 띄워두지 않아도 자동으로 infra가 provision 되…
IAM 최소권한 정책 처음 AB180 백엔드팀에 들어왔을 때 AWS 상의 거의 모든 권한을 가지고 개발할 수 있었습니다. 어떻게 개발자한테 모든 권한을 줄 수 있냐! 라고 할 수 있지만 제가 입사할 당시에 백엔드팀이 10명 남짓했고 스타트업의 특성상 개발자 한 명이 여러 가지 업무를 할…
Intro 모니터링을 위해 Log를 잘 수집하고 볼 수 있게 만드는 것의 중요성은 모두가 동감할 것입니다. 문제가 생겼을 때 볼 수 있는 것은 Log와 metric뿐이기 때문입니다. 그래서 시중에는 다양한 솔루션들이 존재합니다. AWS에서는 CloudWatch 서비스 아래에서 metri…
• Airbridge 서비스와 Workload 소개 ◦ 데이터 처리 순서가 중요한 workload ◦ 실시간 처리 결과 제공 • 기존 아키텍처의 문제점 ◦ consumer마다 처리하는 partition 수가 달라질 수 있는 불균형 문제 ◦ Workload에 의해 특정 partition에…
야생의 Jinja template을 리팩토링 하기 Geon Son — 손 건 @jen6 • 고객사의 브랜딩을 표현할 수 있는 로고와 타이틀 노출 • 광고를 본 유저가 웹에서 앱으로 매끄럽게 이동하도록 딥링크 시도 이번 글에서는 Jinja template의 매크로 기능을 사용해 복잡한 템…
Alarm을 잘 활용하기 위해서는 alert channel 설정이 필수적입니다. 보통 업무용으로 slack을 쓰는 경우가 많기 때문에 많은 팀이 alert channel으로 slack을 이용합니다. 하지만 그 연동 작업에 불편함이 컸었는데요. AWS Chatbot 서비스를 이용한 개선에…
에어브릿지가 직접 개발한 OLAP DB, Luft에 대해 소개합니다. Hyojun Kim — 김효준 @therne 코호트 분석 기능? 코호트 분석은 원하는 유저군 (= 코호트)을 잡아서 해당 유저들의 행동을 분석하는 기법입니다. 예를 들어 "지난 6개월간 우리 앱에서 한달에 10만원 이…
한 회사의 문화와 성장을 언어로서 정리하며 Chanhee Lee — 이찬희 @hiddenest 3년 넘게 일하면서 가장 힘든 것이 ‘사람들에게 회사 소개하기’라고 말하면 웃을지도 모르겠다. 예전에 한 번 처음 뵙는 분께 아래와 같이 회사 소개를 한 적이 있었는데, 그 뒤에 자연스럽게 사…
Kubernates에 Pod 기반의 IAM Role 접근 제어 통합하기 Hyojun Kim — 김효준 @therne 왜 Kiam인가? Kiam의 구조 kiam은 마스터 노드에 붙는 서버와 각 노드에 붙는 에이전트로 나뉘어진다. 파드에서 어떤 IAM Role을 쓰고 싶을땐 어떻게 할까?…