
백엔드
유연하고 확장 가능한 배너 기능 구현하기
두줄요약
토스증권이 배너 기능을 지면, 데이터소스, 노출 조건 단위로 분리해 확장 가능한 인텔리전스 시스템으로 재구성했습니다. 필요한 시점에만 데이터를 불러오고 SpEL로 조건을 평가해 유지보수성과 대응 속도를 높였습니다.
문제 상황
- 초기 단순 구조에 if, else가 누적되며 들여쓰기가 깊어진 배너 코드
- 코드 히스토리를 아는 사람만 수정 가능한 높은 진입 장벽
- 다양한 지면과 복잡한 노출 조건을 수용하기 어려운 확장성 한계
구조와 흐름
- 지면 구분용 position 필드와 IntelligenceHandler 인터페이스로 핸들러 분리
- IntelligenceService가 position 기준으로 적절한 핸들러를 선택하는 구조
- UserDataSource로 로그인 정보와 외부 API 기반 데이터를 통합
해결 방법
- 필요한 시점에만 외부 API를 호출하는 LazyContext 적용
- SpEL과 리플렉션 기반 MethodResolver로 복잡한 노출 조건 평가
- IntelligenceCondition 구현체 추가만으로 노출 로직 확장 가능
적용해볼 점
- 변경 가능성이 높은 지점은 분기문보다 확장 가능한 인터페이스로 분리
- 데이터 수집과 조건 평가를 분리해 불필요한 호출과 복잡도 감소
- 새로운 지면, 데이터소스, 노출 규칙을 독립적으로 추가하는 구조