Git Product home page Git Product logo

60db's Introduction

60 Decibel

청각 장애인 환자들을 위한 오픈소스 모바일 문진표 서비스

배포일자 : 2019.10.06 / Version 1.0.7

img

문서 개요


1. 개발 가이드라인
2. 개발 동기
3. 개발 팀 구성
4. 오픈 소스로써의 가치
5. Design Patterns
6. 아키텍처
7. 시사점
8. 맺음말

1. 가이드라인


1.1) 문서를 시작하기 전에
  • 스택 구성

    • Frontend는 Vue.js & Backend는 DRF(Django Rest Framework)를 사용했습니다.

      자바스크립트 기반 웹 프레임워크 Vue.js 파이썬 기반 백엔드 프레임워크 DRF
      vue.js에 대한 이미지 검색결과 drf에 대한 이미지 검색결과
    • 웹 프레임워크 사용 모듈

      Vuetify Axios(프론트 & 백엔드 통신) Vuex(로그인 & 문진표 상태 관리)
      관련 이미지 axios에 대한 이미지 검색결과 vuex에 대한 이미지 검색결과
    • 백엔드 프레임워크 사용 모듈

      • Json Web Token
      • Django Cors Headers
> git clone https://github.com/RyanKor/60DB.git

# main/frontend/package.json (Vue.js 모듈 설치 파일 위치로 이동)
> npm install (Vue.js 모듈 설치 진행) 

# 60db(python)
> python -m venv 60db (가상환경 설치. pipenv or virtualenv 어떤 것이든 사용가능)
> source 60db/Script/activate
> (60db) pip install -r requirements.txt (백엔드 모듈 관련 부분 설치)

# 60db(node.js)
> main/node-back으로 이동
> npm install
> 설치 완료 후 npm run dev
  • 원활한 소프트웨어 활용을 위해 Package.json 과 requirements.txt에 명시된 모듈들을 모두 설치해주십시오.
1.2) 용어에 관한 사항
  • 의사들의 정확한 진단을 위해 의학 전문 용어가 사용되었습니다. 60 Decibel에 설문지 및 프로필 작성에 관한 PR을 보내주시는 개발자님들께선 용어 사용에 유념해 코드를 작성해주시면 감사하겠습니다.
    • 예) survey application 내의 models.py : 복부팽만, 복부종괴 등
  • 문진카드 기능 수정 시, '촉진' 등 일부 용어 사용에 대해 수정 시 유념해주십시오.
1.3) 컴포넌트 구성에 관한 사항
  • 60 Decibel의 초기 개발팀은 개발 경력 6개월 미만의 비전공생들로 구성되었습니다. 따라서 컴포넌트 계층 및 Reusable한 컴포넌트 구성에 관한 기본 지식이 짧은 점 이해해주시기 바랍니다.

  • 컴포넌트 구성

    img

  • 60 Decibel은 페이지와 기능에 따라 컴포넌트를 구분했다.

    • aboutPage : 서비스의 목적 및 소개를 안내하는 컴포넌트다.
    • cardPage : 청각장애인의 의사와의 원활한 소통을 위해 포함시킨 문진 카드 기능이 담긴 컴포넌트다.
    • homePage : 페이지 접속 시 등장하는 메인 페이지를 관리하는 컴포넌트다.
    • profilePage : 청각장애인의 프로필을 표시하는 컴포넌트다.
    • profileUploadPage : 청각장애인의 프로필을 업데이트 하는 컴포넌트다.
    • registerPage : 로그인, 회원가입 기능 등을 관리하는 컴포넌트다.
    • resultsPage : 모바일 문진표를 작성하고 난 이후 결과값을 표시하는 컴포넌트다.
    • surveyPage : 모바일 문진표 작성과 관련한 페이지를 관리하는 컴포넌트다.

2. 개발동기


개발자와 비개발자 모두가 이미 오픈소스에 큰 빚을 지고 있다. 일상생활에선 사물인터넷이 적용되는 가전제품부터 소프트웨어 개발에 직접적으로 영향을 주는 프레임워크 및 라이브러리 등이 필수불가결한 위치에 자리매김하고 있다. 오픈 소스가 환영받는 가장 큰 이유를 들라고 한다면, 오픈소스가 개발자 커뮤니티에 의해 검증되고 서비스 운용에 안정적인 코드를 배포할 수 있다는 점 때문일 것이다. 때문에 소프트웨어가 인간의 삶에 미치는 영향이 커질수록 오픈 소스 생태계도 함께 더 큰 역할을 맡게 될 것이다.

  • 병원을 찾는 대한민국 환자들의 병원 평균 진료시간은3분이다.
  • 환자도, 의사도 이 짧은 시간 안에 병원 진료를 하는 것에 익숙해져 있으나 사실 OECD 평균 환자의 진료시간은 15분이다.
  • 3분이라는 시간 동안 환자와 의사사이의 진료가 정확하게 이뤄지기 어려운 것이 사실이지만, 대학병원에서도 15분 내에 5-6명의 환자가 예약되어 있는 진료 명단을 쉽게 볼 수 있다.
  • 이러한 물리적 제약 속에서 의사가 환자를 꼼꼼하게 진찰한다거나 환자의 궁금증에 대하여 알아들을 수 있게 답변한다는 것은 불가능하다.
  • 일반 환자들조차 꼼꼼한 진료를 받기 어려운 현재의 의료 체계 속에서 장애인 환자들은 더욱 어려운 상황을 마주한다.
  • 특히 청각장애인들은 옆에 의사소통을 도와줄 사람이 없다면 의사에게 자신이 어디가 아파서 왔는지, 의사가 어떤 것을 묻고 있는지 등 진료의 기본이 되는 질문을 듣고 답하는 것조차 어려운 것이 현실이다.
  • 결국에는 몸이 아픔에도, 병원을 방문하는 것 자체가 더 큰 불편함이 되어 병원을 찾는 것을 망설이기도 한다.
  • 60 decibel팀은 의사의 말을 인지하기 어려운 이들이, 짧은 문진시간 내에 효율적인 의사소통을 바탕으로 원활한 진료를 받을 수 있기를 바라는 마음에서 청각장애인을 대상으로 한 모바일 문진표 소프트웨어를 제작하였다.
  • 이를 통해 이들이 부담없이 병원을 찾고, 자신들의 기본적인 권리를 누릴 수 있기를 바란다.

3. 개발 팀 구성


3.1) 협력 팀 소개
60 Decibel 멋쟁이 사자처럼 7기 고려대학교 의과대학
img img img
  • 60DB : 고려대학교 멋쟁이 사자처럼 7기 출신으로 전원 컴퓨터공학 비전공자 출신 개발자다. 실질적인 60Decibel 개발을 맡아 진행하고 있다.
  • 멋쟁이 사자처럼 : 컴퓨터공학 비전공자들도 프로그래밍 기초 지식을 배워 자신만의 웹서비스를 만들 수 있도록 돕는 대학생 중심 프로그래밍 동아리로써 개발에 관한 전반적인 사항에 대해 조언을 얻었다.
  • 고려대학교 의과대학팀 : 개발에 필요한 기획을 맡았으며 문진표에 명시되는 용어 및 청각장애인을 대상으로한 베타 테스트 등을 진행했다.
3.2) 개발자 구성
팀원 역할
img 김승태
고려대학교 영어영문학과
- Vue.js / Django Rest Framework
- 오픈 소스 문서화 작업, 배포(AWS) 담당
img 이인우
고려대학교 중어중문학과
- Vue.js / Django Rest Framework
- 디버깅 테스트 & 코드 리팩토링, 배포(AWS) 담당
img 박지환
고려대학교 심리학과
- Vue.js / Django Rest Framework
- 프론트 코드 리팩토링 총괄
img 최상하
고려대학교 심리학과
- Vue.js / CSS
- 프론트 UX/UI 총괄
img 박선영
고려대학교 보건환경과학융합부
- Vue.js / Django Rest Framework
- Backend Serializer & Frontend About us 페이지 제작
img 이채연
고려대학교 독어독문학과
- Vue.js
- 모바일 간편 진찰 카드 기능 구성

4. 오픈소스로써의 가치


  • 전국의 보건소 및 청각장애인들의 치료를 중심으로 운영되는 병원 등에 비치된 태블릿 PC에 활용하고자 처음부터 웹앱의 형태로 제작했다.
  • 이는 의사에게 진찰을 받기 전, 문진표를 작성한다면 청각장애인 – 의사 사이의 진찰 시 필연적으로 발생하는 의사소통의 어려움을 개선할 수 있으며 의사는 진찰 과정에서 보다 정확한 진료를 해줄 수 있는 장점을 갖는다.
  • 11월에 베타테스트를 거치고 앱 형태로 배포할 목적이다. 앱 출시를 염두한 이유는 병원 방문 전에 청각장애인 환자들이 미리 작성해서 가져온 문진표를 환자에게 바로 보여주고자할 요량으로 출시 계획에 포함시켰다.
  • 개발자 커뮤니티에 해당 소스를 오픈소스 형태로 다수의 개발자들이 참여한다면 더 높은 수준의 서비스를 제공할 수 있을 것이다.

5. Design Patterns


5.1) Vuex Based on Flux

img

  • 접속하는 다수의 사용자 상태 변경 관리를 목적으로 Flux Design Pattern을기반으로한 Vuex를 채택했다.

  • State에 작성된 상태관리 데이터를 Actions의 Commit을 통해 Mutations에 변화를 유도한다.

  • 최종적으로 변경된 상태 관리 데이터가 View Components에 렌더링된다.

5.2) 시스템 구성

img

  • Client의 주된 접속 경로는 웹 브라우저 및 모바일 애플리케이션이 될 것이다.

  • Middleware는 Django 내 settings.py를 반영했다.

  • Server는 로컬에서 DRF를, 배포는 AWS EC2 - Ubuntu 환경에서 진행되었다.

  • Data는 Sqlite를 Default DB로 Login / Profile / Survey 등 핵심적인 저장 데이터를 명시했다.

6. 아키텍처


  • 유연성(Flexibility): 컴포넌트 전역에 걸쳐서 공유해야하는 상태 값들(예: 사용자 인증)을 컴포넌트에 독립적이지 않게 적용할 수 있다.

  • 확장성(Scalability): MVC(Model–View-Controller) 모델과 다르게 대규모 사용자에 대한 상태 값들을 처리할 수 있다.

  • 유지보수성(Maintainability): 직관적이고 가독성 높은 코드를 작성하여 오픈소스 커뮤니티에 참여하는 개발자가 이해하기 쉽게 제작했다.

  • 재사용성(Reusability): Components, Actions, Mutations, State를 각각 분리하여 각 단위별로 재사용 가능하게 구성했다.

7. 시사점


  • 60 Decibel 팀의 첫 개발 프로젝트로써의 임무를 성공적으로 수행했다.
  • 청각장애인 - 의사의 문진 시, 실제 사용과정에서 복통에 관한 의사 전달이 80%까지 가능할 수 있었다.
  • 테스트 과정에서 발생하는 오류를 수정하면서 안정적인 코드 작성에 대해 고민해볼 수 있었다.
  • 기능별 컴포넌트 작성으로 유지,보수하기 쉽고 재사용 가능한 코드 작성을 할 수 있었다.

8. 맺음말


  • 오픈 소스 개발의 가장 큰 장점은 다수의 개발자에 의해 검증가능하고 안정적인 코드를 작성하는 것에 의의가 있다고 본다. 제작 과정에서 도움을 준 공개개발자 SW센터 멘토님들과 고려대학교를 졸업하고 현업에서 종사 중인 선배님들께 큰 감사의 인사를 드리며, 향후 업데이트를 통해 복통 이외의 설문 조사 내용을 차차 추가해 나갈 예정이다.

60db's People

Contributors

parkjihwanjay avatar antlikelion avatar updownc avatar ryankor avatar soniacomp avatar

Watchers

James Cloos avatar  avatar

60db's Issues

프로필 작성 페이지 오류

  1. 프로필 작성 페이지에서 checkbox 코드 오류 -> 수정 필요(하나만 클릭하면 전체가 다 클린된다.)

  2. 기타 클릭시 내용을 입력할 수 있는 텍스트 상자 생성 필요.

sockjs 관련 오류

스크린샷 2019-09-30 오후 11 57 52

위 사진처럼 계속해서 http 요청이 가고 오류가 뜨네요. node와 관련 있는거 같은데 아시는 분 계신가요?

api url 문제점

복통 설문을 보내는 url : api/surveys/stomach/
설문을 받는 url : api/stomach/복통 ID

-> 서로 다른 패턴이라 프론트에서 구조화하기 힘듬
-> 백에서 url 패턴 수정 필요

추가 오류들

  1. 해당 없음 누르면 다른거 클릭 안되게

  2. 하나라도 클릭하면 다른 페이지 못 넘어가게

설문 결과 렌더링시 오류

설문 결과 렌더링시 동반증상이 안 나타날 때가 있음.

또한, 다른 항목들도 늦게 뜰때가 있음.

마지막으로 slice와 관련된 에러 해결 필요.

스크린샷 2019-09-29 오후 11 25 35

공개 SW 개발자 대회 2차 심사 관련 해야할 것들

2차심사대상자는 산출물 검증이 필수입니다.

산출물검증은 라이선스검증과 기능테스트로, 2차 심사 항목으로써

선택이 아닌 필수 진행 과정입니다. (미진행시 2차심사대상자 제외)

산출물검증일정 : 10월21일~11월1일(2주간 진행)

  • 라이선스검증기관 : 공개SW역량프라자

    2차심사대상팀의 팀장메일로 검증계정 발급 (일정 : 10/21, 월)
    -> 온라인 검증도구 활용하여 소스코드 업로드 (일정 : 10/23, 수)

-> 스캔이 완료 되면, 반드시 분석완료사실을 알려주셔야합니다.

-> 이메일로 분석사실 완료후, 검증기관에서 검증시작

  • 기능테스트검증기관 : 엠스텍

    첨부파일(개발SW/시스템 소개서)에 있는 양식을 활용

데이터 호출 시점 변경

현재 데이터 호출을 created 단에서 하기 때문에 화면이 렌더링되고 데이터가 바뀌는 ui적으로 어색하다.

데이터 호출 시점을 router 단으로 바꾸고 데이터가 완벽히 불러와지기 전에는 스피너 넣기.

resultPage에서 computed에서 데이터 불러오는 지점 router단으로 바꾸기(slice 적용하는 지점)

About page 렌더링시 오류

About page 렌더링시 오류 발생

밑의 아이콘을 바꿔도 똑같은 오류 발생

스크린샷 2019-09-29 오후 11 26 34

컴포넌트 통신의 문제일 것으로 추정.

피드백 반영하여 back 모델 수정할 것들

프로필 모델 수정(전부 CharField혹은 TextField)

과거력

1.건강검진 이상소견 추가

2.병 진단 이력(diagnosed_disease)에 종속되는 필드 세 개 추가 및 프런트 수정
-몇 년 전에 진단 받았는지
-먹고 있는 약이 있다면 무엇인지(null,blank=True설정){기타 선택시에도 입력 받음}
-기타를 선택했을 경우 기타의 value값을 받는 게 아니라 확장되는 질문의 입력값을 value로 받아야 함(이건 vue에서 조정)
-어디서 진단 받았는지(근데 이건 기타 말고도 다 해당되는 거 아닌가? 애초에 없음 선택할 때를 제외하고는 확장형으로 다 떠야할 거 같긴 한데)

3.병 진단 이력(diagnosed_disease)에 종속되는 복용중인 약(taking_medicine)외의 '~이외 복용중인 약' 필드 추가

4.복용중인 건강식품 필드 추가

5.가족력(family_history)에 종속되는 출처(from_whom)필드 추가

6.알레르기 이력 필드 추가

사회력

7.커피 이력 필드 추가

8.스트레스 이력 필드 추가

9.흡연(smoking)에 종속되는 '몇 년 전에 끊었는가'(come_off_smoking)필드 추가

설문 모델 수정(전부 CharField혹은 TextField)

1.통증이 심화되나요(pain_worse)필드의 반대급부로 통증이 완화되나요(pain_relieve)필드 추가

'해당사항 없음'문제

현재 복수선택 설문 문항의 경우 한 버튼을 클릭하고 다른 버튼을 클릭하면 css효과가 마지막 버튼에만 나타나는 문제가 있습니다.

  • '해당사항 없음'과 다른 선택지가 동시에 선택 가능한 것도 문제입니다.
    아마 ref를 걸어서 해야될 거 같긴 한데 이벤트 핸들링 쪽을 잘 몰라서 엄두가 안 나네요

피드백 반영하여 front 수정할 것들

1.마지막으로 건강검진 받은 시기 질문은 건강검진 여부 '있음'의 확장형 질문으로 바뀌어야 함.

2.병 진단 이력은 복수선택 필드인데 해당 선택지마다 확장형 질문이 2개(진단 시기, 복용중인 약)씩 떠야 하는데 그럼 이것마다 받는 필드가 다 따로 있어야 하나? 이거 개골때리네

3.병 진단 이력에서 '없음'을 제외한 모든 선택지에 '해당 질 어느 병원에서 진단 받았습병을니까?'질문이 확장형으로 추가되어야 함
(지금은 '기타'에만 되어있음)

4.병 진단 이력에서 '없음'을 선택하면 다른 선택지는 선택이 안되어야 하는데 선택이 됨.
=>제 생각엔 아예 '없음'선택지를 없애고 '진단 이력이 없다면 생략해주세요'라고 부연설명하는 게 더 나을 것 같습니다.
=>로직 짜는 거 너무 귀찮자나요

5.~외에 복용중인 약이 '있음'/'없음'으로 되어있는데 '~외에 복용중인 약이 있다면 적어주세요'가 더 바람직할 것으로 보임
=>'약 이름' 필드와 통합해야 함

6.복용중인 건강 식품이 복수선택이 아니게 되어 있음. 복수선택으로 바꾸고 '기타'의 경우 확장형으로 기입할 수 있게끔 수정

7.가족력의 경우 '있음'/'없음'에서 있음을 선택하면 확장이 되게끔 되어 있는데
저는 이것도 바로 '출처(누구와 관계된 가족력)'와 '질병의 종류'를 띄우고 '해당사항이 없을 경우 생략해주세요'라고 부연설명 하는게 좋지 않나 싶습니다.

8.커피 이력, 스트레스 이력 질문지 문구 수정

9.디폴트가 '아니오'여야 되는 필드
-흡연
-음주

설문 진행 방식 변경

지금은 해커톤 대비로 설문을 안해도 넘어가서 제출할 수 있게끔 back단에서 blank=True, null=True로 되어있는데, 실사용을 고려해서 blank=True, null=True 해제하고 그에 대한 오류를 프런트에서 받아 모달을 띄워서 "설문지를 모두 작성해주세요"라는 식으로 알려줘야 될 것 같습니다.
back만지는 건 제가 금방 하면 될 것 같은데 모달 띄우는 방식은 잘 모르겠네요 ㅠㅠ

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.