모모모
프로젝트 개요
기술개발 과제
국문 : 모임 관리 모바일 어플리케이션
영문 : MMM - Meeting Management Mobile application
과제 팀명
모모모(MMM)
지도교수
황혜수 교수님
개발기간
2020년 9월 ~ 2020년 12월 (총 4개월)
구성원 소개
서울시립대학교 컴퓨터과학부 20179200** 박수현 (팀장)
서울시립대학교 컴퓨터과학부 20179200** 김윤지
서울시립대학교 컴퓨터과학부 20179200** 김주영
서울시립대학교 컴퓨터과학부 20179200** 배은아
서울시립대학교 컴퓨터과학부 20179200** 양소연
서론
개발 과제의 개요
개발 과제 요약
◇ 여러 모임을 쉽게 관리하며 모임 만남 과정에서 발생하는 불편함을 해소하는 것이 목적이다. 모임의 계획부터 만남 이후까지 필요한 기능들을 제공하여 하나의 어플을 통해서 관리하는 모임 관리 ALL-IN-ONE 어플이다.
◇ 모임 장소 선정의 공정성을 더하기 위해 모임원들의 중간 지점을 계산하고 이동의 편의성을 위해 중간 지점 근처의 역을 중간 지점으로 제공한다. 모임에 참가한 사용자들의 선호를 반영하여 상위 카테고리에 해당하는 중간지점 근처의 장소들을 모임 장소로 추천한다.
◇ 더불어 공유 캘린더, 채팅, 게시판 등의 기능을 통해 모임을 효율적으로 관리할 수 있고 출석 기능과 미리 알림 기능으로 지각을 예방할 수 있다. 공유 캘린더로 모두가 가능한 날짜를 취합하여 모임 일자를 빠르게 결정할 수 있고, 채팅 기능을 제공하여 다른 채팅 어플로 소통해야 한다는 불편함을 해소할 수 있다. 출석과 지각 점수를 통해 지각자를 관리하여 모임이 원활하게 진행되도록 한다.
개발 과제의 배경
◇ 만남을 계획할 때 장소와 시간을 정하는 것은 귀찮은 일이다. 시간과 장소를 정한 뒤에도 지각자나 비용 정산 같은 불편함이 남아있다. 이러한 불편함을 해소하기 위해 모임을 전반적으로 관리할 수 있는 어플을 기획하게 되었다.
◇ 현재 사용자들 사이의 중간 지점을 추천해 주는 유사 어플이 존재하지만 한 사용자가 다른 사용자들에게 결과를 공유하는 방식으로 다른 어플을 같이 사용하여 결정해야 한다는 불편함이 있다. 또한 모임 계획이나 만남 이후에 대한 관리 기능은 없어 모임관리에 효과적이지 않다.
◇ 이와 같은 문제점들을 해결하고 차별화를 위해 본 팀은 기존 중간 지점을 찾는 기능과 더불어 모임 관리와 관련된 공유 캘린더, 채팅, 출석체크, 알림 기능을 추가하기로 했다.
개발 과제의 목표 및 내용
◇ 공정한 모임 장소 정하기 • 참여자들의 위치를 수집하여 이동 시간을 고려한 중간 지점을 계산하여 제공한다. 이동 편의성를 위해 주변의 지하철역을 중간 지점으로 설정하고 카테고리 별로 추천 장소를 보여준다.
◇ 지각 관리를 통한 시간 지체 방지 • 약속 한 시간 전에 미리 알림을 주어 지각을 방지한다. • 출석 기능을 통해 지각 점수를 부여하고 지각 순위를 보여준다. • 지각 점수에 따라 장소 추천시 선호도 반영 비율을 조정한다.
◇ 공유 기능을 통한 모임원들의 원활한 소통을 도모 • 공유 캘린더를 이용하여 모임원들끼리 적절한 모임 날짜를 함께 결정한다. • 게시판을 이용하여 사진과 의견을 쉽게 공유한다. • 채팅 기능을 통해 제공하여 모임원들의 소통을 도와준다.
관련 기술의 현황
관련 기술의 현황 및 분석(State of art)
- 전 세계적인 기술현황
◇ 그라함 스캔(Graham Scan) 알고리즘
2차원 평면 상에 임의의 점들이 x와 y축에 퍼져 있을 때 그 점 중 일부를 포함하는 다각형을 만들고 나머지 모든 점을 다각형 내부에 포함시키는 알고리즘이다. 여러 개의 점이 있을 때 이 점들의 외각선을 연결하는 꼭지점들을 찾아낼 때 사용하는 알고리즘이다.
그라함 알고리즘 탐색 과정: 위에서 볼 수 있듯이 PAB와 ABC는 반시계 방향이지만, BCD는 그렇지 않다. 알고리즘은 이러한 상황을 감지하고 반시계 방향이 될 때까지 이전에 고른 부분(위 그림에서 ABD)을 무시한다.
그라함 알고리즘을 통해 평면 상에 임의의 점들이 x와 y축에 퍼져 있을 때 그 점들 중 일부를 포함하는 다각형을 만들고 나머지 모든 점을 다각형 내부에 포함시킨다. 본 팀은 지도상의 사용자 위치를 점으로 선정하고 효율적인 중간 지점 탐색을 위해 그라함 알고리즘(Graham Scan)을 사용하여 다각형을 생성하여 무게중심을 효과적으로 구할 수 있다.
6명의 사용자가 있을 때 그라함 알고리즘을 통해 생성한 다각형. 공식을 사용해 무게중심을 빠르고 간단하게 계산할 수 있다.
◇ 클러스터링(군집화)
클러스터링은 개체들이 주어졌을 때, 개체들을 그룹으로 나누는 것을 의미한다. 같은 클러스터 내부 멤버는 가깝고 다른 클러스터의 멤버는 멀리 위치하도록 만든다.
• k-means 클러스터링
주어진 데이터를 k개의 클러스터로 묶는 알고리즘으로 Lloyd 알고리즘이 가장 많이 이용되고 있다. Lloyd 알고리즘을 이용한 k-means clustering은 크게 initialization, assignment, update 세 부분으로 구성된다.
우선 initialization 단계에서 초기 센트로이드를 설정한다. 초기 센트로이드 설정 방법에는 랜덤 초기화, Forgy 알고리즘, MacQueen알고리즘 등이 있다. 기본적으로 랜덤 초기화를 많이 사용하고 있다. Initialization 이 끝나면 assignment 단계에서 센트로이드 값과의 거리를 계산하여 모든 데이터에 대해 가까운 cluster를 설정한다. 모든 데이터가 클러스터에 할당되면 이를 바탕으로 센트로이드를 update 한다. 이후 클러스터 센트로이드의 변화가 없을때까지 assignment 와 update를 반복한다.
K-means 클러스터링을 하기 위해서는 k 값을 미리 설정해줘야 한다. k값을 찾는 방법에는 대표적으로 elbow 기법과 silhouette 기법 두 가지가 있는데 보통 elbow 기법을 주로 사용한다.elbow 기법은 k값을 1부터 특정 값까지 증가시키면서 클러스터링을 진행한다. 이때 모든 경우에 대해 sse 값을 구한다. k값이 늘어날수록 sse값이 급격하게 줄어드는데 어느 시점부터 이 값이 거의 감소하지 않는 지점이 발생한다. 이 지점을 최적의 k값으로 선택할 수 있다.
◇ 유클리디안 거리
유클리디안 거리는 n차원 공간에서 두 점 사이의 거리를 구할 때 흔히 사용되는 방법이다. 유클리디안 거리를 구하는 공식은 다음과 같다.
유클리디안 거리 공식을 사용해 중간지점과 장소들 사이의 거리를 계산할 수 있다. 계산된 거리에 밑이 10인 상용로그를 취해 값을 보정한다. 보정한 값을 장소에 대한 거리점수로 사용한다. 구글에서 읽은 장소의 별점과 거리점수를 지정한 비율에 맞춰 장소마다 최종 점수를 부여한다. 최종 점수의 값이 높은 순서대로 장소를 추천한다.
- 특허조사 및 특허 전략 분석
◇ 합류지점을 고려하는 경로탐색 시스템 (출원번호: 1020140147380)
합류지점을 고려한 경로탐색 방법에 관한 것으로서, 상세하게는 각각 다른 위치에 존재하는 2인 이 상의 사용자가 공통의 목적지로 가는 도중에 중간에서 합류하여 가고자 하는 경우 최적의 합류지점을 탐색하여 합류지점까지 가는 경로를 제공하도록 하는 합류지점을 고려하는 경로탐색 시스템에 관한 것이다.
◇ 중간지점의 모임장소 추천 시스템 및 방법(출원번호: 1020130057560)
모임장소 추천 시스템은 모임 참석자들의 단말로부터 각각 프로필과 위치를 입력 받고, 상기 위치의 중간지점을 검출하는 검출부, 상기 프로필을 고려하여, 상기 중간지점의 부근에 존재하는 모임장소를 추천하는 추천부, 상기 모임장소가 상기 단말에 의해 선택됨에 따라, 상기 모임장소의 안내정보를 제공하는 제공부를 포함한다.
시장상황에 대한 분석
- 경쟁제품 조사 비교
- 마케팅 전략 제시
개발과제의 기대효과
'우리 지금 만나' 어플 사용으로 다음과 같은 효과를 기대할 수 있다.
기술적 기대효과
◇ 여러 모임과 약속을 효과적으로 관리할 수 있다. ◇ 약속과 관련된 사항(장소, 날짜, 비용처리 등)을 공정하고 신속하게 결정할 수 있다. ◇ 모임과 관련된 채팅, 게시판, 캘린더 등을 한 어플에서 모두 제공하여 시간과 비용적인 이득을 볼 수 있다.
경제적, 사회적 기대 및 파급효과
◇ 스마트 시대에 걸맞게 어플을 통해 모임을 결정하고 관리함으로써 체계적으로 일정과 인맥을 관리할 수 있다. ◇ 오프라인뿐만 아니라 온라인 모임 관리(공유 캘린더, 알림) 기능을 추가하여 언택트 시대로 인한 모임 형태 다변화에도 대응이 가능하다. ◇ 코로나 여파로 인해 대면 모임이 소원해지는 상황에서 비대면 모임의 일정을 공유하며 모임에 다른 방면에도 대응하고 모임을 유지할 수 있다. ◇ 출석 기능과 미리 알림을 통해 원활한 모임 진행이 가능해지고 공정하게 모임 과정을 결정하고 관리하여 지속적으로 모임을 유지할 수 있다.
기술개발 일정 및 추진체계
개발 일정 및 추진체계
◇ 팀장: 박수현 ◇ 팀원: 김윤지, 김주영, 배은아, 양소연
설계
설계사양
제품의 요구사항
설계 사양
개념설계안
◇ 사용자들은 여러 모임에 참가할 수 있으며 모임을 하나의 어플로 관리한다.
◇ 공유 캘린더에 각자의 일정을 입력하고 모두 가능한 날짜를 확인할 수 있다. 이를 통해 모임 날짜를 빠르게 정할 수 있다.
◇ 사용자들의 중간 지점을 계산하고 수집한 선호도를 바탕으로 중간 지점 주변 장소를 추천한다. 제공된 장소 목록을 참고하여 모임 장소를 결정할 수 있다.
◇ 모임 전 알림 기능과 지각 관리 기능으로 차질 없이 모임을 진행한다.
◇ 모임 이후에는 게시판과 정산 기능으로 모임을 마무리하며 채팅 기능으로 소통한다.
이론적 계산 및 시뮬레이션
◇ 중간 지점 찾기
1. 사용자의 주소 정보를 가져와서 위치에 따라 도별로 클러스터링
[강원도, 경기도, 경상남도, 경상북도, 전라남도, 전라북도, 충청남도, 충청북도, 제주도] 이때, 특별시, 광역시, 자치시는 인접한 도에 포함시킴
2-1. 클러스터가 2개 이상 나올 경우
각 클러스터마다 속한 사용자의 위치좌표로 그라함 스캔 알고리즘을 적용해 다각형을 그리고 생성된 다각형에서 무게중심을 계산해 centroid로 지정
(그라함 스캔 알고리즘을 사용한 이유는 모든 사용자를 포함하는 가장 작은 다각형을 만들기 때문에 이 내부에서 무게중심이 이동하도록 설계하기 위함)
2-2. 클러스터가 1개 이거나 모임원 수만큼 나올 경우
k값을 2로 지정하고 k-means clustering을 실행하여 클러스터를 추출함. 3-1과 마찬가지로 클러스터의 무게중심을 centroid로 지정
3. 각 클러스터에 속한 인원수를 가중치로 주어 평균점을 계산하고 인원수 가중치와 시간 가중치를 이용해서 평균이동시간을 줄여 나감
4. 평균이동시간이 줄었을 때 알고리즘을 종료하고 중간지점을 지도에 표시한다.
5. 중간지점 3000m 이내에 역이 존재한다면 역을 중간지점으로 제공하고, 역이 없다면 계산한 중간지점을 제공한다.
◇ 장소 추천
1. 모임에 참여하는 사용자의 별점으로 분산을 계산
2. 중앙값을 기준으로 분산을 정렬하고 중앙값보다 큰 분산을 가진 사용자에게는 가중치를 부여함 (호불호가 있다고 판단)
3. 지각 점수가 음수일 경우 지각 점수의 절댓값에 역수를 취한 뒤 0.1를 곱함, 양수일 경우 0.1를 곱하고 예외 점수(0,-1)일 경우 지정된 값을 곱함
4. 지각 점수를 사용자 별점에 반영하여 최종 사용자 별점을 구함
5. 모임 사용자들의 최종 사용자 별점을 합하여 모임별 카테고리 별점 순위를 구하고 상위 3개의 카테고리를 선정함
6. 거리 범위(사용자 변경 가능) 내에 위치한 카테고리에 해당하는 장소들과 Google map 별점을 불러오고 중간 지점과의 거리를 계산해 거리 점수를 부여함
(거리 점수를 사용하는 이유는 중간 지점과 너무 멀어지지 않기 위해 중간 지점과 가까운 장소들에게 가중치를 두는 역할)
7. Google map 별점과 거리 점수에 대해 거리 범위별로 가중치를 변경하고 가중치가 적용된 별점과 거리 점수를 합함
(거리 반경을 넓힐수록 별점이 높은 장소를 원한다고 판단하여 별점 가중치를 높임 500m 이내: 별점만 반영, 1000m 이내: 1:1, 2000m 이내: 2:1, 3000m 이내: 3:1)
8. 7의 점수 순위대로 최종 순위를 구하고 카테고리 순위별로 제공할 장소 개수를 지정하여 최종 순위대로 장소를 제공함
(카테고리 순위 1위는 8개, 2위는 5개, 3위는 3개의 장소를 제공)
상세설계 내용
소프트웨어 설계
◇ 모듈별로 분리하여 나타낸 그림
◇ 개인 모듈의 회원 정보 모임 정보를 서버에서 가지고 있으며 소셜 로그인 API를 활용한다.
◇ 장소 카테고리별 사용자 선호도 조사를 활용하여 모임 참가자 선호에 맞는 장소를 추천한다.
◇ Google Map API와 Naver Maps API를 사용하여 모임 지도를 생성하여 추천 장소를 제공하고 모임 장소를 정하는데 활용한다.
◇ 모임 관리 모듈의 기능들을 통해 참가자들의 소통을 도우며 약속 계획부터 만남 이후까지 관리한다. 모임 정보를 서버에 저장하고 변경시마다 반영하여 사용자에게 제공한다.
UI Flow
Database 설계
결과 및 평가
완료 작품의 소개
프로토타입 사진 혹은 작동 장면
◇ 어플 아이콘, 로그인 화면, 프로필 설정
◇ 모임 목록, 약속 목록, 약속 내용
◇ 채팅, 게시판, 지각순위, 정산
◇ 공유 캘린더
◇ 중간지점 찾기, 장소 추천, 장소 투표
관련사업비 내역서
완료작품의 평가
향후계획
어려웠던 내용
◇ 중간 지점 찾는 시간 단축
• 이동시간을 가져오는 데에 Google directions API를 사용하였는데 건물이 아니거나 산과 같은 지점에서의 이동시간을 가져오는 것이 불가능하다는 문제가 발생했다. 이를 해결하기 위해 Naver directions API를 이용해 차량 이동시간을 불러왔다. API를 호출하는 것이 다소 시간이 걸리기 때문에 업데이트 횟수를 제한시켰다. 횟수를 3회로 제한시킴으로써 시간은 전보다 단축되었지만 평균 이동시간은 다소 늘어나게 되었다.
◇ 주변 장소 불러오기
• Google places API를 이용해 주변 장소들을 하나씩 호출하여 시간이 많이 소요되었다. 주변 반경을 설정하여 여러 장소들을 한 번에 호출하는 방법을 찾아 시간을 단축시킬 수 있었다.
◇ 장소 추천 방법
• 초기에는 카테고리내에서 별점이 높은 순으로 장소를 추천하였다. 하지만 검색 반경에 따라 사용자가 장소를 선택하는 기준이 달라진다고 생각하여 거리점수를 도입해 검색범위마다 차이를 두었다.
◇ 실시간 db 업데이트
• 여러 사용자들이 같이 사용하다 보니 실시간으로 변경된 내용을 업데이트를 해야 한다.
차후 구현할 내용
◇ 게시글, 약속 내용을 수정하면 사용자가 다른 동작을 하지 않아도 자동 업데이트 되도록 수정
◇ 대면 약속창과 비대면 약속 창을 분리하여 좀 더 사용하기 편리한 UI 제공
◇ 추천 장소에 대한 정보를 간편하게 제공하기 위해 Kakao places와 연계
◇ 정산 후 바로 계좌이체가 가능하도록 Kakao pay와 연계
◇ 전화번호가 없는 친구도 모임에 초대할 수 있게 Kakao talk으로 초대코드를 전송하게 수정
◇ 중간 지점 찾기 화면에서 사용자 마커를 프로필 사진으로 변경 (현재는 기본 프로필 마커)