20년 3월부터 공군에서 군복무를 시작한 필자는
21년 8월, 미복귀 휴가 전 좋은 기회를 잡게 되었다
과학기술정보통신부와 국방부, 정보통신산업진흥원이 주관/주최하는 2021 군장병 공개SW 온라인 해커톤이 개최,
참가대상이 군장병 및 군무원 이라 군인 신분으로서 참가할 수 있는 최고의 기회라고 생각했기에 바로 참가 신청 하였다
https://osam.kr/hackathon/main
코로나 판데믹 전까지는 군장병 해커톤도 일반적인 해커톤과 마찬가지로
참가자들은한 장소에 모여 짧은 기간동안 프로젝트를 진행했었다고 한다
하지만 코로나로 인해 작년부터는 해커톤 기간을 늘리는 대신
비대면으로 팀원과 협력하여 프로젝트를 진행하도록 변경되었다
군장병 특성 상 모두가 자기계발시간이 보장되지 않을 뿐더러
개발환경도 싸지방 컴퓨터 1대가 전부라는 열악한 환경을 주최측도 알고 있는지
거의 한달이라는 기간동안 프로젝트를 진행할 수 있도록 배려해준 것 같다
사실 20년도에도 개최되어서 참가 신청은 넣었지만
당시에는 웹에 대해선 거의 무지한 수준이였고
지치는 막내생활로 인해 일과 후 자기계발에 신경을 쓰지 않았기에
필수강의도 다 듣지 않고 선발 과정에서부터 탈락했었던 좋지않은 과거가 있었다
사실 마음먹고 하면 안될건 없었다
다 핑계지...
😔
신청 및 참가 과정은 아래에서 확인 가능하다
https://mskim9967.tistory.com/66?category=1045733
좋은 팀원들과 아이디어 덕분에 첫 해커톤임에도 불구하고
정보통신산업진흥원장상(3등)이라는 매우 만족스러운 결과를 받을 수 있었다 🎉
어쩌면 준비되지 않은 작년에 참가했더라면
수상하지 못했을 뿐더러 다른 팀원에게도 민폐만 끼쳤을 것 같다는 생각이 든다
제출일로부터 거의 20일이 지났지만🙃
지금이라도 기억을 더듬어서 회고글을 작성하려 한다
😺 Github Repository
https://github.com/osamhack2021/app_web_IoT_UMCS_Team60
🕐 타임 라인
~ 8.22 | 참가 신청 (강의수강 / 코딩테스트 / 계발계획서) |
8.27 | 참가자 선발 |
8.28 ~ 9.4 | 팀 빌딩 |
9.4 ~ 9.15 | 팀 회의, 프로젝트 구체화 |
9.16 ~ 10.11 | DB 설계, Backend 구축, IoT 제작 |
10.12 ~ 10.19 | 영상 제작 |
10.20 | 최종 제출 |
📄 계발계획서
선발 과정에 통과하기 위해서는 본인의 프로젝트 아이디어 계획서를 필수로 작성해야 헀다
어떤 아이디어를 내야 통과할지 고민하던 중...
군생활 중 영내 확진자 발생으로 인하여 코호트 격리를 시행했던 경험이 떠올랐다
필자는 코호트 격리 중 밀접접촉자로 분류되어서 개인실에 격리되는 바람에 나름 편하게? 격리되었지만
당시 생활관장으로서 생활관원들을 통제하는 과정에서, 여러 문제점들을 발견하였다
- 당직계통에서 직접 공공시설 사용 시간표를 짜고 전파해야 함
- 방송망 혹은 메신저(카카오톡)로 매번 전파해야 함
- 일방적인 통보, 병사가 공공시설 사용을 요청하기 어려움
- 당직계통에서 병사들이 통제에 잘 따르는지 확인 할 방법이 전무
- 실제로 시간을 착각하여 타 호실원간 접촉이 발생할 뻔한 경우를 봄
- 코호트 격리의 핵심은 타 호실원간 접촉 금지
- 이를 위반하게 되면 코호트 격리의 의미가 없어짐
- 비효율적인 체온 측정 보고 체계
병사 → 생활관장 → 으뜸병사 → 당직계통
순으로 불필요한 보고체계를 거침- 개개인의 체온을 메신저로 하나씩 전송하고 이를 하나씩 확인함
- 누군가 보고를 하지 않았다면, 누군가를 찾기 위해 메신저를 하나씩 확인해야 함
- 지난 체온을 다시 조회하기 매우 불편한 구조
이러한 문제점들을 해결할 아이디어면 꽤 괜찮지 않을까? 라는 생각과 함께 계획서를 제출하였고
다행히도 선발과정에서 통과하였다!
초기 개발 계획서 보기/숨기기
프로젝트 명
영내 장병 코호트 격리 관리 시스템 / CIMS (Cohort Isolation Management System)
개요
부대 내 확진자 발생으로 인한 부대 코호트 격리 시, 공공시설 사용 관리 및 체온 측정 보고 등 영내 장병 관리를 위한 시스템
세부 내용
부대 내 확진자 발생으로 영내 코호트 격리가 불가피한 상황일 시, 생활관별 인원 간 접촉을 최소한으로 줄여야 합니다.
하지만 화장실과 샤워실, 세탁실과 식당 등의 필수 공공시설의 사용은 필수이고, 자칫하다가는 생활관별 인원의 불가피한 접촉이 발생할 수 있습니다. 이는 추가 확진자 발생 등 코호트 격리의 의미를 완전히 상실해버리는 최악의 상황을 불러올 수 있습니다.
영내 인원과 생활관 정보를 시스템에 전산화시키고 실시간으로 관리한다면, 불가피한 접촉을 막아 안전한 코호트 격리를 시행할 수 있습니다.
CIMS를 통해 부대별 관리자는 생활관별 공공시설 사용시간을 사용자(영내 장병)들에게 정확하고 빠르게 전파할 수 있고, 더 나아가 공공시설별 비콘(Beacon)을 설치하여 실시간 공공시설별 인원 및 사용 여부를 사용자와 관리자가 조회할 수 있습니다. 또한, 사용자별 체온 측정 보고 기능으로 이상 유무를 즉시 확인할 수 있습니다.
개발 영역
Frontend(Web)
개발 스택(확정 x)
Frontend Framework(React.js, Vue.js...)
기능
- 회원가입 및 로그인 Page
- 소속부대, 성명 입력 (상용화 시 군 인트라넷 MOUS 체계와 연동)
- 부대 관리자에게 관리자 권한 부여
- User
- 공공시설 인원 현황 실시간 모니터링 Page
- 공공시설 사용 시간표 조회 Page
- 체온 측정 결과 및 이상유무 보고 Page
- Admin
- 건물 전산화 Page
- 각 부대 내 건물들 및 내부 시설 위치(생활관, 화장실, 샤워실, 식당...)과 실제 사용 인원 및 최대 수용인원을 입력하여 부대 내 시설들을 GUI 기반으로 전산화
- React.js GUI Libraries
- 공공시설 사용 시간표 작성 Page
- 건물 전산화 Page
Backend (Server)
개발 스택
- Server OS: Ubuntu
- Server Framewrok: Node.js Express
- Database: MySQL
기능
- Rest API
- User 정보 / 건물 전산화 정보 / 공공시설 사용 시간표 정보 / 체온 측정 및 이상유무 정보
- Nginx, Docker를 활용한 무중단 배포
Mobile Application + IoT
OS (확정 x)
Android Or iOS
기능
- 회원가입 및 로그인 Page
- 소속부대, 성명 입력 (상용화 시 군 인트라넷 MOUS 체계와 연동)
- 부대 관리자에게 관리자 권한 부여
- User
- 공공시설 인원 현황 실시간 모니터링 Page
- 공공시설 사용 시간표 조회 Page
- 체온 측정 결과 및 이상유무 보고 Page
- Admin
- 공공시설 사용 시간표 작성 Page
- IoT(Beacon/Arduino)
- 아두이노 블루투스 모듈(HM-10)으로 비콘 제작 및 Application과 연동 [예시]
- 비콘을 공공시설 출입구에 설치하여 사용자가 출입 시, 사용자 디바이스와의 Bluetooth 통신으로 출입 여부를 감지하고 Server에 데이터를 전송
효과 및 전망
부대 내 확진자 발생으로 인한 영내 코호트 격리를 겪는 중, 통제하시는 간부님들의 업무를 보며 CIMS를 구상하게 되었습니다.
영내 장병과 마찬가지로 통제 간부 또한 인원 간 접촉을 피해야 하지만 코호트 격리 관련 체계가 없는 현재, 생활관별 인원들이 실제로 정해진 시간에 맞추어 공공시설을 사용하는지, 사용 도중 타 생활관과 접촉하였는지 확인 및 관리할 방법이 마땅치 않은 것이 현실입니다.
CIMS가 상용화된다면, 체계적인 시스템 아래 통제 간부는 정확한 시간 전달 및 영내 장병 모니터링이 가능해지고, 영내 장병들은 불가피한 타 호실 인원과의 접촉을 피할 수 있습니다. 이를 통해 완벽한 코호트 격리 및 바이러스 추가 확산을 막을 수 있고, 더 나아가 신속한 부대 정상화 및 완벽한 작전 수행으로 이어질 것을 기대합니다.
👬 팀 빌딩 및 프로젝트 구체화
해커톤에 참가하기 전, 선택의 기로에 서게 되었다
- 내 아이디어를 주제로 팀원을 모집
- 타인의 아이디어를 주제로 그 팀에 참가
무식하면 용감하다더니, 팀프로젝트라고는 한번도 안해본 필자는 본인의 아이디어만 믿고 팀원을 모집하기로 결정하였다
그리고 아무에게도 연락이 오지 않았다
😇
어찌어찌하여 웹 프런트 개발자분이 조인해주셨고
바슷한 아이디어를 가진 다른 팀과 합병하여 총 4인 팀을 구성하게 되었다
다른 팀의 아이디어는 NFC 태깅 기반 비대면 이동보고 시스템이였고,
양측의 합의를 통해 평시에는 이동보고, 코호트 격리시에는 실내 모니터링이 가능한 BLE Beacon 기반 시스템 구축으로 프로젝트를 진행하기로 결정하였다👏
초기 개발 계획서 보기/숨기기
프로젝트 명
비대면이동통제시스템 (Untact Movement Control System / UMCS)
개요
비대면이동통제시스템은 IoT로 병력이 이동할때 당직사관에게 비대면 보고 및 승인 그리고 각 시설의 출입기록을 전산화 관리할 수 있습니다. 또한 돌파간염이 증가하고 있는 현재 예상치 못하게 영내병력의 확진자가 발생할 경우 "코호트격리" 상황 시 효과적인 분리통제 및 관리를 할 수 있습니다.
세부 내용
현 대부분의 부대에서는 영내자의 생활관 이탈 시 행선지 행정반에 있는 화이트보드에 적고, 복귀할 시 이름을 지우는 식으로 보고를 대신한다. 이러한 방법이 많은 부대에 보편적으로 사용되고 있다. 하지만 이러한 통제방식은 많은 허점이 존재하는데, 병력이 보고한 대로 이동하였는지 확인할 방법이 없을 뿐더러 유사 시 인원들을 즉시 통제할 수 없다. UMCS는 위의 문제들을 해결하기 위해 고안되었다.
영내자는 스마트폰 Application을 설치하여 이동 및 도착보고를 진행 수 있고, 유사 시 인원 소집 명령을 알림으로 받을 수 있다. 관리자는 영내자가 실제로 도착보고 후 행선지에 위치하는지를 Web Admin Page를 통해 확인할 수 있다. 군의 특성상 GPS 기반의 위치 인식 서비스로 영내자의 위치를 확인하는 것은 위험 부담이 크므로, 각 장소에 블루투스 저전력 프로토콜(BLE) 기반 Beacon을 설치하여 실시간 모니터링 가능하도록 하였다.
UMCS은 평시 뿐만이 아닌 현 코로나 팬더믹 상황에서도 빛을 발휘할 수 있다. 부대 내 확진자 발생으로 영내 코호트 격리가 불가피한 상황일 시, 생활관별 인원 간 접촉을 최소한으로 줄여야 한다. 하지만 화장실과 샤워실, 세탁실과 식당 등의 필수 공공시설의 사용은 필수이고, 자칫하다가는 생활관별 인원의 불가피한 접촉이 발생할 수 있다. 이는 추가 확진자 발생 등 코호트 격리의 의미를 완전히 상실해버리는 최악의 상황을 불러올 수 있다. 영내 장병과 마찬가지로 통제 간부 또한 인원 간 접촉을 피해야 하지만 코호트 격리 관련 체계가 없는 현재, 생활관별 인원들이 실제로 정해진 시간에 맞추어 공공시설을 사용하는지, 사용 도중 타 생활관과 접촉하였는지 확인 및 관리할 방법이 마땅치 않은 것이 현실이다. 실시간 실내 공공시설별 사용 인원 조회 및 영내자별 체온 측정 보고 기능을 통해 불가피한 접촉을 막아 안전한 코호트 격리를 실시할 수 있다.
효과 및 전망
병력 이동 자동화 관리 시스템이 부대에 적용되게 되면 용사들은 더욱 편리하게 유동병력 보고를 할 수 있고, 당직사관은 이를 실시간으로 확인할 수 있다. 따라서, 용사들은 자신의 개인정비시간 내 행동의 자유를 더욱 보장받을 수 있고, 당직사관은 병력 통제를 더욱 안정성 있게 할 수 있다. 이는 유사시 빠르게 대응해야 하는 군의 중요한 병력통제도구로 사용될 것이다.
코흐트 격리 중에는, 영내 장병들은 불가피한 타 호실 인원과의 접촉을 피할 수 있어 바이러스 추가 확산을 막을 수 있고, 더 나아가 신속한 부대 정상화 및 완벽한 작전 수행으로 이어질 것을 기대할 수 있다.
💾 DB 설계 & 📠 Backend 구축
https://mskim9967.tistory.com/97?category=1045733
⚡ IoT 제작
휴가를 많이 쌓은 덕분에 미복귀 휴가를 길게 나올 수 있었고
덕분에 영내에서는 진행하기 힘든 IoT 개발을 진행할 수 있었다
https://mskim9967.tistory.com/89?category=1045733
여담으로, 아두이노로 iBeacon을 제작하려 한다면 꼭 정품 블루투스 모듈을 사용하도록 하자
몇푼 아끼겠다고 중국제 호환 블루투스 모듈을 샀다가
iBeacon 설정이 안되더라...
결국 제돈주고 다시 샀다
🙃
🎥 영상 제작
해커톤 평가 항목 중에는 시현 영상이 포함되어 있었다
작년 수상작들의 시현 영상을 다시 보니 영상 편집에 크게 노력을 들인 팀이 극소수였다
이때문에 영상편집에 조금만 신경을 쓰면 다른 팀과의 차별성을 가져올 것 같아서
전에 영상편집 경험이 있던 필자가 영상편집을 맡기로 하였다
그렇게 영상편집을 핑계로 전부터 눈독들였던 m1맥북에어를 질러버렸다!
무지성 구입이 아닌, 프로젝트를 위한 구입이였다
아님말구
🙃
윈도우를 쓰던 전에는 Vegas Pro와 Adobe After Effect를 주로 사용했었는데
영상편집도 손을 땐지 거의 4년이 넘어버려 이번기회에 Final Cut Pro를 사용해보기로 했다
확실히 파이널컷프로가 애프터이펙트에 비해 사용하기 간편한 대신 세세한 설정 부분이 아쉽다고 느껴졌다
하지만 제작 시간을 확실히 줄여줘서 생산성이 훨씬 좋았던 것 같다
더구다나 영상편집을 본업으로 가질 것이 아니기에 앞으로도 파이널컷프로를 애용할 것 같다
그럼에도 영상만드는데 거의 일주일정도의 시간이 걸렸다
이 기간동안 좀 많이 힘들었다...
영상편집자분들 리스펙👍
또 처음으로 나래이션 작업도 진행했는데
되게 어렵더라...
필자의 발음이 엄청 구리다는 것을 다시금 깨닫게 되었다
😢
결과물은 아래에서 확인 가능하다
https://youtu.be/__YMR06YltA
🤔 느낀 점
👍 배운 점
동기/비동기식 코드의 차이점
mysql2 라이브러리
nodejs 연결
callback hell
socket.io
실시간으로 모니터링 페이지를 업데이트 해주고
시설 이동요청, 결재 완료, 접촉 발생 등 서버에서 클라이언트에게 알림을 보내야 했다
따라서, 서버와 클라이언트 간 실시간 통신을 지원하기 위해
socket.io 라이브러리를 사용하였다
그 안에서도, 담당 근무자에게만 소켓을 보내거나
결재 요청한 병사에게만 결재 알림을 보내는 로직을 구현하기 위해
room과 namespace개념을 사용하였다
협업 툴
이번 해커톤은 학교 조별과제를 제외한다면 사실상 나에겐 첫 팀 프로젝트였다
특히, 코드작업을 같이 해본 적이 거의 전무하기에
이번 프로젝트를 통해 git으로 협업하는 방식을 배울 수 있었다
커밋메시지, 브랜치 생성/병합, 컨플릭트 해결 등등
개념만 대충 알고 있었던 내용들을 실제로 경험해보며
협업하는 방식을 배울 수 있었다
notion, slack도 써보며 협업을 위해 필수적인 내용들을
경험할 수 있었다
👎 아쉬운 점
코드 중복
Backend API 코드를 작성하게 되면
DB 데이터를 다루기 위해 SQL문을 사용하게 되는데,
이때 각기 다른 테이블이여도 조회, 검색하는 로직이
많이 다르지 않았다
그럼에도, 테이블 별로 API 라우팅 코드를 작성하다보니
비슷한 로직을 계속 복붙하게 되는 불필요한 중복이 발생하였다
협업 및 커뮤니케이션
🙇♂️ 공부해야 할 것
Github
Express 설계 및 구성
Infra / DevOps
'대회, 프로젝트 > 2021 군장병 해커톤' 카테고리의 다른 글
Backend 기능 설명 (0) | 2021.10.28 |
---|---|
[Vue.js, Node.js] passport.socketio cors issue (0) | 2021.10.14 |
[Vue.js] Socket.io 연결 Issue 해결 (0) | 2021.10.12 |
[Node.js] Socket.IO + JWT + Session (0) | 2021.10.12 |
[Docker / M1 sillicon] MySQL Build Error, 컨테이너 내에서 한글 입력 (0) | 2021.10.09 |
Comment