어쩔컴종설
프로젝트 개요
기술개발 과제
국문 : 개인정보 보안성을 갖춘 설문조사 폼
영문 : The Survey Service with Enhanced Personal Information Security
과제 팀명
어쩔컴종설
지도교수
홍의경 교수님
개발기간
2022년 3월 ~ 2022년 6월 (총 4개월)
구성원 소개
서울시립대학교 컴퓨터과학부 2019920017 김정현(팀장)
서울시립대학교 컴퓨터과학부 2014920028 오지석
서울시립대학교 컴퓨터과학부 2017920017 김지윤
서울시립대학교 컴퓨터과학부 2018920002 고다현
서울시립대학교 전자전기컴퓨터공학부 2018440059 박재선
서론
개발 과제의 개요
개발 과제 요약
오늘날 온라인 설문조사 시스템은 이미 일상이 되었다. Google Forms와 같은 온라인 설문조사 플랫폼은 동아리 운영, 강의 평가, 공동 구매, 학술 연구 등 아주 폭넓게 활용되고 있다. 그러나 많은 이용 사례에서 조사자는 추후 피조사자에게 연락하기 위해 전화번호, 이메일 주소와 같은 민감한 연락처 정보를 수집한다. 그리고 이러한 개인정보를 수집함과 동시에 수집한 정보를 기한 내 파기하겠다는 동의서를 함께 첨부하는 경우가 많지만, 실제로 조사자가 수집한 정보가 기한 내에 파기되었는지 피조사자 입장에서는 알 수 없었다.
이러한 문제에서 착안하여, 연락처와 같이 민감한 개인정보를 안전하게 보호하는, 기존과 차별화된 온라인 설문조사 플랫폼을 제작하고자 한다. 피조사자가 입력한 전화번호나 이메일 주소와 같은 개인정보를 조사자에게 직접적으로 전달하지 않고, 조사자가 플랫폼을 통해 피조사자에게 문자나 메일을 보낼 수 있도록 하여, 피조사자의 개인정보를 강력하게 보호한다. 또한 조사자에게 편리한 설문조사 폼 생성 기능과, 설문 응답 결과에 대한 효율적인 분석 및 활용성을 제공한다.
개발 과제의 배경
대다수의 설문조사가 구글폼과 같은 설문조사 플랫폼을 통해 온라인으로 이루어지고 있다. 하지만 이러한 기존 플랫폼은 조사자와 피조사자의 요구를 충족시키지 못한다.
배경1: 온라인 설문조사 플랫폼에서의 강력한 개인정보 보호 방법 부재
온라인 설문조사에서 피조사자의 연락처를 요구하는 경우가 빈번하다. 하지만 연락처 수집은 설문조사의 목적이 아니라 조사자가 설문과 관련된 안내사항을 피조사자에게 전달하기 위한 수단으로만 사용되는 경우가 많다. 해당 예시는 다음과 같다.
설문조사의 예시 | 조사자의 조사 목적과 직접적으로 관련있는 설문 내용 | 조사자의 목적과 직접적인 관련은 없지만 필요한 설문 내용 |
---|---|---|
A씨는 본인의 연구를 위해 불특정 다수를 대상으로 한 설문조사를 실시하려고 한다. 설문의 내용은 사례 연구를 위한 질문들과, 설문 답변에 대한 소정의 답례(기프티콘)를 전달하기 위한 피조사자의 연락처이다. | 사례 연구를 위한 질문 | 답례(기프티콘)를 전달하기 위한 피조사자의 연락처 |
B씨는 SNS를 통해 공동구매를 진행할 것이다. 공동구매에 참여할 사람들의 수요를 조사하기 위해 설문조사를 실시하고자 한다. 설문의 내용은 공동구매 참여 수량 등과 같은 구매상품에 대한 주문서정보와 참여자들이 공동구매관련 안내 사항을 수신할 연락처이다. | 구매상품에 대한 주문서정보 | 참여자들이 공동구매관련 안내 사항을 수신할 연락처 |
C씨는 코딩동아리 신입부원을 온라인으로 모집하고자 한다. 동아리 지원서는 온라인 설문조사를 이용하며, 설문 내용은 선호하는 언어와 지원자의 기술 지식 등이며 합불합 여부를 통보할 연락처이다. | 선호하는 언어와 지원자의 기술 지식 | 합불합 여부를 통보할 연락처 |
또 연락처와 같은 개인정보의 이용처와 보존기간에 대해서 구체적으로 안내하지 않는 설문조사가 많다. 안내되었다 하더라도 이것이 잘 지켜지는지 피조사자는 알 길이 없다. 이러한 경우에 피조사자의 개인정보 보호는 순전히 조사자의 양심에 따라 이루어진다.
배경2: 기존 설문조사 플랫폼에서 겪는 불편함
설문조사를 통해 유의미한 결과를 얻고자 하는 조사자에게, 응답 결과를 단순한 통계나 그래프로 제공받는 것은 불충분하다. 또 많은 설문조사들이 설문 참여 독려를 위해 응답자를 무작위로 추첨하는 이벤트를 진행하는데, 조사자가 직접 중복 응답자를 제거하고, 다른 서비스를 통해 추첨을 돌려야 하는 불편함이 발생한다. 설문조사 폼을 유연한 형식으로 생성하는 것도 불가하다.
이와 같은 문제를 인식하여 본 프로젝트를 진행하게 되었다. 이를 통해 기대할 수 있는 효과는 다음과 같다.
효과1: 피조사자의 개인정보를 강력하게 보호
조사자가 설문조사의 본 목적을 달성하도록 돕고, 피조사자에게 연락할 방법을 제공하여, 설문조사의 본 목적을 해치지 않고 피조사자의 개인정보를 보호할 수 있다.
효과2: 조사자에게 편리한 연락 서비스를 제공
기존 설문조사 플랫폼의 경우, 수집한 연락처로 연락하기 위해 설문결과를 수합하고 스프레드시트로 정리하여 단체 문자나 메일링 서비스에 연락처 파일을 업로드하는 번거로운 과정을 거쳐야 한다. 그러나 본 프로젝트는 하나의 사이트에서 연락처 수집부터 문자(메일)보내기까지 통합된 서비스를 제공한다.
효과3: 조사자의 개인정보 보호책임 이행을 도움
기존 설문조사 플랫폼의 경우 조사자와 피조사자만 설문조사에 참여한 반면, 본 프로젝트는 그들 사이에 플랫폼이 개입한다. 조사자는 플랫폼에 개인정보 보호책임을 위탁하고, 플랫폼은 피조사자에게 개인정보의 제한된 활용을 약속한다. 플랫폼을 통해서 조사자는 손쉽게 개인정보 보호의무를 다하고, 피조사자의 신뢰를 얻는다.
효과4: 설문조사의 효율성 향상
조사자에게 유연한 설문조사 폼 생성 기능을 제공하고 설문 응답 결과를 효과적으로 분석, 활용함으로써 조사자의 능률을 향상한다.
따라서 본 프로젝트는 설문조사 피조사자의 개인정보를 강력하게 보호함으로써 피조사자의 신뢰를 얻고, 조사자에게 편리한 설문조사 서비스를 제공함으로써 조사자의 능률을 향상시키는 설문조사 플랫폼을 제작하는 것을 목적으로 한다.
개발 과제의 목표 및 내용
목표 | 내용 |
---|---|
연락처에 해당하는 개인정보 보호 | 조사자가 피조사자의 연락처를 연락의 목적에 맞게 사용 - 개별/단체 문자, 이메일 전송 민감한 설문 내용이 활용 후 파기되는 것을 보장하기 위해, 설문 조사자가 설문 시작 전에 기간을 입력하고 만료시 자동 삭제 |
편리한 폼 생성 | 대표적인 템플릿 제공 이전에 제작한 템플릿 재사용 가능 답변 방식 지정 가능 - 객관식 문항의 경우, 다중택1, 다중택다 - 주관식 문항의 경우, 단답형, 장답형, 필수/선택 응답 입력 데이터 형식 지정 가능 - 휴대전화번호, 이메일 주소, 생년월일 등 문항의 지문과 선택지에 이미지, 동영상, URL 등 삽입 가능 |
설문 응답 결과 조회 | 설문조사 결과 조회 결과를 스프레드시트로 내보내기 |
경쟁 서비스는 제공하지 않는 편의 기능 제공 | 설문 응답자 무작위 추첨 기능 설문 답변 통계, 키워드 분석, 도표화, 그래프화, 히트맵 등의 결과 분석 리포트 여러 답변 중 무작위로 답변을 뽑는 기능 주소로 우편번호를 찾는 모듈 개인정보 파기 기한을 설정한 경우, 기한 만료로 인해 정보를 삭제했을 때 안내 메일을 발송 |
플랫폼의 수익 창출 구조 | 문자 및 메일 서비스 유료 이용 특권을 가진 유료 계정 - 설문조사 메인페이지를 만들어서, 메인페이지에 설문이 올라가게 하는 기능 설문조사의 주제에 따라 광고가 타겟팅되는 광고 배너 |
관련 기술의 현황
관련 기술의 현황 및 분석(State of art)
현재 온라인 설문조사 플랫폼 중 접근성에 가장 좋은 Google 설문지를 기준 살펴보았을 때, 해당 서비스의 특장점은 아래와 같다.
- 객관식 문항에 대해서 간단한 통계를 보여준다.
- 단일 문항에 대한 결과분석을 제공한다. 문항간 연관성에 대해서는 분석하지 않는다.
- 사용자가 입력한 개인정보를 보안성 없이 폼 제작자에게 제공한다.
- 폼 제작 UI가 아이콘을 클릭하거나 드래그&드랍하는 형식으로 이루어져 있다. 각종 기능을 나타낸 아이콘은 사용자의 직관으로 한 번에 알아차리기 어려워서 익숙하지 않은 사용자들은 폼 제작에 어려움을 겪는다.
기술 로드맵
시장상황에 대한 분석
경쟁제품 조사 비교
비교 기준 | Google 설문지 | Survey Monkey |
---|---|---|
서비스 이용료 | 무료 | 부분무료 (월 3만원대) |
디자인 및 폼 커스텀 | 제한됨 | 유료 서비스 |
기본 제공 템플릿의 개수 | 22 | 169 |
문항 타입 | 약 9가지 (다중택일, 다중택다, 단/장답형 등) |
약 21가지 (다중선택, 별점 매기기, 이미지 업로더 등) |
질문 분기 및 조건부 논리 | 객관식 및 드롭다운 질문에 사용 가능 | Google 보다 좀 더 다양 |
설문 결과 시각화 | 응답문항에 대한 간단한 차트 제공 | 데이터 내보내기와 결과 시각화는 유료 서비스 |
피조사자의 개인정보를 보호하는 기능 | 무 | 무 |
온라인 설문조사를 처음 여는 사용자도 쉽게 디자인할 수 있도록 편리한 UI를 구성하고 대표적인 설문상황에 맞춰 템플릿을 다양하게 제공함으로써 진입장벽을 낮출 수 있을 것이다. 또한 개인정보를 보호한다는 독보적인 서비스도 사생활보호를 중요하게 여기는 사회 풍조와 맞물려 피조사자들이 새로운 플랫폼에서 시행하는 설문에 대해서도 거부감을 줄일 수 있다.
마케팅 전략 제시
- 주로 피조사자에 해당하는 일반 대중들에게는 개인정보의 유출에 대한 심각성과 온라인 설문조사에서의 개인정보 보호의 중요성을 일깨우는 내용으로 마케팅한다.
- 대학교에서의 학생회, SNS 인플루언서들 등 여러 사람과 소통을 요하는 사람들에게 홍보할 수 있다.
- 온라인 설문조사를 자주 활용하는 단체장, 기업들을 대상으로 공격적인 마케팅을 시행한다.
SWOT 분석 | |
---|---|
Strength | 연락처라는 특수한 데이터를 다룸으로써 설문조사와 피조사자에게 연락이라는 두 가지 행위를 한 플랫폼에서 간편하게 제공 |
Weakness | 이미 온라인 설문조사 시장에서 우세한 기업이 존재 |
Opportunity | 설문조사에서 개인정보 보호와 관련된 서비스는 독보적임 |
Threat | 개인정보 보안성을 제공하는 경쟁 서비스의 등장 |
개발과제의 기대효과
기술적 기대효과
기존의 설문조사 플랫폼들 중에서 개인정보 은닉 및 파기를 보장하는 서비스가 없었다는 점에서, 본 과제를 시작으로 온라인 설문에서의 개인정보 보호 모델/기술에 대한 관심이 높아질 것으로 보인다.
경제적 및 사회적 파급효과
경제적
서비스를 운영할 클라우드 비용을 월 18만원, 배포/문자 비용을 13만원이라고 가정했을 때, 약 월 31만원이 지출될 것으로 예상된다.
그리고 본 서비스의 주된 수입은 아래와 같다.
유료 계정 | 광고 배너 | 문자 및 메일 서비스 |
---|---|---|
월 1 만원. 설문조사 메인페이지를 만들어서, 메인페이지에 설문이 올라가게 하는 기능, 자신의 설문조사가 더 많이 대중들에게 노출될 수 있도록, 더 많이 참여될 수 있도록 해줌 |
설문조사(폼)의 주제에 따라 광고를 타겟팅해서, 광고자가 만족할 수 있도록 하는 광고 배너 | 설문 참여자에게 문자/메일을 전송하고자 할 때 서비스 UI를 통해 개인/단체 문자 또는 메일을 쉽게 전송할 수 있게 해줌. |
초반 몇 달 동안은 손해를 감수하고서라도 많은 대중들에게 폼의 유용성과 실효성에 대해 홍보할 수 있도록 무료로 많은 기능을 제공한다.
사회적
- 개인정보 보안에 초점을 둔 온라인 설문조사 플랫폼을 시작으로, 온라인 활동 도처에서 개인정보 오남용을 막고 보호를 실천할수 있음을 알릴 수 있다.
- 소비자들로 하여금 개인정보 유출에 경각심을 갖고 적극적으로 예방해야한다는 의식을 심게 한다. 소비자는 기업에게 개인정보 보호를 보다 강력하게 요구하며 사회전반적으로 진보적인 개인정보 보호 의식을 보편한다.
기술개발 일정 및 추진체계
개발 일정
단계별 세부개발 내용 | 담당자 | 개발기간 (월단위) | 비 고 | ||||
---|---|---|---|---|---|---|---|
3 | 4 | 5 | 6 | ||||
프론트: 사용자 페이지 구성 | 회원가입/로그인 | 박재선,김지윤 | |||||
마이페이지 | 박재선,김지윤 | ||||||
설문 폼 제작 페이지 | 박재선,김지윤 | ||||||
설문 폼 응답 페이지 | 박재선,김지윤 | ||||||
설문 결과와 레포트 관련 페이지 | 박재선, 김정현 |
||||||
문자와 메일관련 페이지 | 고다현, 김정현 |
||||||
요금 충전관련 페이지 | 고다현, 김정현 | ||||||
메인페이지 | 고다현, 김정현 | ||||||
프론트: 컴포넌트에 기능 연결 |
회원가입/로그인 | 박재선,김지윤 | |||||
마이페이지 | 박재선,김지윤 | ||||||
메인페이지 | 고다현 | ||||||
설문 폼 제작 페이지 | 박재선,김지윤 | ||||||
설문 폼 응답 페이지 | 박재선,김지윤 | ||||||
설문 결과 와 레포트 관련 페이지 | 박재선, 김정현 |
||||||
문자와 메일관련 페이지 | 고다현,김정현 | ||||||
요금 충전관련 페이지 | 고다현,김정현 | ||||||
백엔드: DB 구축 및 API 정의 | DB 설계 | 김정현,김지윤,오지석 고다현,박재선 |
|||||
회원가입/로그인 | 김정현,김지윤,오지석 | ||||||
문자/메일API | 김정현,김지윤,오지석 | ||||||
백엔드: 폼 제출 | 폼 제출 데이터 가공 | 김정현,김지윤, 고다현 |
|||||
폼 제출 | 김정현,김지윤, 고다현 |
||||||
결제 | 김정현,김지윤, 고다현 |
||||||
백엔드:결과보고서 | 통계 결과 | 김정현,김지윤, 고다현,오지석 |
|||||
키워드 분석 | 김정현,김지윤, 고다현,오지석 |
||||||
그래프 생성 | 김정현,김지윤, 고다현,오지석 |
||||||
통합 테스트 | 1차: 프론트엔드와 백엔트의 동기화 | 김정현 | |||||
2차: 필수 설문 기능 테스트 | 김정현 | ||||||
최종: 문자/메일 기능 및 통계 분석 테스트 | 김정현 |
구성원 및 추진체계
이름 | 주된 담당 영역 | 비고 |
---|---|---|
김정현 | 팀장, 프론트엔드, 백엔드 | |
오지석 | 백엔드 | |
김지윤 | 프론트엔드, 백엔드 | |
고다현 | 프론트엔드, 백엔드 | |
박재선 | 프론트엔드 |
설계
설계사양
제품의 요구사항
본 프로젝트는 온라인 설문조사 플랫폼으로서 개인정보라는 특수한 데이터를 조사자에게 은닉함과 동시에 설문조사와 연락 서비스를 통합해서 제공한다. 설문조사의 이용자인 조사자와 피조사자의 관점에서 우리 서비스가 갖춰야 하는 요구 사항은 아래와 같다.
구분 | 내용 |
---|---|
조사자 | - 개인정보 보호의무를 간편히 이행 - 피조사자에게 신뢰를 얻음 - 편리한 연락 서비스: 설문결과를 수합하고 엑셀로 정리하여 단체 문자나 메일링 서비스에 연락처 파일을 업로드하는 번거로운 과정 필요 없음 - 유연한 형태의 설문폼 제작 가능: 다양한 질문 유형과 답변 형식, 답변에 따라 특정 문항 활성화 - 보다 높은 설문답변의 활용성: 주관식 답변 키워드 분석, 답변 즐겨찾기, 설문 응답자 무작위 추첨 기능 - 설문 폼 홍보 |
피조사자 | - 개인정보를 강력하게 보호받음 - 특정 유형의 답변(휴대전화번호, 이메일, 주소, 날짜, 시간, 파일업로드)을 보다 간편하게 입력 가능 |
설계 사양
번호 | 요 구 사 항 | D or W | 비고 (중요도) |
---|---|---|---|
1 | 피조사자가 제공한 개인정보는 어떤 형태로든 조사자측에 전달되지 않도록 보호한다. | D | 상 |
2 | 조사자가 피조사자의 연락처를 직접 조회하지 않고도 문자/이메일 등의 매체로 연락할 수 있도록 기능을 제공한다. | D | 상 |
3 | 설문조사 참여 과정에서 피조사자가 작성한 정보를 통신 과정과 DB 저장과정을 비롯하여 모두 암호화한다. | D | 상 |
4 | 설문조사지를 생성할 때 고지한 개인정보 파기 기간이 지날 경우 서버측에서 자동으로 개인정보를 파기한다. | D | 상 |
5 | 경쟁 플랫폼에서는 제공하지 않는 문항 타입(주소, 연락처, 파일 등)을 제공한다. | W | 중 |
6 | 설문 응답 결과를 스프레드시트와 같은 외부 형식으로 추출할 수 있도록 한다. | W | 하 |
7 | 설문 답변 통계, 키워드 분석, 도표화 등의 고급 통계 기능을 제공한다. | W | 중 |
본 과제는 개발 과제 요약 섹션에서 언급한 것처럼, 타 설문조사 플랫폼과 달리 개인정보에 대한 높은 기밀성 및 파기 보장성을 제공한다는 점에서 차별점을 가져야 한다. 이러한 과제 정의에 부합할 수 있도록 요구사항에는 개인정보 기밀성과 관련된 4가지 사항을 가장 중요하게 취급하고 있다. 이 4가지 요구사항을 만족하는 설계를 할 수 있다면, 개인정보 기밀성 측면에서는 타 플랫폼에 대한 우위를 점할 수 있다.
개인정보 기밀성은 피조사자 입장에서는 큰 이점이므로, 우리의 플랫폼을 사용할 만한 큰 메리트가 되지만 설문지를 생산하는 조사자 입장에서는 이미 익숙한 타 플랫폼 대신 본 플랫폼을 사용할 중대한 이유가 되지 않을 수 있다. 이에 따라 타 플랫폼에서 제공하지 않는 조사 편의 기능을 제공하여 조사자의 유입을 유도할 필요성이 있고, 이 사항들을 희망사항(W)로 구분하였다.
개인정보 기밀성 및 보안성을 가장 큰 장점으로 내세우고 있는 본 과제의 정체정을 생각하였을 때, 제품 요구사항이 적절히 작성되었으며 필수사항(D)를 만족하는 것만으로도 과제의 주목표를 달성할 수 있다고 판단할 수 있다.
개념설계안
기존의 설문조사 시스템에서는 피조사자가 작성한 모든 내용을 조사자가 볼 수 있었고, 조사자가 피조사자에게 연락을 취하기 위해서는 피조사자의 연락처(전화번호, 이메일)를 수집해야 했다. 그러나 피조사자의 연락처와 그 사람을 특정할 수 있는 개인정보가 함께 조사자에게 전달되게 되므로 개인정보가 외부로 유출되거나 악용되는 문제점이 발생할 수 있다. 또한 개인정보를 수집하면서 설문지에 개인정보 이용 및 파기 기간을 명시해두는 경우가 많지만 해당 개인정보가 정말로 그 기간 후에 파기되는지 보장되지 않는다.
대부분의 이용 사례에서 조사자는 피조사자의 연락처 자체가 필요하다기보다, 피조사자 전체에 대한 공지, 이벤트 당첨에 따른 개인 연락 등 임시적인 연락 수단이 필요한 경우가 많다. 따라서 아래 그림과 같이 기존의 모든 응답 정보를 조사자에게 제공하던 방식에서 벗어나서, 연락처 데이터는 어떤 방식으로든 조사자에게 전달하지 않고 연락이 필요할 경우 플랫폼의 UI를 이용하여 문자/이메일을 전송할 수 있도록 하였다.
상세설계 내용
시스템 전체 개요
조사자가 설문 이후 피조사자에게 연락하기 위해 전화번호 또는 이메일을 함께 수집하는 경우, 조사자는 플랫폼에서 제공하는 연락처 문항 타입을 이용해 손쉽게 관련 문항을 마련할 수 있다. 그리고 설문조사지를 생성하면서 개인정보의 유지 기간을 함께 설정할 수 있는데, 유지 기간이 만료되면 설문 서비스에서 피조사자의 개인정보를 자동으로 파기하여 조사자의 개인정보 보호 의무를 대신 수행한다.
피조사자가 제공한 개인정보는 설문 서비스 DB에는 암호화되어 저장되지만, 조사자에게는 어떤 형태로든 전달되지 않는다. 이는 설문 서비스의 REST API에서 연락처 데이터를 마스킹하여 조사자에게 전달하는 방식으로 구현된다. 그리고 조사자가 피조사자에게 연락을 취하고자 하는 경우 플랫폼의 문자/이메일 전송 기능을 사용한다. 이렇게 되면 피조사자의 연락처 데이터가 조사자에게 결코 전달되지 않으면서도 설문의 모든 과정을 기존과 동일하게 수행할 수 있다.
기능 구현을 위한 세부기술 선택사항 (디자인)
DB 암호화
- 피조사자가 입력한 개인정보를 조사자에게 제공하지 않는다. 이 정보를 DB상에서도 암호화해서 조사자뿐만 아니라 DB에 접근하는 모든 사용자로부터 개인정보를 보호한다.
- DB의 레코드를 암호화하고 허가된 프로세스만 복호화할 수 있도록 하여, DB 유출 시에도 개인정보가 외부에 드러나는 것을 방지한다.
설문응답 조사 데이터 분석 지원
- 각 문항에 대한 분석뿐만 아니라 필터링을 추가해서 연관된 문항의 응답 결과를 비교할 수 있다.(조건부확률, 상관관계)
- 일반 텍스트로 주어지는 응답에 대해서 공통적으로 등장하는 키워드나 응답 경향을 분석해주는 툴을 도입해서 방대한 설문 결과를 분석하는데 도움을 준다.
웹서비스 구현과 유지에 필요한 툴
- NoSQL/Cloud (Mongoose, Mongo Atlas)
폼 제작자의 설문내용에 대해 설문마다 다르므로, SQL을 사용하기에는 다소 무리가 있어 NoSQL을 사용한다. NoSQL중 MongoDB를 선택했으며, 클라우드 서비스로 Mongo Atlas를 사용한다.
- Node(Backend, GraphQL 또는 Rest API)
Node는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 자바스크립트를 활용하며 논블로킹(Non-blocking) I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.
이 서비스에서 결과 분석을 하기 위해 DB에 요청을 하고, 설문의 내용을 저장할 때 또 DB에 요청하는 등 대부분의 요청에 대해 DB에 접근한다. GraphQL을 사용하면 REST API에서 DB요청을 할 때, DB에 대해서 과도하게 요청하거나, 너무 적게 요청하는 일(Underfetching, Overfetching) 없이 딱 적합하게 DB 서버에 요청할 수 있어서 전반적으로 서버에 대한 성능이 올라갈 수 있다. 또한 URL체계가 없어서 URL, Query, Params에 대한 내용을 관리할 필요가 없다. URL이 많아질수록 개발 시간과 개발에 대한 유지보수를 좀 더 단축시킬 수 있다.
- React
자바스크립트 라이브러리의 하나로서 사용자 인터페이스를 만들기 위해 사용된다. 기존 프론트 코드 대비 자동적으로 바뀌는 부분만 리렌더링 하도록 하여 성능을 향상시킨다.
- ORM
DB와 Node간의 연결을 이루어주고, entity를 type화 시켜서 DB와 코드를 동기화시키고 코드를 쉽게 짜는 데 사용한다.
- Paddle
결제 모듈로 Paddle의 서비스를 사용할 것이다. 다른 결제 서비스들(Stripe 등)은 회사가 필요하지만, Paddle은 현재 회사를 따로 만들지 않아도 결제 서비스가 가능하도록 지원하며, 온라인 자산(온라인 구독 등)에 대해서만 결제가 가능한 결제 서비스이다.
소프트웨어 설계
기능 요구
이 사이트가 제공해야 하는 기능들이 어떤 것인지 간략하게 나열하면 아래와 같다. (기능 측면은 사용자 입장에서 작성하고, 구현에 관한 내부적인 설계에 대한 것을 언급한다.)
구분 | 기능 |
---|---|
공통 | - 회원가입, 로그인 |
피조사자에게 제공 | - 로그인 유무에 상관 없이 폼에 응답 - 개인정보 문항(전화번호, 이메일) 중 조사자가 암호화 옵션을 적용한 문항에 응답할 때, 본 문항의 응답이 조사자에게 전달되지 않을 것임을 보여줌 - 개인정보 문항 중 조사자가 파기 기한을 설정한 문항에 응답할 때, 본 문항의 응답이 언제 파기될 것인지 보여줌 - 파기 기한이 설정된 개인정보 문항에 응답했을 경우, 기한 만료로 인해 정보를 삭제했을 때 안내 메일을 발송 |
조사자에게 제공 | - 로그인 유무에 상관 없이 폼에 응답 - 개인정보 문항(전화번호, 이메일) 중 조사자가 암호화 옵션을 적용한 문항에 응답할 때, 본 문항의 응답이 조사자에게 전달되지 않을 것임을 보여줌 - 개인정보 문항 중 조사자가 파기 기한을 설정한 문항에 응답할 때, 본 문항의 응답이 언제 파기될 것인지 보여줌 - 파기 기한이 설정된 개인정보 문항에 응답했을 경우, 기한 만료로 인해 정보를 삭제했을 때 안내 메일을 발송 - 로그인 후 설문조사 폼 제작 및 수정, 삭제 가능 - 이전에 제작한 폼 템플릿 재사용 가능 - 서비스에서 기본 제공하는 폼 템플릿 사용 가능 - 폼의 이름, 설문 시작 여부, 설문 마감 여부, 설문 마감 시간 설정 - 폼 각 문항의 유형 지정 가능 : 객관식, 주관식, 선형배율, 그리드, 개인정보(휴대전화번호, 이메일), 우편번호(주소) 등 - 폼 각 문항의 답변 방식 지정 가능 : 공통-필수/선택응답, 객관식-다중택일,다중택다, 주관식-단답형,장답형 - 입력 데이터 형식 지정 가능 - 휴대전화번호, 이메일, 주소, 날짜, 시간, 파일업로드 - 문항의 지문과 선택지에 이미지, 동영상, 유튜브 URL 삽입 가능 - 답변에 따라 특정 문항이 활성화되도록 설정 가능 (연관된 문항 기능) - 폼의 문항 중 대표 문항 1개 설정 - 설문조사 결과 조회 - 주관식 문항의 답변 키워드 분석, 시각화된 그래프(도표, 그래프, 히트맵), 조건부확률, 답변 조회, 특정 답변 즐겨찾기 - 설문조사 결과를 스프레드 시트로 출력 - 설문 응답자 무작위 추첨 기능 - 폼에서 개인정보 문항을 포함한 경우 개인정보 파기 기한을 설정 - 폼의 응답으로 등록된 연락처(휴대전화번호, 이메일)로 간편하게 문자/이메일 발송(유료서비스 코인 소비) - 유료 서비스(월정액, 프리미엄 원회)를 결제할 경우, 메인페이지 배너에 설문폼 홍보 가능 - 코인 충전 기능, 프리미엄 회원 등록 및 해지 - 문자/이메일 발송 내역 조회 - 코인 충전 및 소비 내역 조회 |
서버 인프라 | - 개인정보 문항에 응답한 답변의 경우, 암호화하여 저장 - 조사자가 코인을 소비하여 요청한 문자와 이메일 보내기 요청을 수행 - 문자 메시지와 이메일을 보낸 내역과 코인 충전 및 소비 내역을 자동으로 DB에 등록 - 설문 응답 데이터를 분석 (키워드 분석, Market Basket Model, Correlation) - 만료 기한이 설정된 폼의 개인정보 문항을 삭제 - 설문조사 참여 링크제작 |
본 프로젝트는 온라인 설문조사 플랫폼으로서 개인정보라는 특수한 데이터를 조사자에게 은닉함과 동시에 설문조사와 연락 서비스를 통합해서 제공한다. 설문조사의 이용자인 조사자와 피조사자의 관점에서 우리 서비스를 이용해서 얻을 수 있는 이점은 다음과 같다.
대상 | 이점 |
---|---|
조사자 | - 개인정보 보호의무를 간편히 이행 - 피조사자에게 신뢰를 얻음 - 편리한 연락 서비스: 설문결과를 수합하고 엑셀로 정리하여 단체 문자나 메일링 서비스에 연락처 파일을 업로드하는 번거로운 과정 필요 없음 - 유연한 형태의 설문폼 제작 가능: 다양한 질문 유형과 답변 형식, 답변에 따라 특정 문항 활성화 - 보다 높은 설문답변의 활용성: 주관식 답변 키워드 분석, 답변 즐겨찾기, 설문 응답자 무작위 추첨 기능 - 설문 폼 홍보 |
피조사자 | - 개인정보를 강력하게 보호받음 - 특정 유형의 답변(휴대전화번호, 이메일, 주소, 날짜, 시간, 파일업로드)을 보다 간편하게 입력 가능 |
피조사자의 이득이 조사자에 비해 많지는 않지만, 설문 폼을 제작하고 우리 서비스의 기능을 적극적으로 이용하는 대상은 조사자이고, 피조사자는 만들어진 폼에 응답할 뿐이므로, 서비스를 이용하는 조사자의 수가 증가하면 피조사자의 수는 필연적으로 증가한다.
온라인 설문조사를 자주 활용하는 단체장과 기업에게, 서비스를 통해 조사자가 얻을 수 있는 이점을 중심으로 하며 개인정보보호의무를 강조하는 마케팅 전략을 세운다. 주로 피조사자에 해당하는 일반 대중들에게는 개인정보 유출에 대한 심각성과 온라인 설문조사에서의 개인정보 보호의 중요성을 일깨우는 내용으로 마케팅한다. 또한 개인정보 보호 책임에 민감한 단체(관공서 등)에 집중적으로 홍보할 계획이다.
위에 기술한 것을 바탕으로 구체적으로, 어떤 기능을 구현해야 할것인지 기술한다. 이 내용은 Frontend, Backend, DB에 반영될 것이다.
UI 설계
위에서 설정한 기능요구를 충분히 반영할 수 있는 UI를 만들어야 한다. 만들어야 할 페이지와, 각 페이지에서 접근할 수 있는 기능들을 정리하면 아래와 같다.
공통
- 상단의 메뉴 바
항상 페이지의 상단에 고정되어 있다. 마우스를 위에 올리면 메인페이지로 돌아가는 아이콘, 설문 메뉴, 연락 서비스 메뉴, 공지사항 메뉴로 이동할 수 있는 메뉴 팔레트가 나타난다. 로그인, 로그아웃, 회원가입, 마이페이지 로 이동할 수 있는 링크도 제공한다.
- 클립
서비스를 이용하고 있을 때, 현재 어떤 서비스를 이용할 수 있는지 알려주는 안내 표지 같은 용도이다. 화면의 좌측에 책갈피처럼 튀어 나와 있다. 이 클립을 클릭하면 연결된 링크로 이동한다.
메인 페이지
홈페이지의 대표화면이다. 중앙에 광고 배너와 공개 설문목록이 있다. 프리미엄 회원은 자신의 설문을 메인페이지에 홍보할 수 있다. 광고배너나 설문 목록을 클릭하면 해당 설문에 바로 참여할 수 있다.
- 광고 배너
화면의 상단 중앙에 광고 배너가 위치한다. 이는 일반적인 웹 사이트에서 표시되는 광고 뿐만아니라, 특정 설문 조사에 대한 홍보 광고가 될 수 있다.
- 현재 참여할 수 있는 공개 설문
공개적으로 진행하는 설문 조사가 메인 페이지의 중앙부에 위치한다. 이는 유료 계정을 사용하는 조사자가 진행하는 공개 설문으로, 유료 계정을 사용하는 조사자는 자신의 설문조사가 메인 페이지에 노출되게 할 것인지를 각 설문조사마다 개별적으로 설정할 수 있다.
로그인, 로그아웃, 회원가입 페이지, 아이디찾기, 비밀번호찾기
- 로그인 페이지
상단의 메뉴 바에서 로그인 버튼을 누르면 로그인 페이지로 이동한다. 아이디와 비밀번호를 입력하고 로그인할 수 있는 컴포넌트를 제공한다. 아이디 찾기, 비밀번호 변경 페이지 (3-4)로 이동할 수 있는 버튼을 제공한다. 로그인에 성공하면 메인페이지로 돌아간다.
- 로그아웃
페이지를 따로 만들지 않고, 상단의 메뉴 바(1-1)에 로그아웃 버튼을 누른다.
- 회원가입 페이지
회원가입을 위한 정보를 입력하고, 이메일 인증을 수행하는 페이지를 만든다. 필요한 컴포넌트는 사용자 ID*, 사용자 인증을 위한 E-Mail*, 사용자 이름*, 사용자 비밀번호*, 비밀번호 확인*, 이용약관 동의* 등이다. *표는 필수 입력 항목이다. 입력하는 정보는 사용자를 DB에 추가하기 위해 필요한 속성들이다.
- 아이디 찾기, 비밀번호 변경하기 페이지
이메일로 등록된 회원정보를 조회한다. 사용자가 아이디나 비밀번호를 잊은 경우, 회원가입 시 등록한 이메일 주소로 사용자의 아이디를 보낸다. 비밀번호는 메일 인증 후 재설정할 수 있다.
설문 페이지
본 시스템은 설문의 상태를 3가지로 정의해 관리하는데, 아래 그림과 같이 “디자인 중”, “설문 중”, “마감 완료” 상태가 존재한다.
상태 |
설명 |
---|---|
디자인 중 |
설문을 처음 만들고 문항 디자인을 하는 단계이다. 설문 제목, 마감일, 파기 기한 등을 설정할 수 있다. 디자인이 확정된 후에는 '설문 중'상태로 바꿀 수 있다. '설문 중'상태나 '마감 완료' 상태에서 '디자인 중' 상태로 돌아올 수 없다. |
설문 중 |
디자인을 마치고 설문을 실시하는 단계이다. 설문의 설정(제목, 파기 기한 등)을 변경할 수 없다. 설문의 마감일은 바꿀 수 있다. 설문참여 링크를 생성해서 피조사자들이 설문에 참여할 수 있으며, 제출된 답변을 확인할 수 있다. |
마감 완료 |
설문조사가 마감된 상태이다. 이 상태에서는 사용자가 더 이상 답변을 제출할 수 없다. '설문 중'에 수동으로 마감 완료로 바꾸거나 등록한 마감일에 자동으로 바뀔 수 있다. 원한다면 다시 '설문 중' 상태로 바꿔 새로운 응답을 받을 수 있다. |
- 내 설문 페이지
로그인한 사용자가 이전에 만든 설문(폼)들을 한 자리에 모아 볼 수 있는 페이지이다. '설문'은 세 가지 상태가 존재한다. 디자인 중(설문 시작 전), 설문 중, 마감완료된 설문 이 세 가지 상태의 설문을 분류해서 보여준다. 설문 아이콘에는 설문의 제목이 쓰여 있다. 설문 버튼을 클릭하면 해당 설문의 정보 페이지로 이동한다.
- 설문 정보 페이지
로그인된 사용자가 자신이 소유한 설문의 정보를 확인하고, 수정할 수 있는 페이지이다. 설문 디자인의 미리보기를 제공한다. 설문의 이름, 설문 시작날짜, 마감날짜, 공개여부 등 간단한 설정을 수정할 수 있다. '제출된 답변 확인' 버튼을 누르면 설문 답변 확인 페이지로 이동한다. 설문의 디자인(섹션, 문항의 배치 등)을 수정하려면 '설문 디자인 수정하기' 버튼을 눌러서 설문 디자인 페이지로 이동한다.
- 새 설문 만들기 페이지(템플릿 선택 페이지)
로그인한 사용자는 새 설문은 만들 수 있다. 사이트가 기본적으로 제공하는 템플릿과, 사용자가 이전에 만들었던 설문 중 하나를 골라 템플릿을 재활용할 수 있다. 템플릿 미리보기를 제공하며, '선택' 버튼을 누르면 선택한 템플릿과 구조가 같은 설문을 제작해서 DB에 추가하고, 해당 설문의 설문 디자인페이지로 이동한다.
- 설문 디자인 페이지
설문의 구조는 폼-섹션-질문의 포함관계로 정의된다. 폼은 1개 이상의 섹션을 포함하며, 한 섹션은 1개 이상의 질문을 포함한다. 어떤 질문의 선택지는 다른 섹션을 활성화한다. 이를 이용해 아래와 같은 연관된 문항 기능을 구현할 수 있다.
예를 들어, 학교 폭력 가해 및 피해 경험을 조사하는 설문 조사에서 학생이 응답한 바에 따라 다음으로 어떤 문항을 보여줄지를 결정하고 싶다고 가정하자. 이 때, Q1에서 가해 경험이 있다고 응답하면 섹션 1 이후 섹션 2로 진행하고, Q2에서 피해 경험이 있다고 응답하면 섹션 3로 진행한다.
이 페이지에서는 화면 문항에 추가할 수 있는 문항 목록이 나타나 있다. 문항 버튼은 문항의 생김새를 형상화한 그림과 문항의 유형명으로 이루어져 있다. 직관적인 디자인으로 누구나 쉽게 폼을 제작할 수 있다. 폼을 디자인하는 과정에서 폼 제작자는 폼-섹션-질문 의 포함관계를 자연스럽게 인지할 수 있으며 쉽게 활용할 수 있어야 한다. 직관적이면서도 친절한 UI를 제작해야 한다. 각주 1에서 설명한 것과 같이, 대표 문항을 설정할 수 있으며, 개인 정보 질문의 경우 암호화 옵션과 만료 기한을 설정할 수 있다.
설문 답변 확인 페이지
암호화 옵션이 지정된 개인정보 질문에 대한 답은 표시되지 않는다.
- 답변 목록 확인 페이지
제출된 답변을 제출 순번, 대표문항 답 혹은 즐겨찾기 여부 순으로 목록에 나타낸다. 위 그림에서 대표문항은 이름을 묻는 질문1로 설정되었다. 목록에서 특정 답변만 즐겨찾기 추가/해제할 수 있으며, 전체 답변의 즐겨찾기 해제도 할 수 있다. 답변 내용을 스프레드 시트(엑셀)로 출력할 수 있다.
- 답변 문항별 확인 페이지
답변을 문항별로 분류해서 보여준다. 주관식은 토큰 목록을 보여주며, 객관식은 그래프(차트)로 보여준다.
- 답변 통계 확인 페이지
조사사의 편의성을 위해 응답 결과로부터 의미있는 통계적 사실을 제공하기 위해 총 3가지의 통계 분석 기능을 제공한다.
연락 서비스 페이지
로그인된 사용자가 사용할 수 있으며, 1개 이상의 설문을 만들어서 답변을 받은 경우에만 이용할 수 있다. 또한 연락서비스를 이용하려고 하는 대상 설문에 연락처를 묻는 질문이 있는 경우에만 이용할 수 있다.
- 문자 보내기 페이지
화면의 왼쪽 패널에서 사용자가 가진 설문 중 하나를 택한다. 그러면 아래에 해당 설문에 포함된 답변들이 목록에 나타난다. 목록에서 수신자를 선택하고 내용을 입력하면 문자를 보낼 수 있다. 목록에서 임의로 수신자를 선택할 수도 있지만 5-1에서 즐겨찾기를 미리 선택해 놓은 경우 즐겨찾기된 답변만 선택해서 수신자를 선정할 수도 있다. ‘전송’ 버튼을 누르면 문자 메시지 전송 성공 여부를 보여준다. 코인이 부족하면 전송하지 않는다. 수신자 연락처 중 일부 불량 연락처가 있다면 나머지 연락처에대해서만 전송하고 불량 건수는 제외하고 코인을 차감한다. 발송 실패한 내용은 이용 기록 페이지(5-3)에서 자세히 확인할 수 있다.
- 이메일 보내기 페이지
이용 방법은 문자 보내기 페이지(5-1)과 유사하고, 내용 입력 후 ‘전송’ 버튼을 누르면 이메일 전송 성공 여부를 보여준다.
- 이용 기록 페이지
사용자가 이용한 연락서비스의 기록을 보여준다. 이용 기록에서 특정 연락 건에 사용된 수신자 목록과 연락 내용을 재활용할 수 있다. 만약 폼의 개인정보 파기 기한이 지난 경우 기록에 있더라도 해당 수신자에게 다시 연락을 할수는 없다.
공지사항 페이지
관리자가 등록한 공지사항을 보여준다. 최신순으로 정렬된다. 목록으로 보여주고, 제목을 클릭하면 내용을 펼쳐서 보여준다.
마이페이지
- 회원정보 변경
회원의 이름, 비밀번호, 프리미엄 회원 등록/해지를 할 수 있다.
- 코인 충전하기
연락서비스를 이용할 때 필요한 코인을 충전할 수 있다.
- 코인 충전/사용 내역
코인을 충전하고 사용한 내역을 보여준다.
과금 정책
본 시스템은 유료로 제공되는 두가지 서비스를 가지고 있다.
코인
카드 결제로 충전할 수 있다. 문자와 메일 1건당 1코인을 필요로 한다. 1코인은10원이며 부가세포함 가격이다. 최소 결제 금액은 1000원(100코인)이며 이후 자유롭게 충전할 수 있다. 코인을 충전하면 이용 기록이 남는다. 한 번 충전한 코인은 소멸되지 않는다.
월정액
월정액 결제로 프리미엄 회원이 될 수 있다. 프리미엄 회원은 진행중 인 설문을 공개해서 메인페이지 배너에 홍보할 수 있다. 금액은 5000원/월 이다.
DB 엔티티 구성
한 설문조사에 포함되는 문항의 순서와 타입이 다양할 수 있으므로, 고전적인 관계형 데이터베이스보다는 NoSQL(MongoDB)를 이용하는 것이 더 용이할 것으로 판단하였다. 구현할 엔티티들의 설명과 역할을 정리하면 아래와 같다.
- USER - 이용자: 회원 관련 데이터를 모두 저장한다.
- 설문조사지 관련 데이터
- FORM - 폼(설문조사지): 개별 설문조사지를 의미하며, 문항들의 집합인 섹션을 포함하는 상위 집합이다.
- SECTIONS - 섹션: 설문조사지를 이루는 개별 섹션으로, 문항들을 포함하는 집합이다.
- 질문
- CLOSED_QUESTIONS - 객관식 질문
- OPENED_QUESTIONS - 주관식 질문
- LINEAR_QUESTIONS - 선형배율 질문
- GRID_QUESTIONS - 그리드 질문
- PERSONAL_QUESTIONS - 개인정보 질문
- 답변
- SUBMISSIONS - 제출답변: 특정 피조사자의 한 설문조사지에 대한 응답 단위, 각 문항에 대한 답변들의 집합
- LINEAR_ANSWER: 선형배율 답변
- CLOSED_ANSWER: 객관식 답변
- OPENED_ANSWER: 주관식 답변
- PERSONAL_ANSWER: 개인정보 답변
- ADDR_ANSWER: 주소 답변
- FILE_ANSWER: 파일 업로드 답변
- GRID_ANSWER: 그리드 답변
- 결제 및 사용 내역
- CONTACT - 문자/이메일 발신 내역
- COINCHARGE - 코인 충전 내역
- COINCONSUMPTION - 코인 소비 내역
- 인증 내역
- VERIFICATION - 사용자에 대한 인증 코드 저장
결과 및 평가
완료 작품의 소개
프로토타입 사진 혹은 작동 장면
내용
포스터
내용
관련사업비 내역서
내용
완료작품의 평가
내용
향후계획
내용
특허 출원 내용
내용