회고

[프로젝트 회고] FindER

코딍코딍 2023. 9. 20. 17:57

📢  프로젝트 소개

  • 프로젝트 : 실시간 응급실 정보 제공 서비스
  • 프로젝트 인원 : 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 이용한 소셜 로그인 기능을 도입하고자 했지만, 구현 과정에서 어려움을 겪어 결국 프로젝트에 포함하지 못했다.  부분을 개별적으로 학습하여 토이 프로젝트를 통해 다시 구현해 볼 예정이다.