상세 컨텐츠

본문 제목

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

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

by lofty statue 2021. 11. 11. 22:13

본문

우선 이전 3화의 링크는

https://oflofty.tistory.com/63

 

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

이전에 썼던 2화는 https://oflofty.tistory.com/62 원격의료상담 툴 개발일기 2화 이전 1편은 https://oflofty.tistory.com/56?category=895804 원격의료상담 툴 개발일기 1화 전역하고나서 약 2달반정도가 지났..

oflofty.tistory.com

3화에서 언급한것처럼 부트캠프를 다녀왔다. 이게 아무래도 방위산업청, 국방과학연구소에서 주최하는 대회이고, 기술의 중요성이 들어가있는 대회다 보니 내가 생각하는 것보다 훨씬 전문성이 있는 대회라고 느껴졌다. 첫번째로는 시제품제작에 대한 강연이 진행되었는데 여기서 상당히 수준이 높다는 느낌이 들었다. 아무래도 국방에 관련된 내용을 다루다보니 하드웨어나 기계에 대한 내용들이 많았지만 그래도 흥미로운 내용들이 많아서 재미있게 들었다.

 

그 후 이어지는 두번째 강연을 들었다. IR 피치를 어떻게 해야 잘 하나라는 내용의 강연이었다. 사실 되게 사소한 부분까지 꼼꼼하게 알려주셨다. 사실 이때까지 어느정도 발표를 잘하는 편이라고 생각을 했었지만 꼼꼼한 성격은 아닌지라 놓치고 있는 부분들이 상당히 많았는데 내용적인 부분 뿐만 아니라 억양이나 제스쳐같은 부분들에 대해서도 상당히 꼼꼼하게 짚어주셔서 나에게는 뜻깊은 시간이 되었다.

 

강연이 끝난 후, 개별 멘토링 시간이 되었다. 여기서 성환이형은 여기에 있는 멘토들이 심사위원으로 들어온다는 정보들을 알려줬고, 그래서 모든 멘토들을 다 찾아다니면서 조언을 구하는 것이 당연히 추후에도 도움이 많이 되겠지만 우리들의 프로젝트를 어필할 수 있는 기회라는 생각이 들었다. 5분이라는 IR 피치 시간은 짧아서 우리의 역량과 아이디어를 다 소개할 수는 없기에 이런 기회에 어느정도 눈도장을 찍어두면 좋을 것이라는 생각이 들었다. 멘토링에서는 소프트웨어 개발 관련된 멘토는 없어서 개발적인 내용에 대해서는 많은 이야기를 나누지는 못했지만 보안에 관련해서는 어느정도 영상 암호화 기법 등에 대한 이야기와 조언들을 들을 수 있었다. 처음에는 낮을 가리는 성격 탓에 '잘 할 수 있을까...?'라는 걱정을 했었지만  이야기를 주고 받으니 이 사람들이 가지고 있는 생각과 통찰력이 참 남다르다는 생각이 들었다. 그러면서 창업/스타트업들이 어떤 식으로 생각하고 일하는지에 대해서 이야기를 들을 수 있었다. 이 사람들하고 이야기하면서 느낀 점은 자신에 대한 확신과 실패를 두려워하지 않는다는 것이다. 멘토님들 중에서 10번 이상을 창업하고 실패하고를 반복한 사람도 있었는데 그 분에게 '실패가 두려울수도 있는 거고 리스크도 클텐데 그렇게까지 도전하는 이유가 뭐에요?' 라고 물어봤었다. 그랬더니 그 답변이 "자신은 가치 있는 삶을 살고 싶은데 그 방법 중에서 내가 선택한 길이 창업이고, 내 아이디어를 통해 사람들의 삶의 변화를 가져오는 것이 너무나 기대된다. 그렇기에 계속 실패를 거듭하더라도 창업을 도전하고 있다." 였다.  교과서적인 이야기로 들리지만 나는 사실 지거나 실패하는거 너무 싫어하고 자신에 대한 확신을 잃을때도 많고, 그래서 도전을 주저하는 사람인데 이런 사람들을 보니 참 멋있었다. 나도 내 내면의 생각을 일단 표현하고 움직여야 겠다는 생각이 드는 하루였다.

 

암튼 다음날에는 IR 피치가 있었다. 성환이형 발표실력이 좋은줄은 알았지만 직접 보니까 정말 이때까지의 수상실적이 이해가 되는 압도적인 발표능력이었다. 심지어 나하고 연습할때는 시간이 안맞았는데 실전에서는 소름돋게 시간을 맞추는 걸 보고 소름이 돋았다. 나도 앞으로 발표를 할 때 타이머를 맞추거나 핵심적인 내용을 빠뜨리지 않고 분량을 조절하는 기술들에 대해서 익혀야 할 필요를 느꼈다.

 

여튼 수상에 대한 확신이 들어서 그 이후의 다른 참가자들의 발표는 편하게 들었다. 그런데 막상 발표가 지연되니까 이런저런 생각이 다 들었다. 이렇게 노력했는데 떨어지면 어쩌지...? 그런데 다행히도 본선진출을 했고 멘토들하고 인사를 주고받은 후 집으로 왔다. 참 이번대회에서 느낀거지만 성환이형이 참 나하고 사람이 다르다. 어떤 일이 다가와도 불안해하지 않고, 사람이 참 사교성이 좋다. 멘토들하고 하루만에 형동생 하면서 지내는 게 역시 보통사람은 아닌 것 같다. 아 물론 나는 조용히 쉬고 싶었는데 "강희 왜이렇게 다운돼있어? 형이 널 위해 노래불러줄게 뭐불러줄까?" 라고 말해서 일부러 자는 척 했는데 "아 그러면 내가 널 위해 아무 걱정하지 말아요 불러줄게!" 하고 열창하는 거 보면... 나하고 다른 사람인가...? 싶었다. 여하튼 대회를 성공적으로 마치고 나왔을 때 간만에 전율을 느낀 거 같았다. 중학교때 나간 토론대회 이후로는 처음 느꼈던 감정이다.

 

암튼 그렇게 대회를 마치고 돌아오니 할 일이 산더미처럼 쌓여있었다. 그리고 기능개발에 대한 피드백을 반영하려니 머리가 터질것같았다. 우선 그래서 보안에 대한 부분을 공부를 하더라도 당장은 서버 관련 보안문제까지 내가 해결하기에는 힘들기에 AWS의 HIPPA Compliance(의료 보안 규정)을 만족하는 호스팅을 하는 것으로 해결하고자 한다. 제작 지원금을 받은 것을 여기에 사용을 하고, 교육요소에 대한 기능개발을 하는 것에 좀 더 초점을 맞춰서 진행하였다.

 

가장 먼저 간단한 코드리펙터링을 하고 난 후 개발에 착수한 것은 교육영상을 등록하고 볼 수 있도록 하는 기능이었다. 처음에는 S3서버에 교육영상들을 올리고 서버에서 영상요청이 오면 틀어주는 방식으로 진행할까 싶었는데... 나오는 요금이 그러면 감당이 안될 것 같았다. 그래서 우회적인 방법으로 세브란스에 등록되어있는 만성질환 관리 영상들을 링크를 걸어서 볼 수 있도록 하였다. 다행스럽게도 성환이형이 자대 의대생이라 여기에 대한 협조는 쉽게 받을 수 있었다. 사실 이 기간동안 엄청 새로운 일을 했다기보다는 데이터베이스 관리 작업에 치중하고 적합한 페이지 템플릿을 찾아서 이에 맞춰서 디자인하는 작업을 열심히 했다.

 

데이터베이스 작업은 게시판 작성할 때와 다른 부분이 없었다. mysql을 이용해서 게시판 테이블을 만든 다음에 교육영상 등록을 해서 insert 쿼리를 실행시켜서 영상을 등록하였다. 다만 여기서는 영상을 삭제하거나 수정할 일이 별로 없겠다 싶어서 그 기능들은 따로 개발하지는 않았다.

 

사실 여기서 기껏 해봤자 디자인이 예쁘게 보일 수 있도록 한 정도여서 크게 어려운 내용은 없었다. 그럼에도 '구현하기 쉽지만 데모에서 어필할 수 있는 장점' 이라는 생각이 많이 들어서 공을 들였다. 결국 데모에서 보여지는 것은 백엔드쪽보다는 디자인이 크다는 점이 백엔드 개발자를 꿈꾸는 나한테 있어서는 아쉽지만 그래도 일단 예쁘게 보여지려고 노력을 했다. 이럴 때 가끔 디자이너나 프론트엔드 개발자와 협업을 진행했으면 시간을 많이 아꼈을텐데... 라는 생각은 들었다.

 

다음으로는 의사가 환자에게 일일미션을 내주어서 환자가 꾸준하게 안까먹고 자신을 관리할수록 하는 기능을 추가했다. 솔직히 나도 병원에 갔을 때 약 꼬박꼬박 먹고 꾸준히 관리하는 것이 힘들어 이런 기능은 정말 필요하다고 생각했어서 성환이형이 이 기능을 말할 때 나도 바로 감탄하면서 이해했고 이해관계가 참 잘 맞았다. 다만 이를 캘린더를 통해서 일일미션을 관리하고 자신이 얼마나 꾸준하게 미션을 수행했는지를 나타내려고 했는데....

 

캘린더를 구현하는 방식이 잘 감이 오지 않아 오픈소스를 리펙토링 해서 쓸만하게 만들기 전까진 거의 7000에 육박하는 양이었다. 솔직히 이 코드를 한줄 한줄 분석할 수도 없고 해서 개발자도구를 열어서 필요한 기능만 따내려고 했는데 이게 함수들이 얽혀서 캘린더 작동을 구성하는지라 함부로 코드를 건드리기도 어려웠다. 그래도 어찌어찌 내가 쓸 수 있게 바꾸어 놓기는 했는데 이걸 라우터에서 받아온 DB 쿼리 정보를 어떻게 연동할 지 감도 안왔다. 페이지 템플릿인 ejs에 맞춰져있는  코드였다면 변수를 수정하는 과정을 통해서 렌더링할 수 있었을텐데 이 js코드에 DB를 연동해서 정보를 가져오는 게 당장은 어떤 방식으로 구현해야 하는지 생각을 해봐야 할 것 같다. 그리고 일일미션 페이지는 get 요청을 할때 각각의 인덱스정보가 /idx가 붙는 방식이 아닌 날짜정보(20211119) 이런 식으로 붙도록 설정했다. 각 유저별로 하루에 수행해야 할 미션이 있다면 날짜 정보와 유저 id를 통해 불러온 다음, 해당 정보들을 유저들에게 랜더링을 해서 보여주고, 해당 미션의 경우 환자를 관리하는 의사에게도 전달이 가능하도록 DB 설계를 하였다. 

 

다만 이제 사용자 입장에서 인증 과정이 지금은 단순하게 체크만 하면 되도록 했는데 알림이 가거나, 혹은 인증 방식을 추가하는 등의 기능을 더하면 더욱 완성도가 높은 기능이 되지 않을까? 라는 생각을 했고, 이를 그대로 성환이형한테 이야기를 하니 너무 좋은 아이디어라고 accept를 받았다. 그래서 추후에는 이런 기능들도 추가해서 더욱 퀄리티를 높이고자 한다. 일단은 초기 MVP에서는 이런식으로 날짜와 userID로 구분하면 일일미션을 데이터베이스에서 가져와서 표시하게 된다.

여기서 미션 달성여부를 체크하는 게 약간 시행착오가 있었는데 처음에는 미션 테이블을 구성할 때 '인덱스가 필요없을 거 같아서 인덱스를 안만들었다가 막상 이 미션들을 찾아서 달성여부를 true로 만들어주려고 했는데... 해당 미션이 보이지 않는 문제가 생겼다. 그래서 테이블을 드롭시킨 다음에 인덱스를 만들어주고 그 인덱스를 바탕으로 해당 쿼리를 찾아서 달성여부를 true로 고쳐줬다. 아 맞다. 참고로 boolean으로 선언했는데도 t/f 가 숫자로 들어가긴 하는 거 같았다. 큰 이슈는 아니지만 말이지만 나한테는 익숙하지는 않았다.

관련글 더보기