티스토리 뷰
📣 어젠다
- 우선순위 기준으로 정하기
- 기능등을 구현한다고 하면 어디서 자료를 가져올수 있을까?
- 어떠한 기준을 잡아야 할까?
- ex)
- 어떠한 기준으로 알림을 보낼것인가? -> 재난이 전국 메세지 기준인가? -> 메세지 내용이 긴급인지 아닌지는 뭐로 판단하는가? -> 메세지를 보내는걸 어떻게 판단할것인가? -> 어디를 기준으로 할것인가?
- 역할 분담
세부 기획시 참고할 사이트
- 국민재난안전포털, 국가화재정보시스템, 통계주제도 | 통계지리정보서비스
- 119안전 | 실시간도시현황 | 스마트 서울뷰
- KBS 재난포털
- 통합 데이터지도 – 공공 민간 빅데이터 통합 검색
- 서울시 실시간 도시데이터
- 전국 119 현황,실시간 신고현황,
- 112 신고 접수·처리 현황 통계(https://www.index.go.kr/unity/potal/main/EachDtlPageDetail.do?idx_cd=1609)
- 스마트 치안 빅데이터플랫폼,
- 한국산업안전보건공단_사고사망 게시판 정보 조회서비스,
- 통합데이터 지도(https://www.bigdata-map.kr/dashboard)
- 국민 재난 안전 포털(https://www.safekorea.go.kr/idsiSFK/neo/sfk/cs/sfc/wka/wekyclmy.html?menuSeq=102#none;),
- 경찰청 공공데이터, 서울 실시간 도시 데이터( https://data.seoul.go.kr/dataList/OA-21285/A/1/datasetView.do ),
- 한국 안전 보건공단 지역별 재해사례,
- 공공데이터 포털,
- 실시간 인구밀도,
- 전국의 실시간 사건 사고 현황을 알고싶었음
마주한 문제
- 데이터가 여기저기 흩어져 있다. ->그럼 서울인구를 주제로 다 해야하나?
- 뉴스의 정보를 가져와서 정제한다음 나름의 통계를 낼수는 없을까?
- 실시간 데이터를 가져오고 싶었지만 신고 현황, 사고 접수, 이런 내용들은 실시간이 아닌 통계로 올라오는 데이터였다.
상세 구현 기술 • 기능 정리
( 핵심 기능 1 ) 긴급상황 시 재난 상황 알림 서비스 → 웹소켓
재난 상황 실시간 알림 기능
범위 : 전국구 단위
재난 분류 : 자연재난, 사회재난, 비상대비, 기타재난중 기타재난을 제외한걸 가져옴.
절차
공공데이터 가져오기
국민재난안전포털에서 제공하는 OpenAPI에 fetch로 데이터를 가져온다.
어떤 데이터를 가져올 것인가?
수신 지역 코드, 수신지역 이름, 생성일,
가져온 데이터 중 어떻게 처리하여 코드레드 사용자에게 알림을 보낼 것인가?
👂🏼 단 건 알림에 대하여→ 가공이 필요하다.ex) 로그인한 사용자라면?‘화재’ ‘지진’ 에 대한 재난 키워드를 설정한다.
📌 문제: 비회원은? → 접속시 지역과 키워드를 설정 → 방문할 때마다 설정? → 이탈할거 같음 → 접속한 사용자 위치기반으로 일정 지역을 자동으로 설정해서 보내준다?2️⃣ 각 역할에 따른 API 분류?공공데이터 가져오는 API → 가져오기만 하는 아이 fetch
조회한 데이터를 저장하는 API → 저장만 하는 아이 Redis set()
필터링 해서 응답하는 API → 조건에 따라 거르고, 답해주는 아이
‘GPS 위치 정보 활용’ 동의 vs ‘req.헤더? 페이로드? 에서 꺼낸 위치정보?’
웹 & 모바일 - 카카오맵 API와 연동해서 위치 찾고 동의 받기?
왜 카카오?
가장 많이 사용. 접근성. 카카오 로그인.
웹에서 다른 방식
Geolocation API - Web API | MDN
<캐싱> 저장된 데이터와 사용자 위치, 사용자 알림 설정에 맞게 조회 → 응답 보내주는 API
만약에 로그인을 안한다고 하면 팝업 일주일간 보지않음과 비슷한 맥락으로 적용해보면 되지 않을가?(localstorage, cache?)
🚨 재난상황 알림에 대하여
지진, 홍수, 전쟁, 화재, 태풍 등 초비상 사태에 대해서는 1건이라도 발생하면 알림을 즉시 보내야한다.
🚨 긴급상황 알림에 대하여
호우/대설/폭염/강풍 주의보, 미세먼지 등 경보 수준에서는 n 건 이상 재난문자 데이터가 누적된다면 그때 알림을 보내야겠다.
📌 문제: 가져온 데이터를 어떤 방식으로 재가공(통계/계산/검증/형식 변경)해야할까?
open api : 행정 안전부
서버는 이 지역과 키워드와 매칭되는 재난문자만 알림으로 전송한다.
‘이경복’ 사용자는 ‘서울’ ‘경기’ ‘용인시’ 지역을 관심 지역으로 설정한다.
→ 위치기반 서비스?
1️⃣ 가져온 데이터를 그대로 보내주는 것은 의미가 없겠다.
계산하는 아이
단순 연산 → get() → count 0099개 → 평균값
통계하는 아이
복잡 통계 → 머시기하면 된다.
지역기반 실시간 채팅 기능 → 웹소켓을 이용한 실시간 채팅 구현
참고 사이트: https://www.youtube.com/watch?v=uE9Ncr6qInQ
사용자 위치기반(경기도 광주시 태전동) → 실시간 채팅 메세지 목록 조회 API
최신 4건만 조회 메인화면 → 더보기 클릭시 → 전체 목록 조회 화면 이동
실시간 채팅 메세지 수 카운팅: 73개
채팅 메세지 목록들..머시기 알아서
자동 업데이트 on/off : 토글
채팅메세지 생성 API
userName, content, createdAt 등
클린봇: 악성표현, 욕설 : 필터링
신고 기능
( 핵심 기능 2 ) 실시간 감지 시스템
목적지 위험도 측정 기능
https://data.seoul.go.kr/dataList/OA-21285/A/1/datasetView.do - 서울 실시간 도시 데이터
범위 : 서울시로 한정한다.
( 핵심 기능 3 ) 위치기반 내 주변 대피소 찾기 기능 → fetch? vs csv + multer?
주변 대피소 찾기
선택 1. 대피소 정보를 업데이트해야한다면?
OpenAPI에서 그냥 fetch로 받는다? 1달에 1번만 자동으로 전달받아서 → DB에 저장?
선택 2. 업데이트가 많이 안되고, 단순하게 하고 싶다면?
서울시에서 인허가된 대피소 정보를 CSV 파일 형태로 제공함. → DB에 저장해서 → 조회( fetch 안써도됨 )
대신 수동으로 일정 주기로 CSV 파일을 교체해줘야함
( 핵심 기능 4 ) 사건사고 현황 조회 → 스크래핑/크롤링
위급상황 현황
‘구체적인 정부 데이터’ 보다 ‘실시간’에 더 포커싱하자. 고 팀원들과 합의→ 사용자의 위치에 따라 주변의 사건사고 발생 기사를 스크래핑 해온다.<머시기 과제> 여러 언론사에서 가져오는 뉴스들 중에서
중복된 사건/사고 뉴스에 대한 데이터 검열,
당일 사건사고에 해당하지 않는 내용을 탐색 → 검열
→ 해당 사건사고 건수를 집계하는 API
→ 이 결괏값을 현황 조회 API에서 활용
<스크롤링 기준> 사용자 현재시간으로부터 최근 3시간 기준? 느낌으로 잡는다?
→ ‘실시간’에 집중하기 위해서, 스크래핑/크롤링 기술을 활용해서
위험감지 시스템에서 “사건/사고 5건” → 5 클릭 → 뉴스 기사 목록이 나온다.
선택1. 하루치만 크롤링 해와서 캐싱해서 Redis에 저장?
📌 문제 : 119 안전 openAPI, 경찰청 사건/사고 openAPI 등에서 가져올 수 있는 데이터가 최신 갱신이 되어있지 않음.
( 핵심 기능 4 ) 일반인 구조요청 SOS 서비스
SOS 버튼 눌러서 긴급 구조 요청 → Ref. 택시 매칭 시스템? 알고리즘?user SOS 버튼 클릭
상태 긴급
위치 1km 이내 에 있는 모든 유저 찾아 → 사람이 없어?
위치 3km 이내에 있는 유저를 다시 탐색 → 곽지민, 오다은, 강영우, 조민근
4명의 유저에게 구조 요청 알림 전송
지민, 민근 → 응답 없음→ 다시 반경 넓혀서 조회? ( 유저 찾을때까지 계속 반복 )
탐색한 유저가 만약 3km 이내 유저가 5천명이면?
→ 만약 모두 응답이 없으면? → 60초 이내에 응답이 없으면으로 기준? →
전송된 알림 조회
다은 → 구조 요청 수락 → 119 신고 전화 버튼 → 대신 119에 신고해주기 → 3점
위급상황 현황영우 → 구조 요청 수락 → 뛰어와서 직접구조 → 10점 → 지킴이 타이틀을 준다.
구조 완료 → 다은/영우 에게 고맙다고 평점과 간단한 사연 남김
우수 사례 활용 - 라디오 구현시 경복님의 구조 사연입니다.
구조 요청자 패널티 정책도 필요함.
허위 구조 요청 → 초강력 패널티
구조자 패널티 정책도 필요함.
돈을 요구한다던지, → 계정 정지
구조 요청을 받았는데 아무런 행동도 안햇다. → 초강력 패널티
위급맨고
지킴이 타이틀을 어떤 기준으로 부여할건가?
랭킹
팔로워 기준
20명 기준 → 지킴이 Lv.1
100명 기준 → 👑 킹왕짱 지킴이
점수 기준
점수 부여 기준: 대신 신고해주기 3점 / 직접 구조 10점
10점 미만 → 일반 유저
50점 이상 → 지킴이 Lv.1
70점 이상 → 지킴이 Lv.2 → 100 골드바 증정
[Node.js] 위치기반 서비스 서버 만들기 (Location Based Service)
( 핵심 기능 5 ) 구호 물품 교환 서비스
구호 물품 교환 서비스 → Ref. 당근마켓 매칭 시스템?구호 물품 게시글 등록
교환 ‘요청’ 상태로 default로 등록됨.
구호 물품 게시글 삭제
구호 물품 게시글 목록 조회
구호 물품 게시글 상세 조회
작성자 프로필 조회
거래 방식 // 담당자 마음대로
작성자에게 1:1 채팅 메세지 보내기? or 전화번호로 전화 걸기? -
요청 보내고 수락/거절 → 채팅 or 전화 →
구호 물품 게시글 수정
교환 완료 버튼 클릭 → 완료 상태로 변경
( 핵심 기능 6 ) 챗봇 서비스
챗봇 서비스 → 채널톡 API 연동
'project > sparta' 카테고리의 다른 글
[최종 프로젝트] Puppeteer 크롤링하기2<문자열 유사성 알고리즘> (0) | 2024.04.05 |
---|---|
[최종 프로젝트] Puppeteer 크롤링하기 1 (0) | 2024.04.03 |
바닐라 자바스크립트 조건에 따른 카드 정렬[팀프로젝트] (0) | 2024.01.12 |
TIL 10일차 + fetch(), Promise.all() (1) | 2024.01.05 |
Cannot read properties of null (reading 'append') 에러 (0) | 2024.01.04 |