서론
요구사항 분석 및 기능 도출
아키텍처 설계
데이터 모델링
한 기사를 통해 응급실 현황을 알 수 있는 시스템이 존재하지 않아서 구급대원이 일일히 병원에 전화해서 치료 가능 여부를 확인해야 하고, 이로 인해 혼선이 생기거나 불행한 사건이 생기는 경우가 있다는 사실을 접했습니다.
저희 팀은 이러한 문제를 해결할 수 있는 방법에 대해 고민하고 조사한 결과, 공공데이터포털에서 제공하는 전국 응급의료기관 정보 조회 서비스 Open API를 발견했습니다. 이를 활용해 실시간 응급실 API를 활용한 응급의료시설 웹서비스
를 개발해보겠습니다.
우선은 웹서비스의 형태로 제작한 뒤에, 향후에 사용성을 고려해 어플리케이션의 형태로도 제작하는 것을 계획하고 있습니다.
지도에서 현재 위치 주변의 응급의료시설의 위치를 확인할 수 있다.
지도에서 각 응급의료시설의 정보를 확인할 수 있다.
지역, 시설명으로 응급의료시설을 검색할 수 있다.
특정 시술 가능 여부, 가용 병상 수 등의 조건을 사용해 필터링할 수 있다.
잘못된 시설 정보가 있을 경우 정보 수정을 제안할 수 있다.
특정 응급의료시설을 북마크할 수 있다.
응급의료시설 위치 표시 기능
응급의료시설 정보 출력 기능
응급의료시설 검색, 필터링 기능
응급의료시설 북마크 기능
정보 수정 제안 처리 기능
위와 같은 요구사항, 기능을 구현하기 위해 아래 사진과 같이 아키텍처를 설계했습니다. 프로젝트를 진행하며 요구사항의 변화, 추가적인 기능 구현 등의 요인으로 인해 아키텍처는 변경될 수 있습니다.
공공데이터포털에서 제공하는 5개 API의 정보는 Airflow를 사용해 일 배치로 RDS(Production DB)에 저장합니다.
응급실 실시간 가용병상정보 조회 API
는 Kafka를 사용해 실시간으로 데이터를 받아와서, S3(Data Lake)에 저장된 제일 최근의 데이터와 비교해 차이가 있을 경우 S3에 저장합니다.
Redshift(Data Warehouse)에는 S3와 RDS의 데이터를 저장하고, 저장된 데이터를 Tableau를 사용해 시각화합니다.
EC2로 구동 예정인 웹서비스의 백엔드에서는 응급의료기관 위치정보 조회 API
와 외상센터 위치정보 조회 API
에 요청을 보내 사용자 위치 주변의 응급의료시설 데이터를 가져옵니다.
다음으로는 아래 사진과 같이 RDS와 S3에 저장될 데이터의 구조를 정의했습니다. 아키텍처와 마찬가지로 프로젝트를 진행하며 변경될 수 있습니다.
각 의료기관의 지역 정보를 나타내기 위해 행정구역시도시군구(LOCATIONS)라는 별도의 테이블을 생성했고, 의료기관기본(HOSPITAL_BASIC_INFO), 의료기관상세(HOSPITAL_DETAIL_INFO) 테이블은 RDS에, 가용병상정보(AVAILABLE_BED_INFO) 테이블은 S3에 저장합니다.