상세 컨텐츠

본문 제목

원격의료상담 툴 개발일기 1화

일기장/[Node.js]Medilogue 개발일기

by lofty statue 2021. 10. 5. 03:31

본문

우선 프로젝트 repo!

https://github.com/vesselofgod/WebRTC_HIPAA_Compliance

 

GitHub - vesselofgod/WebRTC_HIPAA_Compliance: 원격 의료 화상상담 플렛폼 "메디로그"

원격 의료 화상상담 플렛폼 "메디로그". Contribute to vesselofgod/WebRTC_HIPAA_Compliance development by creating an account on GitHub.

github.com

 

전역하고 나서 약 2 달반정도가 지났다. 그 사이에 강화도 여행, 부산 여행, 글램핑 등등 잘 놀고 나름의 칵테일 공부도 하면서 정말 하고 싶은 것들을 하면서 살았다. 솔직히 언제 이렇게 살겠나 싶은 생각으로 잘 놀긴 했는데 그래도 코로나가 심하다 보니 보고 싶은 사람들하고 다 보고 살기는 어려웠다.

 

그때 잠깐 서울에 있는 친구집에서 시간을 보내면서 오래간만에 친구들 많이 만나고 와서 기분전환을 잘했다는 느낌이었고 결정적으로 성환이 형이 나보고 같이 공모전을 나가자고 했다. 이런저런 이야기를 많이 했다. 진심으로 이 형을 보면 '나도 형처럼 열심히 살아야겠다' 생각이 든다. 덕분에 자극을 많이 받았고 집 와서 급하게 다시 1년간 손을 놓았던 개발을 다시 하려고 한다.

그래서 이번에는 원격의료상담 툴을 개발할 생각이다.

사실 성환이형이 의대생이다 보니 아이디어 자체는 내가 흥미를 가지는 분야는 아니긴 하다. 그리고 사실 웹서비스를 개발하는 거 자체가 꽤 낯설어서 잘 될지 확신할 수 없기도 하다. 그래도 뭔가 오래간만에 가슴이 뛴다는 느낌이 있다. 공모전을 나가서 도전한다는 것도 있었고, 저번 하고는 다르게 개발자가 나 혼자이기 때문에 나 스스로의 역량을 확인한다는 생각이 들었기 때문이다. 또한 평소에 관심을 가지는 분야는 아니지만 분명히 유망한 분야라는 생각이 들어서 이번에 같이 공모전을 준비하기로 하였다.

 

front-end에서는 HTML, CSS, Javascript를 사용해서 개발하고 backend에서는 Node.js와 Node.js의 프레임워크들(socket.io, webrtc) 를 기술스택으로 활용할 생각이다. 여기서 뭔가 더 필요하다 싶으면 그때 와서 추가를 할 생각이다.

지금 일기를 쓰는 시점이 개발을 시작한지 3일 차 되는 10/6일인데 나름대로 지금까지는 오픈소스의 힘을 빌려서 꽤 그럴듯하게 되고 있다. localhost에서 돌렸을 때 화면과 소리를 공유할 수 있도록 했고, 오늘은 ngkor를 이용해서 localhost를 외부에서 접근할 수 있게 하고 외부망에서 테스트를 해봤다. 

이렇게 나름 화상채팅의 틀 정도는 그래도 잡았다고 생각한다.

다만 socket통신과 webrtc에 대한 이해가 많이 부족하다고는 생각이 많이 든다. 오픈소스를 활용하는 과정에서 오래된 코드들을 수정하는 과정에서 통신이 안 되는 경우가 정말 많았는데 어찌어찌 디버깅을 하다가 결국 포기하고 다른 오픈소스를 참고해서 짰는데 솔직하게 말해서 원리에 대해서 대략적으로만 알 뿐이지 내가 직접 무언가를 수정하고 기능을 향상하려면 공부를 정말 많이 해야겠다는 생각이 들었다.

 

그리고 성환이형이 강조한 키워드는 보안이다. 의료 서비스들은 개인정보를 많이 담고 있는 경우가 많기에 HIPAA라는 보안규정을 준수해야 한다. 아래 이미지와 같이 여러 보안규정들을 준수해야 하는데 보안 쪽은 아직 단 한 번도 해본 적이 없고 사실 내 영역을 좀 많이 넘어가는 영역이지만 지금은 최선을 다해서 개발하는 게 맞다고 생각해서 일단 부딪혀볼 생각이다.

그래도 다행스럽게 WebRTC 은 은행수준의 보안을 지원한다. 비디오 전송 프로토콜 SRTP(Secure Real-Time Protocol)를 사용하여 WebRTC가 비디오, 오디오 및 데이터에 할당하는 세 가지 채널을 통해 암호화된 콘텐츠를 보내고 받는 방식으로 말이다. 그 외의 정보들도 암호화를 해야 하는데 사실 node.js에서도 암호화 모듈들을 지원하는 것으로 알고 있어서 아마 이런 방식으로 개발을 하지 않을까 싶다. 그리고 보안 쪽은 유지보수도 중요하니까 꾸준히 보는 게 필요한 것 같다.

 

그리고 자체 호스팅 스트리밍 인프라를 사용하면 PaaS(Platform-as-a-Service) 호스팅 제공업체에 의존하는 걸 방지할 수 있다. WebRTC 기반 응용 프로그램은 서버를 통해 실행되므로 스트림도 서버 측에서 해독된다. 이 경우 의존하는 PaaS 제공업체는 귀하가 이를 통해 스트리밍하는 모든 비디오에 액세스 할 수 있기에 자체 호스팅 스트리밍 인프라를 사용하는 걸 목표로 하고 있다.

 

근데 사실 이것도 꽤나 내 능력에서 많이 벗어나는 일이긴 하다... 내가 아직 인프라쪽에 대해서는 공부를 해본 적이 없어서 자체 호스팅은 틀림없이 데이터 보안을 보장하는 방법이지만 Google Cloud  AWS  같은 클라우드 기반 호스팅 제공업체도 HIPAA 호환 플랫폼을 제공하므로 내가 못하겠다 싶으면 이쪽을 통해서 해결하는 게 나을 수도 있겠다는 생각이 든다.

 

기능 설계에 대해서는 조금 더 타이트하게 설계를 해야겠지만 지금은 이 정도로 생각하고 있다.

  • webrtc를 활용한 화상채팅(완료)
  • 로그인 페이지, 회원가입 페이지
  • 채팅창, 메모기능 추가
  • HIPAA compliance를 준수하는 보안규정 설계
  •  - 방 정보, 비밀번호(room에 인증된 사용자들만 출입할 수 있게끔 설계해야 함)
  •  - 녹화 파일 저장(유저가 들어가서 다시 볼 수 있게끔, 유출이 되지 않게끔 캡처 금지)
  •  - 자체 호스팅 스트리밍 인프라 개발

이 부분들은 나중에 클래스 다이어그램 등을 활용해서 조금 더 정교하게 설계할 예정이다.

 

앞으로의 개발계획

일단 내년 2월 정도까지 개발일정을 잡아둘 생각이긴 한데 사실 유지보수를 제외하고 이번달 내에 최대한 역량을 집중해서 어지간한 부분들에 대해서는 다 개발을 하고 싶다. 

 

10/7~10/10 : 로그인 페이지, 회원가입 페이지 개발

10/11~10/15 : 비밀번호 인증 시 room에 출입할 수 있도록 설계

10/18~10/22 : room에 대한 시각화

10/23~10/24 : front-end 디자인 설계

10/25~10/31 : 채팅창, 메모기능 추가

11/1~11/15 : 사용자 정보 암호화(hash-key)

11/16~11/30 : 녹화 파일 저장방식 설계(cloud나 로컬디스크... 등등) , 실시간 녹화 기능, 녹화 추가기능 설계(flag, 영상메모기능)

12/1~12/31 : 자체 호스팅 스트리밍 인프라 개발

 

그 이후로는 취약점 분석, 프로그램 유지보수 등이 주된 업무가 될 거 같다. 암튼 이번 프로젝트 화이팅!!!!

관련글 더보기