"육회비빔밥"의 두 판 사이의 차이

cdc wiki
이동: 둘러보기, 검색
 
(같은 사용자의 중간 판 11개는 보이지 않습니다)
215번째 줄: 215번째 줄:
  
 
◇ 손동완 : 데이터마이닝, 프론트엔드
 
◇ 손동완 : 데이터마이닝, 프론트엔드
 +
  
 
* 추진체계
 
* 추진체계
223번째 줄: 224번째 줄:
  
 
◇ 문서 관리는 Notion, 개발 일정 관리는 GitHub Projects & Issues, 버전 관리는 GitHub, 회의 진행은 Google Meet를 활용
 
◇ 문서 관리는 Notion, 개발 일정 관리는 GitHub Projects & Issues, 버전 관리는 GitHub, 회의 진행은 Google Meet를 활용
 +
  
 
==설계==
 
==설계==
240번째 줄: 242번째 줄:
  
 
◇ R6: 공공기관 사용자는 가득찬 폐수거함 위치 정보 API를 받아볼 수 있다
 
◇ R6: 공공기관 사용자는 가득찬 폐수거함 위치 정보 API를 받아볼 수 있다
 +
  
 
* 사용자 요구사항 만족을 위한 기능 정의 및 기능별 정량목표
 
* 사용자 요구사항 만족을 위한 기능 정의 및 기능별 정량목표
245번째 줄: 248번째 줄:
  
 
- Must have: 프로젝트, 제품에 있어 반드시 필요한 기능을 의미
 
- Must have: 프로젝트, 제품에 있어 반드시 필요한 기능을 의미
 +
 
- Should have: 중요하지만 시급성이 Mush have 대비 낮은 기능
 
- Should have: 중요하지만 시급성이 Mush have 대비 낮은 기능
 +
 
- Could have: 있으면 좋지만, 꼭 있어야 할 필요는 없는 기능
 
- Could have: 있으면 좋지만, 꼭 있어야 할 필요는 없는 기능
 +
 
- Wont’t have: 가장 덜 중요하고, 효과도 미미한 기능
 
- Wont’t have: 가장 덜 중요하고, 효과도 미미한 기능
  
  
 
◇ Must have
 
◇ Must have
 +
 +
[[파일:huemap003.png]]
 +
 +
 +
◇ Should have
 +
 +
[[파일:huemap004.png]]
  
  
====설계 사양====
+
* 기능 구현을 위한 세부기술 선택사항
내용
+
 
 +
◇ Spring Framework
 +
Java/Kotlin 기반의 웹 프레임워크이며 DI를 지원하여 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
 +
프로젝트를 간편하게 설정할 수 있도록 도와주는 서브 프로젝트 스프링 부트가 있어 간단한 설정으로 빠른 실행이 가능하다.
 +
 
 +
◇ Docker
 +
도커는 컨테이너 기반의 가상화 플랫폼으로, 도커를 이용하면 이미지를 실행시켜 컨테이너로 만들거나, 생성된 컨테이너를 관리하거나, 컨테이너를 다시 이미지로 만드는 작업을 통해 개발환경을 한번에 설정할 수 있는 이점이 있다.
 +
 
 +
◇ Flutter
 +
Flutter는 구글이 출시한 오픈 소스 크로스 플랫폼으로 GUI 애플리케이션 프레임워크이다. 안드로이드, iOS, 윈도우즈, 리눅스 및 웹용 애플리케이션과 구글 퓨시아용 앱의 주된 소스코드로 사용된다.
 +
 
 +
◇ Flask
 +
Python 기반 micro web framework이며 기본적으로 제공하는 기능이 적어 가벼우나 확장성이 뛰어나고 모듈 형식으로 다양한 기능을 추가할 수 있다.
 +
 
 +
 
 +
◇ 지도상 폐수거함 조회
 +
사용자 편의성과 직관성에 우수한 ‘사용자가 선택한 폐수거함 종류만 조회’ 방식 선택
 +
 
 +
◇ 사용자 제보
 +
신뢰성과 서비스 품질 향상에 우수한 ‘제보하려는 폐수거함과의 일정 거리 이내에서의 제보만 반영’ 방식 선택
 +
 
 +
◇ 클러스러링을 통한 폐수거함 위치 제안
 +
대용량 데이터를 더 잘 다루고 공공기관의 수용 맞는 군집 수를 처리할 수 있는 ‘K-means Clustering’ 방식 선택
  
 
===개념설계안===
 
===개념설계안===
내용
 
  
===이론적 계산 및 시뮬레이션===
+
◇ 서울특별시 내에 설치된 폐수거함 위치 정보 조회
내용
+
:● 일반 쓰레기통, 재활용 쓰레기통, 의류수거함, 폐건전지, 폐형광등, 폐의약품 수거함의 위치 정보 제공
 +
:● 지도상에서 사용자가 선택한 폐수거함 종류별로 위치 정보 제공
 +
 
 +
◇ 폐수거함 제보
 +
:● 서비스에는 존재하지만 실제로는 존재하지 않은 폐수거함 제보
 +
:● 서비스에는 존재하지 않지만 실제로 존재하는 폐수거함 제보
 +
:● 폐수거함의 훼손, 더러움, 가득 찬 정도의 현재 상태 제보
 +
:● 제보자와 제보하려는 폐수거함과의 거리가 10m 이내인 제보만 반영
 +
 
 +
◇ 폐수거함 추가 설치 위치 건의
 +
:● 사용자가 원하는 장소에 폐수거함 설치 건의
 +
 
 +
◇ 공공기관 협력
 +
:● 폐수거함 상태, 폐수거함 추가 설치 건의 현황을 API 형태로 제공
 +
:● 폐수거함 추가 설치 위치를 K-means 클러스터링하여 제공
 +
 
  
 
===상세설계 내용===
 
===상세설계 내용===
내용
+
====소프트웨어 설계====
 +
 
 +
[[파일:huemap005.png]]
 +
 
 +
◇ 일반 사용자는 Flutter 앱 클라이언트로부터 서비스를 제공받는다.
 +
 
 +
◇ 폐수거함 조회, 제보, 건의 요청은 SpringBoot 서버에서 처리한다.
 +
 
 +
◇ 폐수거함, 제보, 건의, 사용자에 관한 데이터는 AWS RDS에 저장하고, SpringBoot와 Flask 서버가 공유한다.
 +
 
 +
◇ 제보를 위해 필요한 사진은 AWS S3에 저장한다.
 +
 
 +
◇ 사용자 인증을 위한 세션 정보는 Redis에 저장한다.
 +
 
 +
◇ 클라이언트의 요청을 처리하는 Nginx는 프록시 서버로서 WAS을 안정적으로 제공할 수 있도록 도와준다.
 +
 
 +
◇ 폐수거함 추가 설치 건의 정보를 Flask 서버에서 클러스터링을 통해 분석한다.
 +
 
 +
◇ 공공기관 사용자는 폐수거함 상태, 건의를 실시간으로 Vue.js을 통해 제공받고, 데이터 분석을 요청한다.
 +
 
 +
 
 +
====UI 정의====
 +
* 가. 화면 목록
 +
 
 +
[[파일:huemap006.png]]
 +
 
 +
 
 +
* 나. 화면 흐름도
 +
 
 +
[[파일:huemap007.png]]
 +
 
 +
 
 +
* 다. 화면 정의
 +
 
 +
◇ 로그인화면 (UI-001)
 +
 
 +
[[파일:huemap008.png]]
 +
 
 +
 
 +
◇ 회원가입화면 (UI-002)
 +
 
 +
[[파일:huemap009.png]]
 +
 
 +
 
 +
◇ 지도화면 (UI-003)
 +
 
 +
[[파일:huemap010.png]]
 +
 
 +
 
 +
◇ 수거함 상세정보 화면 (UI-004)
 +
 
 +
[[파일:huemap011.png]]
 +
 
 +
 
 +
◇ 새 수거함 제보, 건의 화면 (UI-005)
 +
 
 +
[[파일:huemap012.png]]
 +
 
 +
 
 +
◇ 수거함 상태 제보 (UI-006)
 +
 
 +
[[파일:huemap013.png]]
 +
 
 +
 
 +
◇ 잘못된 수거함 투표 (UI-007)
 +
 
 +
[[파일:huemap014.png]]
 +
 
 +
 
 +
◇ 사용자 화면 (UI-008)
 +
 
 +
[[파일:huemap015.png]]
 +
 
 +
 
 +
◇ 건의내역 (UI-009)
 +
 
 +
[[파일:huemap016.png]]
 +
 
 +
 
 +
◇ 분류별 건의내역 (UI-010)
 +
 
 +
[[파일:huemap017.png]]
 +
 
 +
 
 +
◇ 건의 상세 (UI-011)
 +
 
 +
[[파일:huemap018.png]]
 +
 
 +
 
 +
◇ 공지사항 (UI-012)
 +
 
 +
[[파일:huemap019.png]]
 +
 
 +
 
 +
====유스케이스====
 +
 
 +
* 가. 유스케이스 다이어그램
 +
 
 +
[[파일:huemap020.png]]
 +
 
 +
 
 +
* 나. 액터 목록
 +
 
 +
[[파일:huemap021.png]]
 +
 
 +
 
 +
* 다. 유스케이스별 시나리오
 +
 
 +
[[파일:huemap022.png]]
 +
 
 +
 
 +
[[파일:huemap023.png]]
 +
 
 +
 
 +
[[파일:huemap024.png]]
 +
 
 +
 
 +
[[파일:huemap025.png]]
 +
 
 +
 
 +
[[파일:huemap026.png]]
 +
 
 +
 
 +
[[파일:huemap027.png]]
 +
 
 +
 
 +
[[파일:huemap028.png]]
 +
 
 +
 
 +
[[파일:huemap029.png]]
 +
 
 +
 
 +
[[파일:huemap030.png]]
 +
 
 +
 
 +
[[파일:huemap031.png]]
 +
 
 +
 
 +
[[파일:huemap032.png]]
 +
 
 +
 
 +
[[파일:huemap033.png]]
 +
 
 +
 
 +
====데이터베이스====
 +
 
 +
* 가. ERD 다이어그램
 +
 
 +
[[파일:huemap034.png]]
 +
 
 +
 
 +
* 나. 테이블 및 컬럼
 +
 
 +
[[파일:huemap035.png]]
 +
 
 +
 
 +
[[파일:huemap036.png]]
 +
 
 +
 
 +
[[파일:huemap037.png]]
 +
 
 +
 
 +
[[파일:huemap038.png]]
 +
 
 +
 
 +
[[파일:huemap039.png]]
 +
 
 +
 
 +
[[파일:huemap040.png]]
 +
 
 +
 
 +
[[파일:huemap041.png]]
 +
 
 +
 
 +
====API 설계====
 +
 
 +
◇ 회원가입
 +
 
 +
[[파일:huemap042.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Body Parameter
 +
 
 +
[[파일:huemap043.png]]
 +
 
 +
● Response Message
 +
 
 +
[[파일:huemap044.png]]
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap045.png]]
 +
 
 +
 
 +
◇ 로그인
 +
 
 +
JWT 토큰 로그인 기반
 +
 
 +
[[파일:huemap046.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Body Parameter
 +
 
 +
[[파일:huemap047.png]]
 +
 
 +
● Response Message
 +
 
 +
[[파일:huemap048.png]]
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap049.png]]
 +
 
 +
 
 +
◇ 폐수거함 전체 조회
 +
 
 +
[[파일:huemap050.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Query String parameter
 +
 
 +
[[파일:huemap051.png]]
 +
 
 +
● Response Message
 +
 
 +
[[파일:huemap053.png]]
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap054.png]]
 +
 
 +
 
 +
◇ 폐수거함 상세 조회
 +
 
 +
[[파일:huemap055.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Path Segment Parameter
 +
 
 +
[[파일:huemap057.png]]
 +
 
 +
● Response Message
 +
 
 +
[[파일:nhuemap001.png]]
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap058.png]]
 +
 
 +
 
 +
◇ 폐수거함 설치 건의 클러스터링 분석 결과 조회 (공공기관)
 +
 
 +
[[파일:huemap059.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Query String Parameter
 +
 
 +
[[파일:huemap060.png]]
 +
 
 +
● Response Message
 +
 
 +
[[파일:huemap061.png]]
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap062.png]]
 +
 
 +
 
 +
◇ 폐쇄 폐수거함 위치 제보(잘못된 폐수거함 위치 제보)
 +
 
 +
[[파일:huemap063.png]]
 +
 
 +
● Header
 +
 
 +
[[파일:huemap064.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Path Segment Parameter
 +
 
 +
[[파일:huemap065.png]]
 +
 
 +
Body Parameter
 +
 
 +
[[파일:huemap066.png]]
 +
 
 +
● Response Message
 +
 
 +
[[파일:huemap067.png]]
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap068.png]]
 +
 
 +
 
 +
◇ 존재 폐수거함 위치 제보
 +
 
 +
[[파일:huemap069.png]]
 +
 
 +
● Header
 +
 
 +
[[파일:huemap070.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Body Parameter
 +
 
 +
[[파일:huemap071.png]]
 +
 
 +
● Response Message
 +
 
 +
[[파일:huemap072.png]]
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap073.png]]
 +
 
 +
 
 +
◇ 후보 수거함 투표
 +
 
 +
[[파일:huemap074.png]]
 +
 
 +
● Header
 +
 
 +
[[파일:huemap075.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Path Segment Parameter
 +
 
 +
[[파일:huemap076.png]]
 +
 
 +
Body Parameter
 +
 
 +
[[파일:huemap077.png]]
 +
 
 +
● Response Message
 +
 
 +
없음
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap078.png]]
 +
 
 +
 
 +
◇ 폐수거함 상태 제보 v1
 +
 
 +
[[파일:huemap079.png]]
 +
 
 +
● Header
 +
 
 +
[[파일:huemap080.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Path Segment Parameter
 +
 
 +
[[파일:huemap081.png]]
 +
 
 +
Body Parameter
 +
 
 +
[[파일:huemap082.png]]
 +
 
 +
● Response Message
 +
 
 +
[[파일:huemap083.png]]
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap084.png]]
 +
 
 +
 
 +
◇ 폐수거함 상태 제보 v2
 +
 
 +
[[파일:huemap085.png]]
 +
 
 +
● Header
 +
 
 +
[[파일:huemap086.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Path Segment Parameter
 +
 
 +
[[파일:huemap087.png]]
 +
 
 +
Query String
 +
 
 +
[[파일:huemap088.png]]
 +
 
 +
Body Parameter
 +
 
 +
[[파일:huemap089.png]]
 +
 
 +
● Response Message
 +
 
 +
[[파일:huemap090.png]]
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap091.png]]
 +
 
 +
 
 +
◇ 폐수거함 상태 조회 (공공기관)
 +
 
 +
[[파일:huemap092.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Query String Parameter
 +
 
 +
[[파일:huemap093.png]]
 +
 
 +
● Response Message
 +
 
 +
[[파일:huemap094.png]]
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap095.png]]
 +
 
 +
 
 +
◇ 폐수거함 설치 건의
 +
 
 +
[[파일:huemap096.png]]
 +
 
 +
● Header
 +
 
 +
[[파일:huemap097.png]]
 +
 
 +
● Request Parameters
 +
 
 +
Body Parameter
 +
 
 +
[[파일:huemap098.png]]
 +
 
 +
● Response Message
 +
 
 +
[[파일:huemap099.png]]
 +
 
 +
● Error spec
 +
 
 +
[[파일:huemap100.png]]
  
 
==결과 및 평가==
 
==결과 및 평가==
 
===완료 작품의 소개===
 
===완료 작품의 소개===
 
====프로토타입 사진 혹은 작동 장면====
 
====프로토타입 사진 혹은 작동 장면====
내용
+
* 가. 앱 프로토타입 사진
====포스터====
+
 
내용
+
[[파일:huemap101.png]]
 +
 
 +
[[파일:huemap102.png]]
 +
 
 +
[[파일:huemap103.png]]
 +
 
 +
 
 +
* 나. 웹 프로토타입 사진
 +
 
 +
[[파일:huemap104.png]]
 +
 
 +
 
 +
====설치====
 +
 
 +
* 가. 앱 SW 구성 방법
 +
 
 +
◇ 앱 구동 환경: 안드로이드
 +
 
 +
[[파일:huemap105.png]]
 +
 
 +
 
 +
* 나. 웹 SW 구성 방법
 +
 
 +
◇ 웹 구동 환경: 웹 브라우저
 +
 
 +
◇ 웹 접속 방법: https://huemap.shop 접속
 +
 
 +
[[파일:huemap106.png]]
 +
 
 +
 
 +
====실행====
 +
 
 +
* 가. 맵 SW 실행 방법
 +
 
 +
◇ Viewer 앱 실행
 +
 
 +
[[파일:huemap107.png]]
 +
 
 +
 
 +
◇ User 새 수거함 제보 및 투표
 +
 
 +
[[파일:huemap108.png]]
 +
 
 +
 
 +
◇ User 잘못된 수거함 제보
 +
 
 +
[[파일:huemap109.png]]
 +
 
 +
 
 +
◇ User 폐수거함 상태 제보
 +
 
 +
[[파일:huemap110.png]]
 +
 
 +
 
 +
◇ User 폐수거함 위치 건의
 +
 
 +
[[파일:huemap111.png]]
 +
 
 +
 
 +
* 나. 웹 SW 실행 방법
 +
 
 +
◇ 공공기관 사용자의 전체적인 실행 흐름
 +
 
 +
[[파일:huemap112.png]]
 +
 
 +
[[파일:huemap113.png]]
 +
 
 +
[[파일:huemap114.png]]
 +
 
 +
 
 +
====성과물====
 +
 
 +
* 가. 프로젝트 github 주소
 +
 
 +
◇ https://github.com/orgs/Yukhoebibimbap/repositories
 +
 
 +
 
 +
* 나. 애플리케이션 다운로드 주소
 +
 
 +
◇ [[파일:huemap121.png]]
 +
 
 +
 
 +
* 다. API DOCUMENT
 +
 
 +
◇ https://www.notion.so/API-dcb1304c9a2f4aeea06f0ea225516829 (프로젝트 Notion API DOCUMENT 페이지 주소)
 +
 
 +
[[파일:huemap115.png]]
 +
 
  
 
===관련사업비 내역서===
 
===관련사업비 내역서===
내용
+
[[파일:huemap116.png]]
 +
 
  
 
===완료작품의 평가===
 
===완료작품의 평가===
내용
+
[[파일:huemap117.png]]
 +
 
 +
 
 +
◇ Implementation Completeness
 +
 
 +
[[파일:huemap118.png]]
 +
 
 +
 
 +
◇ Implementation Accuracy
 +
 
 +
[[파일:huemap120.png]]
 +
 
 +
 
 +
◇ Data Preprocessing
 +
 
 +
[[파일:huemap119.png]]
 +
 
  
 
===향후계획===
 
===향후계획===
내용
 
  
===특허 출원 내용===
+
* 가. 어려웠던 내용들
내용
+
 
 +
◇ 데이터의 도로명 주소를 Kakao API를 이용해 지리좌표계로 변환하여 지도에 표기해야 하는데, 폐수거함 도로명 주소 데이터의 형식이 제각각이었다. 도로명 주소에 해당 폐수거함의 위치를 식별할 수 있는 "옆, 앞, 사이, 건너편" 등의 수식어가 붙어 있었기에 정규 표현식으로 문자열을 식별해 잘랐다. 그럼에도 예외 사항이 많았고 프로젝트 진행이 우선되어야 했기에 일부 수작업으로 진행하였다.
 +
 
 +
◇ 앱 애플리케이션에서 지도를 제공하기위해 Kakao에서 제공하는 API와 Flutter의 공식 라이브러리인 Webview를 이용했는데, Flutter 개발환경에서 목적을 달성할 수 있는지 확인하고, 개발을 진행하는 초기단계에서 어려움을 느꼈다.
 +
 
 +
◇ 로그인 방식 구현에 있어서 JWT와 세션 로그인 방식의 고민이 있었다. 프론트-백 간의 숙련도 차이로 Session login 방식을 체택하였지만, 모바일 기기 특성상 IP주소가 변경되면 session 유지가 풀리는 문제가 하였다. 이를 해결하기 위해서 JWT Token을 활용하여 로그인 방식을 구현하였다.
 +
 
 +
◇ 웹 소켓을 사용하기 위해 netty-socket.io 라는 라이브러리를 사용했는데 관련 자료가 적어서 구현하는데 어려움이 있었다.
 +
 
 +
◇ Vue.js를 사용한 공공기관용 웹 개발 시에 카카오 맵과 axios 요청이 순서가 꼬여서 비동기 설정을 하는데 어려움이 있었다.
 +
 
 +
◇ 전처리된 데이터가 총 14200개인데, 사용자가 조회하려는 폐수거함을 선택하고 조회하는 기능에서 응답 속도가 느린 것을 확인할 수 있었다. 가장 긴 응답 속도를 가지는 의류수거함 조회 API 응답 속도가 약 2.17s로 측정되었다. 이를 해결하기 위해 레디스를 활용하여 캐시를 적용하였다. 그 결과 응답 속도가 약 17ms로 단축되어 큰 성능 향상을 이루었다.
 +
 
 +
◇ 사용자로부터 폐수거함의 위도와 경도를 서버로 전달받아 서비스에 등록하는 존재하는 폐수거함 제보 기능이 있다. 전달받은 위도와 경도를 Kakao에서 제공하는 ‘좌표로 주소 변환하기’ OPEN API를 사용하여 도로명 주소로 변환하였으나, 모든 도로명 주소가 좌표에 따라 반환되지 않은 경우가 있었다. 따라서 변환되지 않은 폐수거함 같은 경우에는 임의로 위도와 경도 값을 해당 폐수거함의 도로명 주소와 자치구 데이터 값에 삽입하였다.
 +
 
 +
 
 +
* 나. 차후 구현할 내용
 +
 
 +
◇ 현재 ‘서울’이라는 한정된 지역에서만 운영되는 서비스이다. 공공데이터를 활용해서 전국의 폐수거함을 조회하고 제보와 건의하여 사람들의 불편함을 해소할 필요가 있다.
 +
 
 +
◇ 안드로이드 버전 뿐만 아니라 IOS 버전에서도 사용 가능한 앱 애플리케이션을 제작한다.
 +
 
 +
◇ Kakao에서 제공하는 ‘좌표로 주소 변환하기’ OPEN API에서 모든 도로명 주소가 좌표에 따라 반환되지 않은 경우가 있었다. 존재하는 폐수거함 제보 기능이 위 OPEN API를 사용하는데, 정교한 주소 변환 작업과 이미 등록된 예비 폐수거함 위치 데이터를 변환할 필요가 있다.
 +
 
 +
◇ 사용자로부터 폐수거함에 대한 제보와 건의를 받고 있다. 이를 사용자가 서비스 내에서 조회하고 반영이 되었는지 확인하는 기능을 추가할 필요가 있다.
 +
 
 +
◇ 현재 API DOCUMENT가 수동으로 작성되고 있다. 수동으로 작성하면 언젠가는 문서와 개발과의 불일치가 발생할 수 있으므로 API DOCUMENT를 자동으로 만들어주는 자동화 작업이 필요하다.
 +
 
 +
◇ 현재 공공기관용 웹에서만 폐수거함 상태를 확인할 수 있는데 앱에서는 해당 기능이 없어 사용자들이 가득찬 폐수거함을 찾아갔다가 헛걸음하는 일이 없도록 폐수거함이 가득찼는지 앱에서도 알려주도록 추후에 구현할 필요가 있다.
 +
 
 +
◇ 폐수거함 상태 제보 이미지에 대한 검증 없이 받고 있는데 딥러닝으로 수거함 가득참, 훼손, 주변 더러움을 판별하면 상태 제보에 대한 신뢰도가 올라갈 것 같다.
 +
 
 +
◇ 앱에서 자신의 위치 정보는 앱 진입 시와 현재 위치 GPS 버튼을 눌렀을 때만 갱신된다. 지도를 보면서 이동하면 실시간으로 반영하면 좋을 것 같다.
 +
 
 +
◇ 현재 GPS를 통해 자신의 위치의 지도 정보를 제공받을 수는 있지만 GPS가 작동하지 않는 경우에도 서비스를 이용하는데 불편이 없게 하기 위해 검색을 통해 원하는 위치의 지도 정보를 제공하는 기능을 구현할 필요가 있다.
 +
 
 +
 
 +
===부록===
 +
 
 +
====참고문헌 및 참고사이트====
 +
 
 +
◇ 공공 데이터 API
 +
https://www.data.go.kr/
 +
https://data.seoul.go.kr/
 +
 
 +
◇ 카카오맵 API
 +
https://apis.map.kakao.com/web/documentation/
 +
 
 +
 
 +
====관련특허====
 +
 
 +
◇ 쓰레기통 위치전송 시스템 - 1020170145657
 +
 
 +
야외 쓰레기통에 쓰레기통 위치 전송 칩을 부착하고, 쓰레기 소지자들이 모바일 앱을 설치해 이를 실행하면 근거리 반경 50-70m내의 쓰레기통에 부착된 쓰레기통의 위치를 모바일 앱에 표시한다.
 +
 
 +
◇ 쓰레기통 GPS 위치관리와 자동수거요청을 통한 스마트 쓰레기 자동 수거 서비스 시스템 – 1020170145657
 +
 
 +
쓰레기통용 센싱노드부, 자동수거용 스마트 디바이스, 스마트 자동수거 중계모듈을 통해 쓰레기통에 내용물이 꽉 찼을시, 사용자가 직접 나서지 않아도, 자동 수거 요청을 통해 자동수거서비스를 지원받을 수 있는 새로운 스마트 쓰레기 자동수거 중계시스템을 구축시킬 수 있다
 +
 
 +
====소프트웨어 프로그램 소스====
 +
 
 +
◇ https://github.com/orgs/Yukhoebibimbap/repositories (프로젝트 Github Repository 주소로 대체)

2022년 12월 20일 (화) 01:29 기준 최신판

프로젝트 개요

기술개발 과제

국문 : 서울특별시 폐수거함 위치 정보 제공 서비스

영문 : Huemap

과제 팀명

육회비빔밥

지도교수

최* 교수님

개발기간

2022년 9월 ~ 2022년 12월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터과학부·과 20179200** 강**(팀장)

서울시립대학교 컴퓨터과학부·과 20179200** 김**

서울시립대학교 컴퓨터과학부·과 20179200** 류**

서울시립대학교 컴퓨터과학부·과 20179200** 손**

서론

개발 과제의 개요

개발 과제 요약

◇ 대다수의 서울시민이 현재 서울시내에 설치된 폐수거함을 찾는 것을 어려워하고 폐수거함이 충분하지 않게 설치됐다고 여긴다.

◇ 무단투기를 방지하고 폐수거함을 찾고자하는 서울시민의 편의성 증대를 위해 서울특별시 폐수거함 위치 정보 서비스를 개발하고자 한다.

◇ 서울특별시에 설치된 쓰레기통, 의류수거함, 폐건전지 수거함 등 여러 폐수거함들의 위치 정보를 제공한다.

◇ 사용자는 폐수거함에 대한 제보를 통해 서울시내 폐수거함 관리에 기여할 수 있다.

◇ 공공기관에게 API를 통한 폐수거함 정보를 제공한다.


개발 과제의 배경

◇ 지난 1995년 서울시 쓰레기통 종량제 시행된 개수는 약 7607개였다. 하지만 가정과 사업장 등 쓰레기를 길거리 쓰레기에 배출하는 일이 잇따르면서 서울시는 2007년 3707개로 줄였다. 하지만 대중교통 이용시 뚜껑이 없는 음료나 음식이 승차거부 되면서 쓰레기통을 찾지 못하는 시민들의 불편과 민원이 증가하기 시작했다.

◇ 가정에서 복용하지 않고 남은 폐의약품, 수명을 다한 폐형광등, 폐건전지, 입지 않은 의류 등을 종량제 봉투, 하수 등을 통해 배출되는 경우 유해 성분이 토양이나 하천에 유입돼 수생태계를 교란시키고 인체 건강을 위협할 수 있기에 철저한 관리가 필요하다.

◇ 폐수거함 위치에 대한 정보가 부족해 시민들이 지차체로 문의하거나 찾아 버리기 귀찮다는 것을 이유로 종량제 봉투에 버리는 경우가 많았다.

◇ 서울시민에게 근처에 있는 폐수거함을 쉽게 이용할 수 있도록 도와주고 투기 문제를 해결하기 위하여 프로젝트를 시작하게 되었다.

◇ 폐수거함을 찾지 못하는 대상에게 근처에 있는 폐수거함 위치 정보를 제공할 수 있고 사용자 제보를 통하여 폐수거함 관리에 기여할 수 있다.

◇ 사용자 제보를 공공기관에게 제공함으로써 폐수거함 청결 문제 해결, 폐수거함 추가 설치 등을 기대할 수 있다.


개발 과제의 목표 및 내용

◇ 서울특별시에 설치된 쓰레기통, 의류수거함, 폐건전지, 폐형광등 수거함, 폐의약품 수거함의 위치 정보를 지도 형태로 제공한다.

◇ 사용자는 폐수거함에 대한 제보를 할 수 있다.

● 서비스에는 존재하지만 실제로는 존재하지 않은 폐수거함을 제보할 수 있다.
● 서비스에는 존재하지 않지만 실제로 존재하는 폐수거함을 제보할 수 있다.
● 서비스에 존재하는 폐수거함의 훼손, 더러움, 가득 찬 정도의 현재 상태를 제보할 수 있다.
● 적절한 폐수거함의 위치를 건의할 수 있다.

◇ 공공기관에게 폐수거함 상태, 폐수거함 설치 건의 현황을 API 형태로 제공한다.

● 사용자가 수거함이 필요하다고 생각하는 위치를 제보하면 제보량이 많은 지역을 공공기관에게 제공


관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

  • 전 세계적인 기술현황

◇ Clustering 유사한 성격의 객체들을 같은 그룹으로 묶어 그룹화하고, 서로 유사하지 않은 성격의 객체들은 다른 그룹으로 분리하는 것을 클러스터링이라고 한다.

● K-means Clustering
○ 주어진 데이터를 k개의 클러스터로 그룹화하는 알고리즘
○ 그룹간 비유사도(dissimilarity)와 같은 비용 함수(cost function)을 최소화하는 방식
○ 표준적으로 각 클러스터와 거리 차이의 분산을 최소화하는 방식을 사용한다.
● DBSCAN Clustering
○ 가까운 데이터끼리 그룹화하는 알고리즘
○ 이웃(neighbor)이 많은 점을 그룹화하고 저밀도 지역에 떨어진 점을 outlier로 마킹한다.
○ 특정 분포를 따르지 않는 데이터에 더 유연한 장점이 있다.

◇ Open API

● Open API(Open Application Programming Interface, Open API, 공개 API) 또는 공개 API는 개발자라면 누구나 사용할 수 있도록 공개된 API를 말하며, 개발자에게 사유 응용 소프트웨어나 웹 서비스의 프로그래밍 적인 권한을 제공한다.
● 구글, 카카오, 네이버 등의 여러 기업들은 개발자들을 위한 API를 제공하는 대표적인 예이다. 또한 대한민국 정부에서는 공공데이터포털을 통해 도로명 주소 조회 서비스, 동네예보정보조회서비스 등 Open API를 현재 운영 및 제공하고 있다.


  • 특허조사

◇ 쓰레기통 위치전송 시스템 - 1020170145657

야외 쓰레기통에 쓰레기통 위치 전송 칩을 부착하고, 쓰레기 소지자들이 모바일 앱을 설치해 이를 실행하면 근거리 반경 50-70m내의 쓰레기통에 부착된 쓰레기통의 위치를 모바일 앱에 표시한다.

◇ 쓰레기통 GPS 위치관리와 자동수거요청을 통한 스마트 쓰레기 자동 수거 서비스 시스템 - 1020170145657

쓰레기통용 센싱노드부, 자동수거용 스마트 디바이스, 스마트 자동수거 중계모듈을 통해 쓰레기통에 내용물이 꽉 찼을시, 사용자가 직접 나서지 않아도, 자동 수거 요청을 통해 자동수거서비스를 지원받을 수 있는 새로운 스마트 쓰레기 자동수거 중계시스템을 구축시킬 수 있다


  • 특허 전략 분석

◇ 쓰레기통에 위치 전송 칩을 부착하지 않아도 앱으로 쓰레기통의 위치를 알 수 있고 사용자를 통해 최신 정보가 업데이트 되므로 비용적인 측면에서 매우 현실적이다.

◇ 쓰레기통 자동수거를 위해 3개의 장치가 필요했던 기존 특허와 달리 모바일 앱 하나만으로 쓰레기통의 자동수거가 가능하다.


  • 기술 로드맵

◇ 수거함 위치정보 데이터 수집 -> 수거함에 쓰레기를 버리도록 참여 유도

◇ 수거함 상태, 수요 데이터 수집 -> 공공기관의 수요에 맞는 형태로 데이터 제공

◇ 클러스터링 -> 시민들의 수요에 맞는 수거함 위치 제안

◇ Open API 제공 -> 공공기관에 api를 통해 수거함 관련 정보 제공


시장상황에 대한 분석

  • 경쟁제품 조사 비교

Huemap001.png

◇ 쓰레기통 찾기 (https://play.google.com/store/apps/details?id=studios.applab.dustbinfinder)

● GPS 기술을 활용한 쓰레기통 위치 제공 애플리케이션
● 쓰레기통을 재활용과 비 재활용으로 구분하여 지도 기반 위치 조회 가능
● 넓은 사용 대상 지역의 설정 (글로벌)
● 공공데이터 미사용
● 쓰레기통 위치 정보가 제공되는 지역이 한정적이며 표시되는 개수 또한 적음
● 서비스에 등록되어 있지 않은 쓰레기통은 사용자의 참여로 제보 및 등록 가능
● 쓰레기통 위치 등록은 다른 사용자들의 채점을 통해 이뤄지고 점수가 너무 낮은 경우 허위 정보로 판단해 등록이 취소됨
● 사용자의 참여에 전적으로 의존하여 서비스 운영


◇ 쓰게더 (https://play.google.com/store/apps/details?id=kr.co.oliveandwine.trashcan&ref=apkcombo.com)

● 전국 쓰레기통 위치 안내 서비스 애플리케이션
● 쓰레기통의 위치를 지도상의 아이콘으로 표시하고, 아이콘 클릭시 해당 쓰레기통에 대한 정보(주소, 작성자, 내용) 제공
● 대한민국 전국 사용 대상
● 사용자는 사진과 위치를 서비스에 제공하여 미등록된 쓰레기통 등록 제보 가능
● 선택한 쓰레기통을 도착지로 설정하여 현재 위치로부터 도착지까지의 만보기 서비스 제공
● 서울특별시의 경우 공공데이터의 활용을 통해 1,000개 이상의 쓰레기통 위치가 등록되어 있음
● 일반 쓰레기통만을 취급하여 쓰레기통 종류에 따른 분류가 따로 있지 않습니다.


◇ Intellibins (http://intellibins.nyc/)

● 재활용 쓰레기통 위치 안내, 재활용 품목 정보 제공 애플리케이션
● 현재 서비스 종료
● 뉴욕시의 5개 자치구 대상
● 지도를 기반으로 1,535개의 재활용 수거 장소와 21개의 재활용 품목에 대한 정보 제공
● 지도상의 쓰레기통 아이콘 클릭시 쓰레기통이 설치된 곳의 주소, 현재 위치에서 떨어진 거리와 그곳에서 재활용이 가능한 다른 품목 정보 제공
● 의류, 전자기기 등 다양한 종류의 수거함을 분류하여 취급
● 가장 가까운 위치의 수거함을 자동으로 찾아주는 기능 제공


  • 마케팅 전략 제시

◇ Strength (강점)

● 관련 시장에 대한 분석 단계에서 프로젝트와 동일한 서비스를 제공하는 애플리케이션을 찾을 수 없었다. ‘쓰레기통 찾기’, ‘쓰게더’는 위치 기반 쓰레기통 위치 정보만들 제공해주는 애플리케이션이다. ‘Intellibins’는 쓰레기통에 대한 정보를 제공하지만 우리나라와 쓰레기통 수거 방법이 다른 것으로 확인되었고 현재 종료된 서비스이다. 또한 국내를 대상으로 한 ‘쓰레기통 찾기’는 공공 데이터가 아닌 사용자의 제보로만 등록된 쓰레기통으로 서비스를 운영하고 있다.
● 본 프로젝트는 쓰레기통 뿐만 아니라 일반 쓰레기통, 재활용 쓰레기통, 의류수거함, 폐형광등 수거함, 폐건전지 수거함, 폐의약품 수거함 총 7개의 폐수거함의 정보를 제공하여 폐수거함을 찾고자 하는 서울 시민들의 편의성을 증대시키기 위한 해결책을 제시한다.
● 7개의 폐수거함에 대한 정보는 공공데이터 포털에서 제공하는 서울특별시 각 구의 수거함 정보 데이터를 활용하여 애플리케이션 하나로 정확한 위치에서 간편하게 버릴 수 있도록 한다.
● 사용자의 자발적인 참여로 아직 서비스에 등록되지 않은 폐수거함의 정보를 등록하고 이를 검증하여 서비스의 품질을 향상시킨다. 사용자들이 폐수거함의 수요가 있다고 생각하는 위치를 검토해볼 수 있도록 수거함 설치 제안 기능을 갖는다. 또한 폐수거함이 꽉 차거나 제대로 관리되지 않아 문제가 생겼을 때 사용자가 이를 서비스에 제보할 수 있는 기능을 갖는다.

◇ Weakness (약점)

● 첫 번째, 공공데이터를 활용하여 공익성을 추구하는 프로젝트이기 때문에 상용적인 기능으로 수익 창출을 고려하지 않아도 된다. 하지만 서비스를 운영하고 관리하기 위해서는 최소한의 비용이 필요하고 서비스의 품질을 항샹시키기 위하여 관리 및 유지보수를 자동화 해야한다.
● 이를 극복하기 위해서는 사용자의 자발적인 참여와 공공기관의 협력 관계를 형성할 수 있다. 서비스에는 존재하지만 실제로는 존재하지 않은 폐수거함 제보, 서비스에는 존재하지 않지만 실제로 존재하는 폐수거함 제보, 서비스에 존재하는 폐수거함의 훼손, 더러움, 가득 찬 정도의 현재 상태 제보, 적절한 폐수거함 위치 건의를 통해 사용자의 자발적인 참여로 서비스의 품질을 향상시킬 수 있다. 또한 사용자 제보를 공공기관에게 제공함으로써 폐수거함 청결 문제 해결, 폐수거함 추가 설치 등을 기대할 수 있다.
● 두 번째, 폐수거함을 관리하는 공공기관과의 협력 관계가 형성되지 않으면 폐수거함 관리 요청, 폐수거함 추가 설치 제안 등의 기능이 제대로 작동하지 못할 수 있다.
● 이를 극복하기 위해서 폐수거함을 관리하는 공공기관에게 공공기관의 수요에 맞는 형태로 API를 제공함으로써 언제든지 접근할 수 있도록 도와줄 수 있다. 폐수거함 추가 설치 같은 경우에는 클러스터링을 통하여 서울시민들의 수요를 쉽게 확인할 수 있도록 도움을 줄 수 있다.

◇ Opportunity (기회)

● 서울특별시에서 서비스가 좋은 성과를 거두면 각 지자체와의 협력으로 서비스 제공구역 범위의 확장을 기대할 수 있다.
● 분리수거 쓰레기가 제대로 수거되어 쓰레기 문제로 발생하는 국가적 비용을 줄이고 환경 생태계를 보호하는 한편, 사람들의 움직임이 많은 거리, 시설의 미화효과 등을 기대해 볼 수 있다.

◇ Threat (위협)

● 아무리 긍정적인 기대효과가 있어도 사람들의 흥미와 관심을 이끌어내지 못하면 의미가 없다. 이에 쓰레기 분리수거와 수거 대상에 대한 도움이 되는 정보를 제공하거나, 사용자의 참여로 나타나는 긍정적인 변화의 지표를 게시하는 등 참여를 장려할 방안을 생각해 볼 수 있다.
● 거주지 공용 쓰레기통에서 종종 일어나는 생활쓰레기 배출 사례와 같이 공공 쓰레기통의 부정사용을 부추기는 등의 역효과를 방지해야한다. 생활쓰레기 배출 우발 쓰레기통에 무게 센서를 장착하는 등의 방법을 생각해볼 수 있다.


개발과제의 기대효과

기술적 기대효과

◇ 서울시 내의 쓰레기통, 의류수거함, 폐건전지 수거함, 폐형광등 수거함, 폐의약품 수거함 위치 정보를 API 형태로 외부에 공개함으로써 서비스의 저변을 넓힐 수 있다.

◇ 사용자의 참여로 아직 등록되지 않은 수거함의 정보를 등록하여 추후 업데이트에 영향을 미칠 수 있다.

◇ 쓰레기통이나 수거함의 위치에 대한 정보 데이터 전처리와 데이터를 가공 및 클러스터링을 거쳐 적절한 설치 위치를 각 행정구역 공공기관에게 추천할 수 있다.

경제적, 사회적 기대 및 파급효과

◇ 쓰레기통이나 수거함을 찾지 못하는 대상에게 가까운 쓰레기통의 위치를 제공함으로써 쓰레기 투기 현상을 감소시킬 수 있다.

◇ 쓰레기통이나 수거함이 꽉 차거나 제대로 관리되지 않아 생긴 문제들을 해당 행정구역 공공기관에게 알릴 수 있다.

◇ 사용자들이 적절한 수거함의 위치를 직접 제보함으로써 길거리 쓰레기통과 수거함 부족 문제 해결에 직접 영향력을 미치게 할 수 있다.


기술개발 일정 및 추진체계

개발 일정

Huemap002.png

구성원 및 추진체계

  • 구성원

◇ 강민성(팀장) : 프론트엔드

◇ 김지산 : 백엔드

◇ 류영준 : 백엔드

◇ 손동완 : 데이터마이닝, 프론트엔드


  • 추진체계

◇ 매주 정기 회의 시 진척도 보고와 피드백, 차주 계획 회의를 진행한다.

◇ 진척도 보고 시 지난주 구현 일정의 완성도를 수치화 하여 보고하며 이후 개발 일정에 수시로 반영한다.

◇ 문서 관리는 Notion, 개발 일정 관리는 GitHub Projects & Issues, 버전 관리는 GitHub, 회의 진행은 Google Meet를 활용


설계

설계사양

제품의 요구사항

  • 사용자 요구사항

◇ R1: 일반 사용자는 폐수거함이 표시된 지도를 볼 수 있다.

◇ R2: 일반 사용자는 지정한 폐수거함에 대한 상세 정보를 볼 수 있다.

◇ R3: 일반 사용자는 서비스에는 존재하지만 실제로는 존재하지 않은 폐수거함을 제보할 수 있다.

◇ R4: 일반 사용자는 서비스에 존재하는 폐수거함의 현재 상태(가득참, 훼손)를 제보할 수 있다.

◇ R5: 공공기관 사용자는 적절한 폐수거함의 위치를 건의할 수 있다.

◇ R6: 공공기관 사용자는 가득찬 폐수거함 위치 정보 API를 받아볼 수 있다


  • 사용자 요구사항 만족을 위한 기능 정의 및 기능별 정량목표

소프트웨어 개발 방법론 중 하나인 애자일(Agile) 방법론을 적용하며 프로젝트를 진행하고 있다. 기획 과정을 통해서 기획안을 작성하는데 애자일 방법론에서는 유저스토리와 백로그를 만들면서 방향을 나타낸다. 유저스토리(user story)는 통상 ‘요구 사항’이라고 부르는 시스템의 기능 설명을 사용자 관점에 이야기 하는 것이다. 백로그는 기능들에 대한 우선순위를 나타내고 기능적인 방향성, 비즈니스적 관점에 대해서 나타내며 추진해야 하는 업무를 뜻한다. 우선순위를 정하기 위해서 MosCow 방법론을 가지고 제품의 요구사항을 정의하였다.

- Must have: 프로젝트, 제품에 있어 반드시 필요한 기능을 의미

- Should have: 중요하지만 시급성이 Mush have 대비 낮은 기능

- Could have: 있으면 좋지만, 꼭 있어야 할 필요는 없는 기능

- Wont’t have: 가장 덜 중요하고, 효과도 미미한 기능


◇ Must have

Huemap003.png


◇ Should have

Huemap004.png


  • 기능 구현을 위한 세부기술 선택사항

◇ Spring Framework

Java/Kotlin 기반의 웹 프레임워크이며 DI를 지원하여 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

프로젝트를 간편하게 설정할 수 있도록 도와주는 서브 프로젝트 스프링 부트가 있어 간단한 설정으로 빠른 실행이 가능하다.

◇ Docker

도커는 컨테이너 기반의 가상화 플랫폼으로, 도커를 이용하면 이미지를 실행시켜 컨테이너로 만들거나, 생성된 컨테이너를 관리하거나, 컨테이너를 다시 이미지로 만드는 작업을 통해 개발환경을 한번에 설정할 수 있는 이점이 있다.

◇ Flutter

Flutter는 구글이 출시한 오픈 소스 크로스 플랫폼으로 GUI 애플리케이션 프레임워크이다. 안드로이드, iOS, 윈도우즈, 리눅스 및 웹용 애플리케이션과 구글 퓨시아용 앱의 주된 소스코드로 사용된다.

◇ Flask

Python 기반 micro web framework이며 기본적으로 제공하는 기능이 적어 가벼우나 확장성이 뛰어나고 모듈 형식으로 다양한 기능을 추가할 수 있다.


◇ 지도상 폐수거함 조회 사용자 편의성과 직관성에 우수한 ‘사용자가 선택한 폐수거함 종류만 조회’ 방식 선택

◇ 사용자 제보 신뢰성과 서비스 품질 향상에 우수한 ‘제보하려는 폐수거함과의 일정 거리 이내에서의 제보만 반영’ 방식 선택

◇ 클러스러링을 통한 폐수거함 위치 제안 대용량 데이터를 더 잘 다루고 공공기관의 수용 맞는 군집 수를 처리할 수 있는 ‘K-means Clustering’ 방식 선택

개념설계안

◇ 서울특별시 내에 설치된 폐수거함 위치 정보 조회

● 일반 쓰레기통, 재활용 쓰레기통, 의류수거함, 폐건전지, 폐형광등, 폐의약품 수거함의 위치 정보 제공
● 지도상에서 사용자가 선택한 폐수거함 종류별로 위치 정보 제공

◇ 폐수거함 제보

● 서비스에는 존재하지만 실제로는 존재하지 않은 폐수거함 제보
● 서비스에는 존재하지 않지만 실제로 존재하는 폐수거함 제보
● 폐수거함의 훼손, 더러움, 가득 찬 정도의 현재 상태 제보
● 제보자와 제보하려는 폐수거함과의 거리가 10m 이내인 제보만 반영

◇ 폐수거함 추가 설치 위치 건의

● 사용자가 원하는 장소에 폐수거함 설치 건의

◇ 공공기관 협력

● 폐수거함 상태, 폐수거함 추가 설치 건의 현황을 API 형태로 제공
● 폐수거함 추가 설치 위치를 K-means 클러스터링하여 제공


상세설계 내용

소프트웨어 설계

Huemap005.png

◇ 일반 사용자는 Flutter 앱 클라이언트로부터 서비스를 제공받는다.

◇ 폐수거함 조회, 제보, 건의 요청은 SpringBoot 서버에서 처리한다.

◇ 폐수거함, 제보, 건의, 사용자에 관한 데이터는 AWS RDS에 저장하고, SpringBoot와 Flask 서버가 공유한다.

◇ 제보를 위해 필요한 사진은 AWS S3에 저장한다.

◇ 사용자 인증을 위한 세션 정보는 Redis에 저장한다.

◇ 클라이언트의 요청을 처리하는 Nginx는 프록시 서버로서 WAS을 안정적으로 제공할 수 있도록 도와준다.

◇ 폐수거함 추가 설치 건의 정보를 Flask 서버에서 클러스터링을 통해 분석한다.

◇ 공공기관 사용자는 폐수거함 상태, 건의를 실시간으로 Vue.js을 통해 제공받고, 데이터 분석을 요청한다.


UI 정의

  • 가. 화면 목록

Huemap006.png


  • 나. 화면 흐름도

Huemap007.png


  • 다. 화면 정의

◇ 로그인화면 (UI-001)

Huemap008.png


◇ 회원가입화면 (UI-002)

Huemap009.png


◇ 지도화면 (UI-003)

Huemap010.png


◇ 수거함 상세정보 화면 (UI-004)

Huemap011.png


◇ 새 수거함 제보, 건의 화면 (UI-005)

Huemap012.png


◇ 수거함 상태 제보 (UI-006)

Huemap013.png


◇ 잘못된 수거함 투표 (UI-007)

Huemap014.png


◇ 사용자 화면 (UI-008)

Huemap015.png


◇ 건의내역 (UI-009)

Huemap016.png


◇ 분류별 건의내역 (UI-010)

Huemap017.png


◇ 건의 상세 (UI-011)

Huemap018.png


◇ 공지사항 (UI-012)

Huemap019.png


유스케이스

  • 가. 유스케이스 다이어그램

Huemap020.png


  • 나. 액터 목록

Huemap021.png


  • 다. 유스케이스별 시나리오

Huemap022.png


Huemap023.png


Huemap024.png


Huemap025.png


Huemap026.png


Huemap027.png


Huemap028.png


Huemap029.png


Huemap030.png


Huemap031.png


Huemap032.png


Huemap033.png


데이터베이스

  • 가. ERD 다이어그램

Huemap034.png


  • 나. 테이블 및 컬럼

Huemap035.png


Huemap036.png


Huemap037.png


Huemap038.png


Huemap039.png


Huemap040.png


Huemap041.png


API 설계

◇ 회원가입

Huemap042.png

● Request Parameters

Body Parameter

Huemap043.png

● Response Message

Huemap044.png

● Error spec

Huemap045.png


◇ 로그인

JWT 토큰 로그인 기반

Huemap046.png

● Request Parameters

Body Parameter

Huemap047.png

● Response Message

Huemap048.png

● Error spec

Huemap049.png


◇ 폐수거함 전체 조회

Huemap050.png

● Request Parameters

Query String parameter

Huemap051.png

● Response Message

Huemap053.png

● Error spec

Huemap054.png


◇ 폐수거함 상세 조회

Huemap055.png

● Request Parameters

Path Segment Parameter

Huemap057.png

● Response Message

Nhuemap001.png

● Error spec

Huemap058.png


◇ 폐수거함 설치 건의 클러스터링 분석 결과 조회 (공공기관)

Huemap059.png

● Request Parameters

Query String Parameter

Huemap060.png

● Response Message

Huemap061.png

● Error spec

Huemap062.png


◇ 폐쇄 폐수거함 위치 제보(잘못된 폐수거함 위치 제보)

Huemap063.png

● Header

Huemap064.png

● Request Parameters

Path Segment Parameter

Huemap065.png

Body Parameter

Huemap066.png

● Response Message

Huemap067.png

● Error spec

Huemap068.png


◇ 존재 폐수거함 위치 제보

Huemap069.png

● Header

Huemap070.png

● Request Parameters

Body Parameter

Huemap071.png

● Response Message

Huemap072.png

● Error spec

Huemap073.png


◇ 후보 수거함 투표

Huemap074.png

● Header

Huemap075.png

● Request Parameters

Path Segment Parameter

Huemap076.png

Body Parameter

Huemap077.png

● Response Message

없음

● Error spec

Huemap078.png


◇ 폐수거함 상태 제보 v1

Huemap079.png

● Header

Huemap080.png

● Request Parameters

Path Segment Parameter

Huemap081.png

Body Parameter

Huemap082.png

● Response Message

Huemap083.png

● Error spec

Huemap084.png


◇ 폐수거함 상태 제보 v2

Huemap085.png

● Header

Huemap086.png

● Request Parameters

Path Segment Parameter

Huemap087.png

Query String

Huemap088.png

Body Parameter

Huemap089.png

● Response Message

Huemap090.png

● Error spec

Huemap091.png


◇ 폐수거함 상태 조회 (공공기관)

Huemap092.png

● Request Parameters

Query String Parameter

Huemap093.png

● Response Message

Huemap094.png

● Error spec

Huemap095.png


◇ 폐수거함 설치 건의

Huemap096.png

● Header

Huemap097.png

● Request Parameters

Body Parameter

Huemap098.png

● Response Message

Huemap099.png

● Error spec

Huemap100.png

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

  • 가. 앱 프로토타입 사진

Huemap101.png

Huemap102.png

Huemap103.png


  • 나. 웹 프로토타입 사진

Huemap104.png


설치

  • 가. 앱 SW 구성 방법

◇ 앱 구동 환경: 안드로이드

Huemap105.png


  • 나. 웹 SW 구성 방법

◇ 웹 구동 환경: 웹 브라우저

◇ 웹 접속 방법: https://huemap.shop 접속

Huemap106.png


실행

  • 가. 맵 SW 실행 방법

◇ Viewer 앱 실행

Huemap107.png


◇ User 새 수거함 제보 및 투표

Huemap108.png


◇ User 잘못된 수거함 제보

Huemap109.png


◇ User 폐수거함 상태 제보

Huemap110.png


◇ User 폐수거함 위치 건의

Huemap111.png


  • 나. 웹 SW 실행 방법

◇ 공공기관 사용자의 전체적인 실행 흐름

Huemap112.png

Huemap113.png

Huemap114.png


성과물

  • 가. 프로젝트 github 주소

https://github.com/orgs/Yukhoebibimbap/repositories


  • 나. 애플리케이션 다운로드 주소

Huemap121.png


  • 다. API DOCUMENT

https://www.notion.so/API-dcb1304c9a2f4aeea06f0ea225516829 (프로젝트 Notion API DOCUMENT 페이지 주소)

Huemap115.png


관련사업비 내역서

Huemap116.png


완료작품의 평가

Huemap117.png


◇ Implementation Completeness

Huemap118.png


◇ Implementation Accuracy

Huemap120.png


◇ Data Preprocessing

Huemap119.png


향후계획

  • 가. 어려웠던 내용들

◇ 데이터의 도로명 주소를 Kakao API를 이용해 지리좌표계로 변환하여 지도에 표기해야 하는데, 폐수거함 도로명 주소 데이터의 형식이 제각각이었다. 도로명 주소에 해당 폐수거함의 위치를 식별할 수 있는 "옆, 앞, 사이, 건너편" 등의 수식어가 붙어 있었기에 정규 표현식으로 문자열을 식별해 잘랐다. 그럼에도 예외 사항이 많았고 프로젝트 진행이 우선되어야 했기에 일부 수작업으로 진행하였다.

◇ 앱 애플리케이션에서 지도를 제공하기위해 Kakao에서 제공하는 API와 Flutter의 공식 라이브러리인 Webview를 이용했는데, Flutter 개발환경에서 목적을 달성할 수 있는지 확인하고, 개발을 진행하는 초기단계에서 어려움을 느꼈다.

◇ 로그인 방식 구현에 있어서 JWT와 세션 로그인 방식의 고민이 있었다. 프론트-백 간의 숙련도 차이로 Session login 방식을 체택하였지만, 모바일 기기 특성상 IP주소가 변경되면 session 유지가 풀리는 문제가 하였다. 이를 해결하기 위해서 JWT Token을 활용하여 로그인 방식을 구현하였다.

◇ 웹 소켓을 사용하기 위해 netty-socket.io 라는 라이브러리를 사용했는데 관련 자료가 적어서 구현하는데 어려움이 있었다.

◇ Vue.js를 사용한 공공기관용 웹 개발 시에 카카오 맵과 axios 요청이 순서가 꼬여서 비동기 설정을 하는데 어려움이 있었다.

◇ 전처리된 데이터가 총 14200개인데, 사용자가 조회하려는 폐수거함을 선택하고 조회하는 기능에서 응답 속도가 느린 것을 확인할 수 있었다. 가장 긴 응답 속도를 가지는 의류수거함 조회 API 응답 속도가 약 2.17s로 측정되었다. 이를 해결하기 위해 레디스를 활용하여 캐시를 적용하였다. 그 결과 응답 속도가 약 17ms로 단축되어 큰 성능 향상을 이루었다.

◇ 사용자로부터 폐수거함의 위도와 경도를 서버로 전달받아 서비스에 등록하는 존재하는 폐수거함 제보 기능이 있다. 전달받은 위도와 경도를 Kakao에서 제공하는 ‘좌표로 주소 변환하기’ OPEN API를 사용하여 도로명 주소로 변환하였으나, 모든 도로명 주소가 좌표에 따라 반환되지 않은 경우가 있었다. 따라서 변환되지 않은 폐수거함 같은 경우에는 임의로 위도와 경도 값을 해당 폐수거함의 도로명 주소와 자치구 데이터 값에 삽입하였다.


  • 나. 차후 구현할 내용

◇ 현재 ‘서울’이라는 한정된 지역에서만 운영되는 서비스이다. 공공데이터를 활용해서 전국의 폐수거함을 조회하고 제보와 건의하여 사람들의 불편함을 해소할 필요가 있다.

◇ 안드로이드 버전 뿐만 아니라 IOS 버전에서도 사용 가능한 앱 애플리케이션을 제작한다.

◇ Kakao에서 제공하는 ‘좌표로 주소 변환하기’ OPEN API에서 모든 도로명 주소가 좌표에 따라 반환되지 않은 경우가 있었다. 존재하는 폐수거함 제보 기능이 위 OPEN API를 사용하는데, 정교한 주소 변환 작업과 이미 등록된 예비 폐수거함 위치 데이터를 변환할 필요가 있다.

◇ 사용자로부터 폐수거함에 대한 제보와 건의를 받고 있다. 이를 사용자가 서비스 내에서 조회하고 반영이 되었는지 확인하는 기능을 추가할 필요가 있다.

◇ 현재 API DOCUMENT가 수동으로 작성되고 있다. 수동으로 작성하면 언젠가는 문서와 개발과의 불일치가 발생할 수 있으므로 API DOCUMENT를 자동으로 만들어주는 자동화 작업이 필요하다.

◇ 현재 공공기관용 웹에서만 폐수거함 상태를 확인할 수 있는데 앱에서는 해당 기능이 없어 사용자들이 가득찬 폐수거함을 찾아갔다가 헛걸음하는 일이 없도록 폐수거함이 가득찼는지 앱에서도 알려주도록 추후에 구현할 필요가 있다.

◇ 폐수거함 상태 제보 이미지에 대한 검증 없이 받고 있는데 딥러닝으로 수거함 가득참, 훼손, 주변 더러움을 판별하면 상태 제보에 대한 신뢰도가 올라갈 것 같다.

◇ 앱에서 자신의 위치 정보는 앱 진입 시와 현재 위치 GPS 버튼을 눌렀을 때만 갱신된다. 지도를 보면서 이동하면 실시간으로 반영하면 좋을 것 같다.

◇ 현재 GPS를 통해 자신의 위치의 지도 정보를 제공받을 수는 있지만 GPS가 작동하지 않는 경우에도 서비스를 이용하는데 불편이 없게 하기 위해 검색을 통해 원하는 위치의 지도 정보를 제공하는 기능을 구현할 필요가 있다.


부록

참고문헌 및 참고사이트

◇ 공공 데이터 API https://www.data.go.kr/ https://data.seoul.go.kr/

◇ 카카오맵 API https://apis.map.kakao.com/web/documentation/


관련특허

◇ 쓰레기통 위치전송 시스템 - 1020170145657

야외 쓰레기통에 쓰레기통 위치 전송 칩을 부착하고, 쓰레기 소지자들이 모바일 앱을 설치해 이를 실행하면 근거리 반경 50-70m내의 쓰레기통에 부착된 쓰레기통의 위치를 모바일 앱에 표시한다.

◇ 쓰레기통 GPS 위치관리와 자동수거요청을 통한 스마트 쓰레기 자동 수거 서비스 시스템 – 1020170145657

쓰레기통용 센싱노드부, 자동수거용 스마트 디바이스, 스마트 자동수거 중계모듈을 통해 쓰레기통에 내용물이 꽉 찼을시, 사용자가 직접 나서지 않아도, 자동 수거 요청을 통해 자동수거서비스를 지원받을 수 있는 새로운 스마트 쓰레기 자동수거 중계시스템을 구축시킬 수 있다

소프트웨어 프로그램 소스

https://github.com/orgs/Yukhoebibimbap/repositories (프로젝트 Github Repository 주소로 대체)