서로 다른 개념이 묶입니다
- 배송 서비스는 항상 같은 곳으로 가야 함
- 노출 위치마다 이동이 달라지면 예외가 생김
- 가짜 서비스 타입이 늘어날 수 있음
서비스 목록의 항목을 눌렀을 때 현재 화면의 영역 또는 다른 페이지로 이동해야 한다면, 이동 방식은 서비스 타입이 아니라 액션 타입으로 표현합니다.
action.type으로 설계하고, BO에서는 이를 기획자가 이해하기 쉬운 “클릭 시 이동” 항목으로 보여주는 것이 좋습니다.배너 내용: 여름 할인전
클릭 시 연결: 이벤트 상세 페이지
같은 배너도 상품 영역, 상세 페이지, 외부 프로모션 페이지로 연결할 수 있습니다. BO에서 기획자가 실제 수행하는 작업과 가장 유사합니다.
버튼 이름: 영화 보기
버튼 동작: 넷플릭스 실행
다른 앱을 연결해도 버튼 이름과 실행 동작을 별도로 관리할 수 있습니다. 버튼의 이름·내용은 서비스, 눌렀을 때 실행되는 기능은 액션입니다.
“집”이라는 이름과 실제 목적지는 별개입니다. 목적지를 바꿔도 즐겨찾기의 역할은 유지되므로 이동 대상 분리를 설명하기 좋습니다.
가격을 바꿔도 김치찌개가 다른 메뉴가 되지 않는다는 점은 같습니다. 다만 가격은 단순 값이고 액션은 실행 동작이므로 핵심 비유로는 덜 정확합니다.
‘액션 타입’이라는 개발 용어는 노출하지 않습니다.
DOM ID 직접 입력보다 등록된 영역 선택을 권장합니다.
등록된 영역 선택 필드만 보여줍니다. 대상 영역이 없으면 저장을 막습니다.
페이지 검색·선택 필드만 보여줍니다. URL 직접 입력보다 페이지 ID 연결이 안전합니다.
type ServiceAction =
| { type: 'anchor'; anchorId: string }
| { type: 'page'; pageId: string };
interface Service {
id: string;
name: string;
serviceType?: ServiceType; // 실제 비즈니스 분류가 있을 때만
action: ServiceAction; // 클릭 동작의 유일한 기준
}
anchorId?와 pageId?를 함께 두면 둘 다 없거나 둘 다 있는 잘못된 데이터가 생길 수 있습니다.
anchor에는 anchorId, page에는 pageId만 허용해 오류를 미리 막습니다.
action.type으로 결정합니다. 서비스 종류와 이동 방식이 제품 정책상 영원히 1:1인 경우만 예외지만, 이때도 분리해 두는 편이 변경에 안전합니다.