편의점 할인 행사 정보를 모아보여주는 우리 서비스에는 개인화된 추천 목록을 제공한다. 이를 위해서는 사용자 행동 추적 정보
, 상품의 특성 정보
를 저장해야 한다.
사용자 행동 추적 정보
: 우리가 누군가에게 맛있는 음식을 소개하려면, 상대의 음식 취향을 알아야 한다. 이런 취향은 상대방이 어떤 음식을 좋아하는지 직접 말하거나, 어떤 음식을 주로 먹는지 관찰하여 알아낸다. 우리 서비스도 마찬가지로, 사용자에게 개인화된 추천 목록을 제공하기 위해서는 사용자가 서비스를 사용하는 행동을 추적하고 이를 저장할 필요가 있다.상품의 특성 정보
: 우리가 누군가에게 맛있는 음식을 소개하려면, 음식의 맛이나 향, 성분과 같은 정보를 알아야 한다. 우리 서비스도 마찬가지로, 사용자에게 개인화된 추천 목록을 제공하기 위해서는 상품의 특성을 추출하고 이를 저장할 필요가 있다.서비스에서 추적할 수 있으며 의미가 있는 정보는 서비스마다 조금씩 다를 것이다. 우리 서비스에서는 검색기록, 상품 정보 조회 기록, 리뷰 작성 및 조회 기록이 유의미하다 판단했다. 이 중에서 우선 우리 서비스에서는 리뷰 조회와 작성 기록을 이용해 보기로 했다. 서비스의 UX 설계상 리뷰를 조회하는 시점과 상품의 정보를 확인하는 시점이 일치하기 때문이다.
앱 화면 - 상품 정보 조회 페이지
리뷰 조회나 작성 기록에 어떤 데이터가 포함될지 생각해봐야 한다. 우선, 어떤 상품에 대한 리뷰인지 알아야 한다. 또한, 상품의 할인 정보는 변경될 수 있으므로, 할인의 종류 역시 저장해야 한다. 마지막으로, 언제 접근했는지 그 시간을 알아야 한다. 이를 정리하면 다음과 같은 JSON으로 표현할 수 있다.
{
"accessTime" : "2023-10-17T00:47:32",
"item" : {
...
},
"promotionType" : "ONE_PLUS_ONE"
}
이때, 할인 정보를 저장하는 테이블과 상품 정보를 저장하는 테이블은 외래키로 관계를 맺고 있으므로, 실제로는 할인 정보의 PK 만 저장하면 된다. 다시 정리하면 다음과 같은 JSON으로 표현할 수 있다.
{
"accessTime" : "2023-10-17T00:47:32",
"accessType" : "READ",
"promotionID" : 45
}
상품의 특성 정보에 어떤 데이터가 포함되어야 하는지 역시 서비스마다 다르다. 이를 결정하기 위해선, 우선 보유하고 있는 데이터를 파악해야 한다. 서비스 구축을 위해 우리가 수집한 상품&할인 정보는 다음과 같다.
오늘도 행사중인가?
를 확인하는 방식