1. 알림 서비스의 확장
우리는 초기 요구사항 정의시 식재료가 임박했을 때 사용자가 해당 식재료를 소진할 수 있게 알림을 보내는 서비스를 제공하고자 했다. 그러나 구현 기능이 늘어나면서 알림 서비스 또한 확장해야할 필요가 생겼다.
기존에 생각했던 서비스는 그저 사용자에게 메시지를 보내는 것이었고 전송된 알림을 클릭했을 때 아무런 이벤트가 발생하지 않았다. 하지만 현재 출시되어 있는 여러 서비스를 보면 알림을 클릭했을 때 해당 기능으로 바로 이동하는 서비스를 제공한다. 그렇기 때문에 우리도 그러한 서비스를 구현하고자 한다.

위의 그림을 보면 아래 처럼 동작하는 것을 확인 할 수 있다.
공지사항 알림 : 종 버튼 클릭 → 공지사항 알림 클릭 → 공지사항 상세 페이지
- 댓글 좋아요 알림 : 종 버튼 → 좋아요 알림 클릭 → 해당 댓글이 있는 레시피 댓글 목록
- 식재료 등록 알림 : 종 버튼 → 식재료 등록 알림 클릭 → 식재료로 세팅되어 있는 식재료 추가 페이지
- 소비기한 임박 알림 : 종 버튼 → 소비기한 임박 알림 클릭 → 회원의 소비기한이 지난 식재료 목록 페이지
정리하자면 기존에 식재료 임박 알림 메시지만 제공하던 알림 서비스를 공지사항, 소비기한 임박 알림, 식재료 등록 알림, 댓글 좋아요 알림으로 확장하며 알림을 클릭했을 때 해당 기능으로 바로 갈 수 있는 서비스를 제공한다.
2. 알림 도메인 수정
알림 서비스를 확장함에 따라 알림 도메인도 수정한다. 수정 전과 후의 컬럼들은 아래와 같다.
- 수정 전 : 알림 식별자, 메시지, 알림 발송시간, 회원 식별자
- 수정 후 : 알림 식별자, 알림 아이콘, 메시지, 알림 유형, 알림 발송시간, 이동될 페이지 경로, 읽음 유무, 회원 식별자
도메인 수정의 핵심은 이동하게 될 페이지 경로를 추가하는 것이다. 페이지 경로를 URL로 저장함으로써 사용자에게 전송된 알림이 클릭되었을 때 그에 따른 페이지로 바로 이동할 수 있도록 서비스를 제공한다.
그리고 알림 메시지의 종류별로 구분할 수 있도록 알림 아이콘, 알림 유형이 추가되었고 알림을 읽음 여부도 확인하기 위해 알림 읽음 유무도 추가하였다.
3. 서버 분리
그리고 우리는 서버를 메인 서버인 API 서버와 또 다른 서버인 배치 서버를 분리하여 운용하도록 결정했다. 그 이유는 서버 사용량이나 트래픽이 두 서버에서 다른 시간대에 발생되기 때문이다. API 서버는 트래픽이 상시적으로 발생하지만 배치 서버는 자정이나 특정 시간에 일괄적으로 전체 데이터를 스캔하여 작업을 수행하기 때문이다. 따라서 특정 시간에 서버의 사용량이 확 오를 수가 있다. 그렇기 때문에 서버를 두개로 분리하여 운용하는 것으로 결정했다.
- API 서버 :
- 레시피, 식재료, 회원 등, 도메인에 접근하는 사용자의 요청 처리
- 로그인, 로그아웃, 토큰 관리와 같은 보안
- 배치 서버 :
- 모든 사용자에게 일괄적으로 알림을 전송하거나 오래된 알림을 삭제
- 데이터베이스에 삭제 처리된 데이터 완전 삭제 (북마크, 식재료, 댓글)
서버는 분리하지만 데이터의 무결성을 유지해야 하기 때문에 DB는 하나로 운용되어야 한다.
4. 알림 기능
- 메인 페이지나 알림 아이콘 표시되어 있는 페이지에서 알림 아이콘의 상태를 조회할 수 있다.
- 아래의 알림 조회나 알림 생성/전송을 통해서 알림 아이콘의 상태가 변경된다.
4.1 알림 조회 (알림 아이콘 비활성화)
- 알림 아이콘을 클릭하여 알림을 조회하면 알림 아이콘의 빨간 점이 사라지고 비활성화 된다.
- 알림 목록의 하나의 요소에는
아이콘, 알림 유형, 알림 메시지, 알림 생성 시간 등이 표시된다.
- 알림 메시지는 최신순으로 정렬되어 표시되며 그것과 관계없이 가장 우선적으로 조회되는 메시지는 유통기한 임박 알림 (1일 전/3일 전) 이다.
- 한번에 조회되는 알림 메시지의 수는 10개이며 스크롤을 내리면 10개씩 추가적으로 조회된다.
- 특정 알림을 최초 클릭하기 전에는 안 읽음 표시로 해당 알림의 배경이 회색으로 보인다.
- 특정 알림을 최초로 클릭하면 읽음 표시로 해당 알림의 배경이 흰색으로 변한다.
- 특정 알림을 클릭하면 알림의 유형에 따라 특정 페이지로 이동하여 각각의 기능을 편리하게 사용할 수 있다.
4.2 알림 생성/전송 (알림 아이콘 활성화)
- 아래의 모든 종류의 알림이 생성되어 사용자에게 전송되면 알림 아이콘이 활성화 된다.
- 식재료 유통기한 임박시 사용자에게 알림 전송
- 매일 자정, 사용자마다 냉장고 정보를 종합하여 유통기한이 임박한 식재료에 관한 알림 메시지를 전송한다.
- 알림은 총 2개이며 1일 남은 식재료에 관한 알림과 3일 남은 식재료에 관한 알림 2개를 전송한다.
- 해당 알림 메시지를 클릭하면 임박한 식재료에 관한 식재료 목록(1일 전 or 3일 전)이 조회된다.
- 식재료가 1개라면 “~~의 유통기한이 1일 남았습니다” 라는 메시지를 보낸다
- 식재료가 n개라면 “~~ 외 n-1개의 유통기한이 1일 남았습니다” 라는 메시지를 보낸다.
- 댓글 좋아요 발생시 작성자에게 알림 전송
- 특정 사용자가 내가 남긴 레시피 댓글에 ♥️버튼을 누르면 나에게 알림 메시지가 전송된다.
- 해당 알림 메시지를 클릭하면 해당 레시피의 댓글 전체 목록으로 이동한다.
- 알림 메시지는 “~님이 ~의 댓글을 좋아합니다.” 이며 “~~~”는 닉네임으로 표시된다.
- 특정 식재료를 DB에 등록하도록 요청한 사용자에게 식재료 등록 가능 알림 전송
- 사용자 요청 식재료를 DB에 일괄 등록하는 작업은 매월 1일, 15일에 진행된다.
- 사용자가 특정 식재료를 DB에 등록하도록 요청했을 때는 식재료명과 단위를 함께 입력하여 요청하였다.
- 그러므로 사용자가 제안했던 식재료의 가장 많은 단위를 채택하여 DB에 등록한다.
- 그 후 특정 식재료를 DB에 등록하도록 요청한 사용자들에게 특정 식재료를 등록할 수 있다는 알림을 전송한다.
- 알림 메시지는 "회원님이 요청했던 " ~~~를 이제 냉장고에 담을 수 있습니다. (식재료 추가하기)”이다.
- 해당 알림 메시지를 클릭하면 해당 식재료를 추가하는 페이지로 이동한다.
- 그 후 현재까지 쌓여있던 요청된 식재료들의 목록을 DB에서 일괄 삭제한다.
5.데이터 삭제 기능
5.1 알림 삭제
- 매일 자정, 모든 사용자를 대상으로 알림을 삭제한다.
- 유통기한 임박 알림을 전송하기 전에 알림 삭제를 진행한다.
- 유통기한 임박 알림은 매일 자정마다 보내기 때문에 전날에 보냈던 내용을 매일 삭제한다.
- 그 외의 알림은 현재 날짜를 기준으로 14일 이전에 전송되었던 모든 알림을 삭제한다.
5.2 삭제 처리된 데이터 완전 삭제
- 매월 1일, 15일 마다 댓글 삭제나 식재료 삭제 그리고 북마크 취소 등으로 인해 삭제 처리된 데이터를 일괄적으로 완전히 데이터베이스에서 삭제한다.
- 댓글 → 식재료 → 북마크 순으로 제거