📢 프로젝트 소개
- 프로젝트 : 실시간 응급실 정보 제공 서비스
- 프로젝트 인원 : 4명 (프론트엔드 2명, 백엔드 2명)
- 프로젝트 기간 : 2023.08.09 ~ 2023.09.08
- 기술 스택
- Front-end : Flutter
- Back-end : SpringBoot, Spring Data JPA, Spring Security, Oracle
- Infra : AWS EC2, Docker
- 협업 : Slack, Figma, Discord
- 시스템 구조도
🧑💻 나의 역할
- 백엔드 개발
- 회원가입/로그인
- 응급실 정보 제공 (위치, 전화번호 外 CT & MRI 촬영 가능 여부 등)
- 응급실 잔여 병상 수 실시간 제공 (1분 간격 갱신)
- Kakao Map API를 통한 사용자 현재 위치 기준 가까운 응급실 목록 및 최적 경로 제공
- Kakao 자동차 길찾기 API를 통한 응급실 예상 도착 시간 및 이동 거리 제공
- 최근 2시간 동안의 병상 이용 가능 시간 비율 그래프 제공
- 최근 2시간 동안의 병상 수 변동 추이 그래프 제공 (15분 간격)
- 사용자 문진표 작성 기능 제공
- 사용자 간 문진표 연동을 통한 문진표 상호 동기화 기능 제공
- DB 설계/구축
- Infra 구축
🎉 결과
공개SW 개발자 대회에 출품했으나 아쉽게도 1차 평가에서 떨어졌다. 경쟁률이 높기도 하고 이전 연도 수상작들의 퀄리티가 매우 높아 떨어질 것이라고 예상하고는 있었는데 막상 떨어지니 아쉬웠다.
📖 배운 점 / 느낀 점
공공 데이터 포털 Open API
이번 프로젝트에서는 국립중앙의료원의 공공 데이터 포털 Open API 중 하나인 '전국 응급의료기관 정보 조회 서비스'를 활용하여 프로젝트의 기반 데이터를 구축하는 경험을 하였다.
공공 데이터를 처음으로 사용하며 데이터 수집과 활용에 대한 알찬 경험을 쌓을 수 있었다. 모든 데이터가 예상대로 잘 들어올 것으로 기대했지만, 현실은 그렇지 않았다. 빈 데이터나 API 오류와 같은 문제에 직면하며, 이러한 문제들을 예외 처리하고 해결하는 과정에서 더 많은 것을 배울 수 있던 것 같다. 이런 경험을 통해 공공 데이터를 활용하면서 데이터의 신뢰성과 안정성을 평가하는 중요성을 깨닫게 되었다. 이러한 경험은 미래 프로젝트에서 데이터를 다룰 때 더욱 신중하고 효과적으로 처리할 수 있도록 도움이 될 것이다.
Kakao Mobility API
Kakao의 자동차 길찾기 API를 활용하여 현재 위치에서 목적지까지의 거리와 예상 도착 시간을 조회하고 활용하는 경험을 하였다. 이 API는 다양한 정보를 반환해주지만, 그 중에서도 필요한 거리와 예상 도착 시간 정보를 추출하는 작업이 매우 복잡하였다. 이 경험을 통해 원하는 데이터를 정확하게 추출하는 방법을 명확히 이해할 수 있었다.
Spring Security + JWT
이전 프로젝트에서는 세션 기반으로 Spring Security를 활용했었기 때문에, 이번 프로젝트에서는 JWT (JSON Web Token) 기반으로 Spring Security를 도입해 보았다. 이 과정에서 세션 기반과는 다른 접근 방식과 복잡성을 경험했으며, 초기에는 이해하기 어려운 부분도 있었다. 2~3일 동안 집중적으로 구현 작업을 진행하였고, 구현을 마친 후에는 JWT를 사용하는 이유, 그리고 이것이 제공하는 장점과 동시에 해결해야 하는 문제점에 대해 확실히 이해할 수 있었다.
Docker
이번 프로젝트에서 데이터베이스로 Oracle을 선택했다. Oracle 데이터베이스는 기본적으로 윈도우와 Linux 환경에서 실행되지만, Mac 운영 체제에서 직접 설치하거나 실행하는 것은 공식적으로 지원되지 않기에 일반적인 방법 중 하나인 Docker를 활용하였다.
이전에는 Amazon RDS를 통해 데이터베이스를 구축한 경험이 있어서, Docker를 사용하는 것이 어떻게 다를지 궁금했는데 Docker 컨테이너를 띄워 환경에 구애받지 않는 서비스를 만들 수 있는 점이 매력적이었다.
문제 해결
국립중앙의료원의 공공 데이터 포털 Open API 중 하나인 '전국 응급의료기관 정보 조회 서비스'를 활용하여 프로젝트의 기반 데이터를 구축할 때 모든 데이터가 예상대로 잘 들어올 것으로 기대했지만, 현실은 그렇지 않았다. 비어 있는 데이터나 API 오류와 같은 문제에 직면했다. 이러한 문제는 실시간 응급실 정보를 제공하는 서비스에서 큰 문제가 되었다.
문제를 해결하기 위해 우선적으로 try/catch문을 사용하여 예외가 발생했을 때 처리하는 메소드를 호출하도록 하였다. 처음에는 메소드 내에서 다시 API를 요청하도록 했지만, 예외가 2번 연속으로 발생할 경우 1분 이상의 지연이 발생할 수 있어서 실시간 서비스에 문제가 생길 가능성이 존재했다. 이에 대한 대안으로 1분 전에 저장된 병상 수를 재활용하는 방법을 채택하여 문제를 해결했다. 이러한 경험은 미래 프로젝트에서 데이터를 다룰 때 더욱 신중하고 효과적으로 처리할 수 있도록 도움이 될 것이다.
📖 아쉬운 점
필터링
원하는 응급실을 조건에 맞춰 필터링하는 기능을 제공하고 싶었지만, 아쉽게도 이를 구현하지 못했다.
소셜 로그인
OAuth2를 이용한 소셜 로그인 기능을 도입하고자 했지만, 구현 과정에서 어려움을 겪어 결국 프로젝트에 포함하지 못했다. 이 부분을 개별적으로 학습하여 토이 프로젝트를 통해 다시 구현해 볼 예정이다.
'회고' 카테고리의 다른 글
[프로젝트 회고] AlohaTrip (2) | 2024.06.12 |
---|---|
[프로젝트 회고] aloharoom (2) | 2023.09.20 |