if(kakao AI) 2024
AI Finance Tech (정규돈, 김동용, 신재홍, 이어형)
- 카카오 정규돈, 카카오뱅크 신재홍, 카카오페이 김동용, 카카오엔터프라이즈 이어형
카카오뱅크의 AI Ecosystem - CTO 신재홍
- 카카오뱅크의 AI 혁신 적용
- 신분증 OCR, 영상통화 안면인식 등 AI 적용
- FDS 속도 최대 10배 향상
- FDS XAI 가속화 알고리즘 적용
- 무자각 인증, 안면 위변조탐지기술 적용
- 금융특화 언어모델 개발 > 고객센터 챗봇 적용
- AI infra
- GPU 와 같은 고성능 시스템 인프라 구축
- MLOps 구축하여 AI 모델의 생애주기 관리
- AI Division
- AI 사업 & 기술 총괄 부서 창설
- 자체 AI 서비스 개발
- AI 경영시스템 국제 표준 & 건버넌스 관리
- AI Product
- AI Hub 를 통해 임직원 역량 강화
- AI 품질 자체 검증
- AI 통해서 고객의 우수한 경험과 안정성을 보장하고자 한다.
카카오페이의 AI, 신뢰할 수 있는 금융 파트너 - CTO 김동용
- 카카오페이는 거래수와 거래액 지속적인 성장
- AI 를 통해 고객의 자산 보호, 신뢰성 제공
- FDS / ADS 를 통해서 고객 서비스 안정성 제공
- 높은 성능의 탐지 기능이 필요한 FDS 서비스르 AI 를 활용하여 자체 서비스 개발하는 듯
- 금융 비서를 통해서 금융 데이터를 수집하고 정보 제공
- MoE : Mixture of Experts
- 사용자가 필요로 하는 전문가는 선택하여 서비스 제공
- 보험 진단 서비스
- 보험진단AI 를 통해서 고객 정보를 수집하여 필요한 보험 추천 / 서비스 제공
- 카카오페이를 모든 금융 서비스의 중심으로 만들고, AI 기술을 통해 안정성을 보장하고자 한다.
카카오엔터프라이즈, Beyond the Cloud - CTO 이어형
- 카카오클라우드 소개
- 후발주자이지만, 기존 서비스의 단점을 보완
- 카카오클라우드의 성능은 해외 클라우드 서비스랑 비슷하고, 국내 서비스보다는 높은 성능 자랑
- AMD 고집적 서버 개발을 통해 고성능 VM 안정적인 서비스 제공
- Xilinx 네트워크 가속화 하드를 통해 높은 성능의 VM 서비스 제공
- Multi AZ 구성을 통해 안정적인 서비스 제공
- 다른 클라우드와도 손쉽게 연동 가능: 고성능 네트워크 기반이기에 가능한 듯
- 금융기관의 private cloud 나 on-premise 환경과도 높은 네트워크 성능 보장
- ISO, CASP, ISMS 안정성 평가 완료
패널톡 Q&A
- 카카오페이 - FDS, ADS와 Adaptive ML
- 모든 사람을 타켓팅하여 검사하는 것이 아니라 정밀도를 높여서 정확한 타켓을 선정하고 검사하도록 Role 과 ML 를 적절하게 섞어서 탐지 서비스 구축
- 금융 서비스 특성상 실시간으로 데이터가 변화하기 때문에, Batch 의 실행 주기가 거의 realtime 수준으로 짧은 주기가 될 수 있다.
- 카카오페이 - 금융비서와 MoE
- 전문 분야의 AI를 별도로 구성하여 LLM 관리
- 금융 전문가의 데이터를 전체적으로 정리하고 LLM 학습
- 카카오뱅크 - GenAI 가드레일
- GenAI 를 보호하는 기술적인 장치
- 부적절한 컨텐츠가 LLM 에 인입되는 것을 방어
- LLM 의 잘못된 답변 필터링
- 여러가지 자체 컴포넌트를 통해서 기술적으로 LLM 가드레일 개발
- 카카오뱅크 - XAI
- 금융 서비스 특성상 XAI 의 필요성 높아지고 있다.
- 카카오뱅크 - LLM
- 금융혁신기술 통해서 LLM 적용 가능
- 카카오엔터프라이즈 - 고성능 VM
- VM 생성 시 발생할 수 있는 CPU 경합 문제로 성능에 대한 고민 끝에 AMD 협업을 통해 고성능 VM 제공
- 해외 클라우드 서비스와의 경쟁력을 위해 하드웨어 연구 개발에 더 집중
- 카카오엔터프라이즈 - Sovereign Cloud
- 다양한 서비스를 벤치마킹하여 경쟁력을 키우고 있다.
마무리
- 카카오페이 - AI가 나오므로 개발자로서는 코딩보다는 시스템 아키텍처로서의 역할이 커질 것 같다.
- 카카오뱅크 - 금융 도메인에서 AI 기술을 초기 단계이지만, 카카오뱅크는 혁신적이 서비스 개발 예정이다.
- 카카오엔터프라이즈 - 카카오클라우드 기억해주세요.
AI Life Tech (정규돈, 김기범, 장성욱, 유창국)
카카오엔터테이먼트 - CTO 김기범
- Persona 페르소나를 아티스트들에게 어떤 영향을 줄 수 있을지 함께 고민
- 멜론 : 생성형 AI를 통해 고객을 이해하고, 노래 추천할 수 있도록 개발 진행
- 웹툰 : AI 를 통해 Shorts, 번역 등 다양한 서비스를 개발 진행
카카오모빌리티, 일상 속 AI Device - 미래이동연구소장 장성욱
- AI 기반의 자율주행, 로보틱스 서비스 소개
- 자율주행 서비스
- 태스트 관리, 디지털맵, 관제시스템 및 운영 노하우, 데이터와 알고리즘 4가지 기준으로 AI 서비스 접목하여 개발 집중
- Edge case 데이터 취득 및 활용
- 수많은 데이터를 수집하고, 사진 합성을 통해 다양한 케이스를 활용하여 AI 학습 진행
- 차량 인프라 > 데이터 처리 > AI 학습 > OTA 차량 적용
- 서비스 로봇
- 한개의 로봇으로 다양한 배달 서비스를 제공
카카오헬스케어, 모두를 건강하게 - CTO 유창국
- 많은 경험의 문제를 해결하자. 고객의 경험을 드라마틱하게 바꿔보자.
- Pasta 서비스
- 라이프 레시피를 제공하는 서비스
- 생활 습관을 바꾸기 위한 라이프 레시피를 추천
- “귀찮음을 편리함으로” 바꿔서 잔소리를 나이스하게 하는 헬스케어앱으로 발전
- 사진을 촬영하면 AI 를 통해서 자동으로 식단 기록
- 음성을 통해서 자동 생활 기록
- 챗봇을 통해서 질의 답변 처리
- AI 를 통해서 헬스케어앱의 접근성을 높이도록 노력하였다.
패널톡 Q&A
- 카카오엔터테인먼트 - 카카오엔터테인먼트 IP
- 카카오엔터테인먼트의 수많은 아티스트들의 IP에 대해서는 저작권 규제로 인한 시기 상조
- 카카오엔터테인먼트 - Helix Shorts
- 3주 > 3시간 작업으로 단축하여 사람의 일하는 방식과 삶의 변화에 큰 영향
- 하이엔드 작업은 사람이 하지만, 간단한 제공 서비스를 AI 작업으로 전환
- LLM 발전을 가정하고, LLM 활용을 잘하는 방법에 집중
- 카카오엔터테인먼트 - 캐릭터 페르소나
- 버츄얼 아이돌이 노래도 하고, 팬들과 소통도 하는 캐릭터를 AI 로 개발
- 카카오모빌리티 - 자율주행
- 서울에서 상용 중인 자율주행 택시에 대한 이용률과 재이용률 향상
- 세이프티 드라이버가 동반 탑승
- 자율주행 기술에 대한 이해도와 함께 AI 적용으로 개발 발전 예정
- 해외 업체와는 경쟁사보다는 협력사로 발전 예정
- 카카오모빌리티 - 서비스로봇 브링
- 현재는 실내 위주로 서비스하지만, 실외도 준비중
- 카카오헬스케어 - Seamless한 경험 제공
- 파트너사 협업을 통해 혈당 데이터 수집을 통해 물리적인 디바이스를 통해 헬스케어앱으로 바로 데이터 수집 가능
- 카카오헬스케어 - 파스타 인사이트
대용량 트래픽 아니면 안보셔도 됩니다! 선물하기 서비스 캐싱 전략 (카카오 - 이희관, 이세희)
- 개선 배경
- 평시 기준 10배, 이벤트 기간 기준 3배의 트래픽으로 서비스 장애 발생
- 조회 성능을 위해 캐시를 적용
- 캐시 데이터 만료되는 경우, 그대로 트래픽이 다른 서비스로 흘러가는 현상 발생 > Cache Stampede
- Cache Stampede 방지 전략
- TTL 증가
- 상품 정보인 경우 캐시 TTL 길다면, 사용자 경험 저하
- 만료 캐시 갱신 처리 로직 분산락 사용
- 하나의 캐시 갱신 처리만 처리될 수 있도록 분산락 사용
- 하지만, 다른 요청은 응답 지연 발생
- 캐시 WarmUp
- 별도의 Batch 를 통해서 캐시가 만료되기 전에 캐시를 미리 갱신
- 1분 주기의 Batch 를 통해서 상품정보를 자동 갱신
- 캐시 서버 IO 로 인한 지연 발생
- 캐시 웜업 서버 목록 누락으로 Cache Stampede 발생
- TTL 증가
- Hybrid Cache
- 개인화 데이터가 아니고, 업데이트 빈도가 낮고, 데이터 크기가 작고, 조회 키 범위가 낮은 캐시 정보는 로컬 캐싱 처리
- 로컬 캐시인 경우, 자주 사용하는 데이터를 캐싱 처리
- 글로벌 캐시인 경우, 최신 상태 데이터 저장, 캐시 데이터 중앙 관리 형태로 사용
- 로컬 캐시에 데이터가 있는 경우, 글로벌 캐시 조회 하지 않음
- 하이브리드 캐시는 네트워크 비용 감소 효과
- 데이터의 일관성 보장 문제 해결
- Zookeeper 활용
- 서버 간의 동기화를 위한 분산 오케스트레이션(?)
- Watch 기능을 이용해 서버 변경 이벤트 감지
- 변경된 timestamp 를 key 로 Zookeeper 노드 관리
- Zookeeper 활용
- Auto Cache WarmUp
- 캐시 데이터 변경 누락을 방지하기 위한 전략
- PER 알고리즘 : 일정 시간이 지나면 캐시가 스스로 갱신하는 알고리즘
- 캐시 갱신 여부가 캐시 만료되기 전 요청에 대한 의존성 문제
- 요청되지 않는거나, 중복 요청인 경우 캐시 갱신 비용으로 지연 발생
- 캐시 갱신 시간이 유동적인 문제
- 캐시 갱신 여부가 캐시 만료되기 전 요청에 대한 의존성 문제
- 캐시 웜업 자동화 방식
- HOT 프로모션 상품의 페이지를 자동 캐시 웜업 적용
- HOT Promotion Collector: 회원이 자주 요청하는 페이지 조회 요청의 ID 값을 이용하여 HOT 프로모션 상품을 타켓팅
- 원격 저장소, 인메모리 저장소, 자원 리소스 => 레디스 선택 사유
- SortedSet 사용하여 HOT 프로모션 페이지 랭킹 저장
- Key Swap 방지를 위해 시간대 별로 페이지 ID 별 호출 건수 Hash 캐시 저장
- 가중치를 계산하여 HOT 프로모션 상품 자동 캐시 웜업 우선순위 결정
- 레디스 부하 분산을 위해 로컬캐시 활용
- 로컬 캐시에 임시 데이터 저장
- 임시 데이터틀 HOT 프로모션 콜렉터로 전달
- HOT 프로모션 컬렉터에서 레디스로 캐싱 처리
- 초 단위 Cache WarmUp
- 캐시 웜업 1분 단위에서 초 단위로 변경 전략
- 초 단위 트리거를 RabbitMQ 활용
- RabbitMQ 메시지 처리가 강력한 브로커로, Dead-Letter Queue 활용하여 초 단위 트리거 전략
- 발행된 메시지를 1초 뒤에 만료되게 하여 DL Queue 로 전달하면 DL 컨슈머에서 메시지 처리 전략
No Silver Bullet!
- 정답은 없지만, 문제 해결을 위한 고민과 노력으로 정답을 찾는 것이 중요하다
카프카, KRaft를 만나다: 주키퍼 없이 운영하는 카프카의 실전 운영 노하우 (카카오 - 심현준)
- 개선 배경
- KRaft 버전 3.3.1 > 3.8.0
- KRaft 모델 클러스터 준비 계획
- 주키퍼 없는 카프카
- Zookeeper Ensemble & Kafka Cluster 를 별도 인프라 구성하여 관리
- 주키퍼의 한계
- 카프카 내부 네트워크 이슈로 데이터 적합성 꺠지는 현상 발생
- 주키퍼와 카프카 연결 네트워크 이슈 발생
- KRaft Mode
- Raft 알고리즘으로 분산 오케스트레이션 가능한 Kafka 관리 모드
- 카프카 클러스터 안에서 분산 처리 가능
- 네트워크 이슈 해결 가능
- 신속한 컨트롤러 장애 조치 가능
- 주키퍼 대비 월등한 복구 속도 제공
- 구성 과정
- Dev 1년 정도 실험 거쳐 CBT 테스트 후 PRD 배포
- 주키퍼 기반 설정 > KRaft 기반 설정 변경
- kafka-ui, kminion 관리 도구 변경
- 관리 도구 네트워크 지연 감소
- kafka 내부 버그 이슈로 1년 정도 Dev 에서만 사용
- 발전 과정
- 벤치마크 & 워크로드 도구 : trogdor
- 카프카 모니터링 : jmx-?
- 안정성 테스트
- Trogdor 로 극심한 부하 유발
- 파워플러그 & 네트워크 단절 복구 케이스별 성능 테스트 진행
- 벤치마크 테스트
안정성과 유연성을 겸비한 카카오뱅크의 On-Premise Kubernates 구축 여정기 (카카오뱅크 - 김동현)
- 카카오뱅크의 쿠버네티스
- 2023년 온프레미스 쿠버네티스 환경 구축 > k17s
- 경영(비금융) 지원망 / 금융 운영망
- 네트워크 구간별 분리된 많은 클러스터 존재
- Helm을 이용한 IaC
- Infra as 쿠버네티스 관리 시작
- Helm 차트를 만들어서 쿠버네티스 관리
- 프로비저닝 도구
- hele 차트를 통해 새로운 클러스터를 생성하고 설정 파일은 yaml 파일로 관리
- 아르고 도구를 통해서 클러스터 모니터링
- ClusterAPI
- 클러스터 프로비저닝 도구 활용
- 클러스터 노드 증설 등 관리 API 제공
- Multiple Machine Provider
- Helm 차크를 표준 환경에 맞춘 표준 패키지로 구성
- GitLab + Argo CD + k8s 기반 CI/CD 환경 구축
- 네트워크 장치 또한 쿠버네티스 기반으로 설정 조작하도록 환경 구성
- 금융 컴플라이언스와 보안
- 전자금융감독규정 컴플라이언스 준수 운영 필요
- Kyverno 기반 Admission Controller
- kubectl 요청 시, kube-apiserver 에서 인증/검증 단계를 통해 webhook 을 통해 명령어를 검사
- Cilium 기반 Network Security
- 쿠버네티스 네트워크 정책보다 Ciliumn 네트워크 정책 넓음 범위 제공
- Packer, Ansible 기반 쿠버네티스 클러스터 관리
- 클러스터 파이프라인을 통해 노드 취약점 등 컴플라이언스 취약점 조치
- 신속한 쿠버네티스 클러스터를 생성 가능
- Hikube 기반 접근 제어
- 클러스터 접근 권한 제어
- 앞으로의 계획
지연이체 서비스 개발기: 은행 점검 시간 끝나면 송금해 드릴게요! (카카오페이 - 박소현)
- 레거시 시스템 > 신규 아키텍처 시스템 적용 경험 공유
- 카카오페이 지연이체 서비스
- 은행 점검 시간 이후 송금하도록 지연 이체 서비스 제공
- 메시지 큐 인프라 변경 RabbitMQ > Kafka (전사적인 메시지 브로커를 카프카로만 사용하겠다고 공지!!)
- New 아키텍처 찾아서
- 지연이체 서비스 유지된 채 새로운 아키텍처 적용
- 각기 다른 은행 점검 시간에 맞춰서 지연 이체 처리 필요
- 은행 점검 시간 기준으로 5분마다 Batch 수행으로 송금 실행 예상 시간에 이체 처리
- 한번에 5천건이 넘는 이체 처리 필요
- 스케쥴러 갯수를 늘리면 데이터 중복 발생하고, 백단 서비스 서버 부하 발생
- 카프카 적용으로 문제 해결!
- 스케쥴러에서 카프카로 지연이체 요청 발행
- 메시지 수신하여 지연 이체 처리
- 하지만,
- 처리 지연으로 카프카로 같은 데이터가 메시지로 발행 문제 발생
- 같은 데이터가 중복 발행된 메시지가 다른 컨슈머에서 처리 가능 문제 발생
- 같은 데이터의 중복 메시지 문제 해결을 위해 레디스 기반 글로벌 분산락 사용하여 문제 해결!
- 하지만, 분산락으로 발생하는 송금 실패 다수 발견
- 같은 고객의 데이터의 중복 메시지는 같은 컨슈머에서 처리하도록 설계
- 스케쥴러에서 카프카로 발행 전 레코드 값에 고객 정보를 추가하여 동일한 파티션으로 메시지 분류되어 컨슘 처리
- 릴리즈 해프닝과 빠른 롤백
- 지연 이체 시스템 배포 후 20분 예상 시간 > 70분으로 증가하는 이슈 발생
- 기존 시스템 > Zuul Proxy > 신규 시스템 으로 가도록 하는 아키텍처를 통해서 빠른 롤백 처리 가능
- 컨슈머 단일 데이터 처리로 인한 처리 성능 지연 발생 원인!
- 파티션 또는 컨슈머 갯수 조정하는 것은 무의미
- 컨슈머의 동시 처리 기능을 추가한다고 하더라도 파티션 갯수 때문에 무의미
- 컨슈머에서 비동기 처리 기능을 추가하기 하더라도 단건 메시지 처리 방식 때문에 무의미
- 지연 이체 시스템 배포 후 20분 예상 시간 > 70분으로 증가하는 이슈 발생
- 실행 속도 부스트업하기
- 컨슈머 대수를 2대 > 3대 증설
- 컨슈머에서 Batch Size 만큼 다건 메시지 처리하도록 개선
- 다건 메시지 수신하여 멀티-스레딩 병렬 처리
- 처리량 800% 증가, 실행 속도 8배 향상
- 아키텍처 설계 시
- 중복 데이터 발생
- 동시 처리 발생
- 롤백 전략
- 성능 최적화
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우 (카카포페이 - 양세열)
- 매년 10억 넘는 결제 트랜잭션 처리
- 피할 수 없는 동시성 이슈
- 공유되는 자원을 접근하고 처리 시스템을 고질적인 이슈: 동시성
- Lost Update 이슈 발생
- 동시성 이슈 해결사! 분산락
- DB 락으로만 해결하기 위해서는 무리가 있으며, 분산락 적용 추천
- 분산 락: 분산된 여러 시스템이 하나의 공유 자원을 안전하게 접근할 수 있도록 락 처리
- 먼저 락을 획득한 시스템 외 다른 시스템의 요청은 락 대기 상태 후 락 획득하고 서비스 기능 처리
- 동시 들어오는 요청을 순차적으로 처리하면서 Lost Update 이슈 해결 가능
- 카카오페이의 분산락 적용
- 하나의 서비스 로직 처리에도 여러 개의 분산락을 정의하여 관리
- 일반적인 분산락
- 스프링 AOP 활용한 분산락 처리
- 마킹 애노테이션 + 분산락 Aspect + 적용 메서드
- AOP 분산락의 불편한 점
- 적용 여부 확인
- 컴파일 타임 체크 안되기 때문에 런타임 시 에러 발견
- private 함수에는 분산락 적용 불가
- Key 파라미터 적용
- SpringEL 이기 떄문에 key 파라미터 설정 파악이 어려움
- 락 장시간 점유 성능 저하
- 메서드 전체에 락이 필요 없는 경우, 전체 메서드 락 적용으로 성능 저하 가능
- 기능 수정 및 리팩토링 어려움
- 파라미터 순서가 달라지거나 하면 장애 발생 가능
- 적용 여부 확인
- 스프링 AOP 활용한 분산락 처리
- 우아한 분산락 노하우
- 함수형 프로그래밍을 활용한 우아한 분산락 전략
- 분산락 데코레이션 함수를 활용!
- redissonClient 를 사용하여 락할 수 있는 별도 함수를 정의
- 분산락이 필요한 기능별 데코레이션 함수 개발 필요
- 애노테이션으로 함수 전체 락 설정이 아니기 때문에 함수 내 락이 필요한 영역만 락 가능!
- 우아한 분산락 개발을 통해 성능과 유지보수성을 모두 잡을 수 있었던 좋은 경험이었다.
카카오 빌링 MySQL DB 샤딩 적용 (카카오 - 권세원)
- 카카오빌링 소개
- 빌링: 마트의 계산대의 역할
- PG 연동하는 시스템
- 외부 시스템 연동 인터페이스 많다.
- 금융 관련 민감 정보가 많다.
- 규제/감사 많다.
- 강성 클레임이 많다.
- 2024년 망분리/대통합 시기
- 2013년 부터 성장하는 시스템과 빌링DB 방대한 데이터 축적
- 빌링: 마트의 계산대의 역할
- 해결 해야 할 문제
- DB 용량 문제
- 장애발생/전파 문제
- 2021 빼빼로데이 전까지 페이와 커머스에서만 발생하던 장애가 … 어느 순간 발전해서 빌링만 장애 발생 ㅠㅠ
- 삽질스토리
- DB 용량 문제를 위해 샤딩 처리로 해결 계획
- DB 서버 1대 > 12대 증설
- 서비스군 별로 DB 서버 분배 처리
- MySQL DB 샤딩
- 고급 솔루션 사용?
- 운용 경험 없고, 다른 장애 발생 가능, 기존 시스템 변경 규모 예측 불가, 장기간 테스트 필요
- 애플리케이션 레벨 샤딩 구현?
- 샤드키 필요, 샤딩 전 데이터 마이그레이션 이슈, 샤딩 후 데이터 재배치 이슈
- 빌링DB 는 A.I. (Auto Increment) 기반 PK 를 사용
- DB 에서 생성된 PK 값을 사용하여 샤딩 처리 계획!
- PK 기반 샤드키를 생성하여 중복되지 않은 방식 채택
- 샤드키 자릿수를 최대한 늘려서 키 구간별 샤딩 처리
- 단건 조회는 샤드키 구간 별로 샤드 DB 접근하여 조회
- 다건 조회는 Apache ShardingSphere-Proxy 활용
- Shard-Proxy 를 통해 admin 서비스에서 접근 조회 처리
- 고급 솔루션 사용?
- DB 샤딩 이관 작업
- 샤딩할 테이블 분류
- 분류할 테이블 복제 이동
- 동적 샤딩
- 프로퍼티 설정을 통해 배포없이 동적 샤딩 처리
- 장애 발생 시 복제 샤드DB 조회할 수 있도록 분산 처리
- 결과
- 눈에 띄는 성능 개선
- 전체 삽질 기간: 104일