카카오톡 Java App Server Refactoring 후기 (이상우, Soo)
if kakao 카카오 · YouTube
AI 핵심 요약
오래된 카카오톡 Java 메시징 서버에는 가변 Context 클래스와 서비스 간 순환 의존성이 쌓여 코드 추적과 테스트가 어려웠습니다. 이를 점진적으로 리팩터링해 Context 클래스를 10개에서 3개로 줄이고, Context를 변경하는 함수는 결과를 반환하게 하며 필요한 값만 인자로 받도록 바꿨습니다. 서비스 간 호출은 Java 함수형 인터페이스를 이용해 동작을 전달함으로써 순환 의존성을 끊고, 함수 추출과 보호 구문 적용으로 복잡도도 낮췄습니다. 복잡도 지표는 개선 방향을 살피는 데 유용하지만 실제 가독성을 대신하지 않으며, 함수형 인터페이스 적용에 따른 성능 비용도 측정하고 판단해야 한다는 점을 공유했습니다.
- 가변 컨텍스트를 수정하는 함수는 컨텍스트를 인자로 받아 상태를 바꾸기보다, 필요한 값만 받고 결과를 반환하도록 바꿉니다.
- 함수에 필요한 데이터만 명시적으로 전달하면 숨은 상태 변경과 불필요한 결합을 줄일 수 있습니다.
- 서비스 간 의존성을 제거하기 어렵다면 Java 함수형 인터페이스로 동작을 전달해 의존성 그래프를 단순화할 수 있습니다.
- 순환 복잡도 지표는 코드의 실제 가독성과 항상 일치하지 않으므로, 수치만 낮추기보다 읽기 쉬운 구조를 우선합니다.
소개
[2023.07.18. 제2회 kakao tech meet 발표] 카카오톡 Java App Server를 리팩터링한 내용을 일반화하여 공유합니다. 세월의 흔적으로 많아진 가변 Context 클래스, 복잡하게 물고 물리는 의존성, 높아진 코드 복잡도를 어떻게 정리했는지, 예제로 일반화하여 하나씩 이야기하려고 합니다. 리팩터링에 관심이 있으신 분, 레거시 코드를 유지 보수해야 하는 분이 듣길 추천합니다. 발표자: @soo.lee(이상우) 카카오 톡메시징파트에서 메시징 서버를 개발하고 있습니다. 유지 보수성, 테스트 용이성이 높은 구조를 좋아합니다. #refactoring #java #backend #의존성 #코드복잡도 💬 발표자 인터뷰: https://tech.kakao.com/2023/08/01/techmeet-java-app-server-refactoring/ ✨ 카카오테크 페이스북: https://www.facebook.com/kakaotech ✨ 카카오테크 톡채널: ht...
비슷한 학습 자료
컨퍼런스 if kakao
추가 배포 없이 API의 case 통일시키기 / if(kakaoAI)2024
컨퍼런스 if kakao
운영이력이 쌓이면서 DTO들의 case들이 다양해진 상황에서, 개발 효율을 높이기 위해 case를 snake case로 일원화하기 위한 과정을 소개합니다. 24/7 상용환경과 MSA로 구성된 서버환경에서 Jackson 라이브러리를 활용해 서비스 중단없이 변경하려 고군분투한 일화입니다. #Spring #MSA #JAVA #DTO #Parsing 카카오톡 마이구독에서 백엔드 개발을 맡고 있는 Luis입니다. 발표자료 보기 👉 https://speakerdeck.com/kakao/ifkakao24-83 if(kakaoAI)2024에 대한 자세한 정보는 👉 https://if.kakao.com #카카오 #이프카카오 #개발자컨퍼런스 #AI #기술 #개발 #ifkakaoAI2024
백엔드 프로그래밍 언어 로드맵 1개에 담김
컨퍼런스 if kakao
카카오워크 메시징 엔진의 Rust 교체 개발 사례 from C / if(kakaoAI)2024
컨퍼런스 if kakao
기존에 C++로 개발된 카카오워크의 대량 트래픽 메시징 엔진을 Rust 기반으로 리팩토링 및 고도화한 사례를 다룹니다. Rust의 장점을 활용하여 메모리 안전성을 확보하고 성능을 개선했던 방법을 공유하며, 기 제공중인 서비스와의 안정적인 교체 사례도 함께 소개합니다. #RUST #메신저 KakaoWork 메시징 서버 개발하고 있는 Robby입니다. 발표자료 보기 👉 https://speakerdeck.com/kakao/ifkakao24-68 if(kakaoAI)2024에 대한 자세한 정보는 👉 https://if.kakao.com #카카오 #이프카카오 #개발자컨퍼런스 #AI #기술 #개발 #ifkakaoAI2024
백엔드 프로그래밍 언어
컨퍼런스 if kakao
JVM warm up / if(kakao)2022
컨퍼런스 if kakao
Java 어플리케이션은 시작과정에서 성능을 보장하기 위한 warm up 과정이 필요합니다. 이 세션에서는 JVM warm up이 성능에 어떻게 도움이 되는지 그리고 이와 관련된 jit comipler의 내부 절차를 소개합니다. 또한 카카오 T 계정 서버를 배포하는 과정에서 발생한 초기 응답 지연 문제를 어떻게 해결하였는지를 함께 말씀드리려고 합니다. #성능 카카오모빌리티에서 백엔드엔지니어 역할을 맡고 있는 그렉입니다. 저는 주로 Python으로 개발하는 것을 좋아하는데요, 최근에는 Java를 활용한 백엔드 개발과 React를 활용한 프론트엔드 개발에도 관심이 많습니다. 발표자료 보기 👉https://speakerdeck.com/kakao/ifkakao22-35 if(kakao)2022에 대한 자세한 정보는 👉 https://if.kakao.com if(kakao)2022에 대한 문의는 👉 if@kakaocorp.com #카카오 #이프카카오 #개발자컨퍼런스 #기...
백엔드 프로그래밍 언어
컨퍼런스 if kakao
카카오 T 대리 신규 커넥션 서버 개발기 / if(kakao)2022
컨퍼런스 if kakao
본 세션에서는 카카오 T 대리 서비스에서 소켓 통신을 담당하는 커넥션 서버를 왜 새롭게 개발하게 되었는지 말씀드리고, 새롭게 개발한 커넥션 서버의 설계와 그 구현 방법에 대해서 소개하겠습니다. 그리고 개발 과정에서 마주했던 문제들과 그 해결책들을 공유드리겠습니다. #NetworkSocket 카카오모빌리티에서 카카오 T 대리 서비스의 백엔드 개발을 맡고 있는 제이입니다. 발표자료 보기 👉https://speakerdeck.com/kakao/ifkakao22-34 if(kakao)2022에 대한 자세한 정보는 👉 https://if.kakao.com if(kakao)2022에 대한 문의는 👉 if@kakaocorp.com #카카오 #이프카카오 #개발자컨퍼런스 #기술 #개발 #ifkakao2022
백엔드 네트워크
컨퍼런스 if kakao
10년간 카카오톡 메시지 릴레이를 책임져온 C++ 기반 서버를 JVM 기반 언어(JAVA 및 Kotlin)로 포팅하는 이야기를 합니다. 위 프로젝트를 진행하게 된 계기를 소프트웨어 엔지니어링 측면으로 설명하고, 현재까지 진척 상황에 대한 이야기를 공유합니다. #카카오톡 카카오톡 메시징 시스템을 개발 및 운영하는 시리우스 입니다. 발표자료 보기 👉https://speakerdeck.com/kakao/ifkakao22-28 if(kakao)2022에 대한 자세한 정보는 👉 https://if.kakao.com if(kakao)2022에 대한 문의는 👉 if@kakaocorp.com #카카오 #이프카카오 #개발자컨퍼런스 #기술 #개발 #ifkakao2022
백엔드 프로그래밍 언어
컨퍼런스 if kakao
Preview Backend_1 @if(kakao)2022
컨퍼런스 if kakao
if(kakao)2022 컨퍼런스에서 Backend_1 관련 기술 발표 트랙을 소개합니다. 03:02 1. API 테스트 주도 개발의 시작 by 공진산(ronaldo.c) 카카오 테스트플랫폼셀에서 개발을 하고 있는 호날두입니다. 03:38 2.대량의 광고 데이터 필터 기능 개발기: ES한테 뺨맞고 Citus한테 안긴 썰 by 이동준(genos.lee) 카카오 crux개발2셀에서 서버 개발을 담당하고 있는 제노스라고 합니다. 04:17 3.Docker Swarm 기반 Redis SaaS 플랫폼 구축사례 by 이은미(silvia.lee) 카카오 시스템엔지니어와 레디스 플랫폼 엔지니어를 맡고있는 실비아입니다. 04:48 4. 카카오톡 메시징 시스템 재건축 이야기: C++ 서버를 Java및 Kotlin으로 by 남기영(sirius.nam) 카카오톡 메시징 시스템을 개발 및 운영하는 시리우스 입니다. 05:10 5. 카카오톡 메시징 지표 이상감지 시스템의 개선사례 by 김예솔(so...
백엔드 데이터베이스 소프트웨어 테스트