문서
유연하고 확장 가능한 배너 기능 구현하기
김선우 · 토스 · 토스 기술 블로그
소개
어떠한 요구사항도 수용할 수 있는 기능은 어떻게 만들 수 있을까요? 토스증권에서 유저에게 노출하는 배너 기능을 어떻게 유연하고 확장 가능하게 구현하였는지 공유 드려요.
AI 핵심 요약
배너 요구사항이 늘면서 if/else가 깊어지고 수정이 어려워지자, 토스증권은 지면과 데이터 소스, 노출 조건을 각각 확장할 수 있는 인텔리전스 시스템을 만들었습니다. 지면은 position과 IntelligenceHandler 구현체로 분리해 새 지면을 핸들러 추가만으로 지원하고, 외부 API 데이터는 LazyContext를 사용해 실제 필요한 시점에 가져오도록 했습니다. 복잡한 노출 조건은 자체 DSL 대신 SpEL로 표현하고, 조건별 check 함수를 컴포넌트로 등록해 평가하도록 구성했습니다. 변경 가능성이 높은 부분을 분리한 결과 코드 가독성과 유지보수성이 나아졌고, 새로운 요구사항에도 빠르게 대응할 수 있다는 점을 보여줍니다.
- 지면별 차이는 position으로 구분하고, 핸들러를 추가하는 방식으로 확장하면 기존 분기문을 수정하지 않아도 됩니다.
- 외부 API 응답은 LazyContext로 감싸 필요한 조건이 평가될 때만 호출해 불필요한 요청을 줄일 수 있습니다.
- 노출 조건을 직접 만든 DSL 대신 검증된 SpEL로 표현하고, 조건별 check 함수는 별도 컴포넌트로 분리했습니다.
- SpEL 평가 실패 시 기본값을 어떻게 처리할지 정하고, 표현식과 리플렉션 기반 호출을 신중하게 관리해야 합니다.