본문으로 이동
유연하고 확장 가능한 배너 기능 구현하기
문서

유연하고 확장 가능한 배너 기능 구현하기

김선우 토스 · 토스 기술 블로그

원문 보기

AI 핵심 요약

배너 요구사항이 늘면서 if/else가 깊어지고 수정이 어려워지자, 토스증권은 지면과 데이터 소스, 노출 조건을 각각 확장할 수 있는 인텔리전스 시스템을 만들었습니다. 지면은 position과 IntelligenceHandler 구현체로 분리해 새 지면을 핸들러 추가만으로 지원하고, 외부 API 데이터는 LazyContext를 사용해 실제 필요한 시점에 가져오도록 했습니다. 복잡한 노출 조건은 자체 DSL 대신 SpEL로 표현하고, 조건별 check 함수를 컴포넌트로 등록해 평가하도록 구성했습니다. 변경 가능성이 높은 부분을 분리한 결과 코드 가독성과 유지보수성이 나아졌고, 새로운 요구사항에도 빠르게 대응할 수 있다는 점을 보여줍니다.

  • 지면별 차이는 position으로 구분하고, 핸들러를 추가하는 방식으로 확장하면 기존 분기문을 수정하지 않아도 됩니다.
  • 외부 API 응답은 LazyContext로 감싸 필요한 조건이 평가될 때만 호출해 불필요한 요청을 줄일 수 있습니다.
  • 노출 조건을 직접 만든 DSL 대신 검증된 SpEL로 표현하고, 조건별 check 함수는 별도 컴포넌트로 분리했습니다.
  • SpEL 평가 실패 시 기본값을 어떻게 처리할지 정하고, 표현식과 리플렉션 기반 호출을 신중하게 관리해야 합니다.

소개

어떠한 요구사항도 수용할 수 있는 기능은 어떻게 만들 수 있을까요? 토스증권에서 유저에게 노출하는 배너 기능을 어떻게 유연하고 확장 가능하게 구현하였는지 공유 드려요.

비슷한 학습 자료

문서 김민수

"어떻게 하면 더 많은 팀이 우리 시스템을 잘 사용하게 할 수 있을까?" TDS가 이 질문에 답하기 위해 고민했던 과정을 공유합니다.

UI/UX

문서 고태완/윤보미

토스플레이스 Plugin Silo에서 다양한 서비스에 쉽게 녹아드는 유연한 구조를 고민하며, 사용자와 외부 개발자 모두에게 가치 있는 경험을 만든 경험을 공유합니다.

백엔드

문서 김동석

생산성, 안정성, 보안성을 모두 달성하기 위해선 ‘Pipeline’을 어떻게 설정해야 할까요? 다양하고 복잡한 토스뱅크의 배포 ‘Pipeline’를 안전하게 운영하기 위한 노력을 소개합니다.

데브옵스 · 인프라

문서 박서진

현대적인 JavaScript를 쓰면서도 넓은 범위의 기기를 지원하기 위한 Polyfill을 어떻게 똑똑하게 설정할 수 있는지 소개합니다.

웹 개발 프론트엔드

문서 이지윤

디자이너들도 어떻게 하면 빠른 속도를 내며 전체적인 경험을 맞출 수 있을지 매 순간 고민하고 있어요.

UI/UX

문서 강영화

슬랙봇 디자인 101

문서 강영화

슬랙봇 디자인을 잘 하려면 무엇을 알아야하는지 알려드릴게요.

UI/UX