프로젝트 개요
|프로젝트명
MediSearch
|개발 기간
2022.11.28 - 2023.01.02
|팀 규모
김영주, 김현우, 박은성, 송승현, 이다영, 정의탁 [6인]
|프로젝트 요약
해당 프로그램은 사용자의 위기 대응 능력을 향상시키고자 제작되었습니다.
해당 프로그램은 사용자의 상황(응급/공휴일/병원/약국/의약품)에 맞는 의료 정보를 신속하게 찾을 수 있도록 다섯 가지 검색 기능을 통합해 제공합니다. 사용자는 지역, 기관 유형, 진료과목, 시설 가용 여부 등 다양한 조건을 기준으로 필터링한 정보를 직관적인 UI를 통해 얻을 수 있습니다. 또한 회원 가입 후, 게시판 기능을 이용하면 다른 회원들과 다양한 정보를 공유할 수 있습니다.
전체 서비스 흐름
|메인 페이지
메인 페이지에서 모든 페이지로 이동할 수 있게 설계되었습니다. 또한 페이지의 상단에 응급실 검색바를 추가함으로써 사용자는 사이트에 접속하는 즉시 수용 가능한 가장 가까운 응급실을 검색할 수 있고, 지도를 배치함으로써 사용자의 위치와 가까운 병원을 한 눈에 볼 수 있습니다.
|응급실 검색
환자에게 필요한 치료 환경과 현재 위치를 고려해서 가장 가까운 응급실을 검색할 수 있습니다. 사용자는 지역(시/도, 구/군), 가용병상/중증질환 수용 가능 정도(응급실, 수술실, 내과 중환자실, 외과 중환자실, 신경외과 중환자실), 시설 가용 여부(CT, MRI, 조영 촬영기, 인공호흡기, 구급차) 를 검색에 선택적으로 활용할 수 있습니다. 구급차에서 구급 대원이 일일이 전화하며 확인할 필요 없이, 환자와 보호자가 옮길 응급실을 직접 확인해 선택할 수 있습니다.
|공휴일 진료기관 검색
환자는 공휴일에 진료하는 병원과 운영 중인 약국에 대한 정보를 검색할 수 있습니다. 사용자는 구분(병원, 약국), 지역(시/도, 구/군), 기관별(상급종합병원, 종합병원, 병원, 군병원, 군의원, 요양병원, 한방병원, 노인전문병원, 한의원, 군한의원), 진료과목별(내과, 소아청년과, 신경과, 정신건강의학과, 피부과, 외과) 를 검색에 선택적으로 활용할 수 있습니다.
|일반 병원 검색
일반 병원 정보를 검색하고, 이름/별점/주소 순서로 정렬하여 결과를 확인할 수 있습니다. 사용자는 지역(시/도, 구/군), 기관별(상급종합병원, 종합병원, 병원, 군병원, 군의원, 요양병원, 한방병원, 노인전문병원, 한의원, 군한의원), 진료과목별(내과, 소아청년과, 신경과, 정신건강의학과, 피부과, 외과) 를 검색에 선택적으로 활용할 수 있습니다.
|약국 검색
일반 약국 정보를 검색하고, 이름/별점/주소 순서로 정렬하여 결과를 확인할 수 있습니다. 사용자는 지역(시/도, 구/군)을 검색에 선택적으로 활용할 수 있습니다.
|의약품 검색
제품명(약의 이름)을 검색하면, 오른쪽 공간에서 제조사명/효능/복용방법/경고사항/주의사항/상호작용/부작용/저장방법을 확인할 수 있습니다.
|게시판
자유게시판/리뷰 게시판/Q&A게시판/고객센터 총 4개의 게시판으로 세분화되어, 사용자는 원하는 게시글을 분류해 확인할 수 있습니다.
|회원제
사용자는 해당 탭에서 회원정보 저장 및 수정, 비밀번호 재설정, 즐겨찾기 목록 확인(병원, 약국, 의약품 각각 나누어 확인 가능), 내가 작성한 리뷰 보기, 로그아웃 기능을 이용할 수 있습니다.
핵심 기능
|Kakao Map API 이용한 추천(거리순 정렬) 시스템
사용자의 현재 위치를 기반으로 인근 병원 및 약국을 가까운 순서대로 추천하고, 이를 지도에 표시합니다.
- Kakao Map API 활용
- 거리 계산 로직
|게시판 기능
자유게시판/리뷰 게시판/Q&A게시판/고객센터 총 4개의 게시판으로 세분화되어, 사용자는 원하는 게시글을 분류해 확인할 수 있습니다.
- 게시글 CRUD: MyBatis를 활용한 MySQL DB 연동
- 페이징 처리
- 검색 기능
|검색 기능
사용자의 상황(응급/공휴일/병원/약국/의약품)에 맞는 의료 정보를 신속하게 찾을 수 있도록 다섯 가지 검색 기능을 통합해 제공합니다. 사용자는 지역, 기관 유형, 진료과목, 시설 가용 여부 등 다양한 조건을 기준으로 필터링한 정보를 직관적인 UI를 통해 얻을 수 있습니다.
- 검색 조건 필터링 및 결과 정렬 기능: 모듈화
- MyBatis를 활용한 MySQL DB 연동
맡은 역할
|데이터베이스
- ERD 설계: 공휴일 비상 진료 기관 테이블
- 공공데이터 포털: 국립 중앙 의료원의 [전국 명절 비상 진료기관 정보 조회 서비스] API 파싱
- 정적 DB 구축
|프론트엔드
- 메인 페이지 상단부(네비게이션 & 검색바)
- 공휴일 진료 기관 검색 페이지
- 커뮤니티 페이지
|백엔드
- Kakao Map API를 이용한 거리순 정렬 및 지도 배치
- 응급실 검색 기능: 전체
- 게시판 기능: 자유게시판
개발 과정에서 발생한 문제 및 해결 방안
|검색 조건 처리 시, SQL Null 조건 처리 문제
사용자가 병원 검색 시 여러 조건(지역, 진료과목, 병상 가용 여부 등)을 선택하지 않으면, 검색 결과가 아예 안 뜨는 현상이 발생했습니다. 이 문제는 MyBatis에서 where 태그 내부 조건이 모두 null일 경우, 전체 병원을 반환하는 기본 조건이 작동하지 않았기 때문에 발생한 것이었습니다. 이는 where 태그와 if문을 조합하여 조건이 없을 때는 기본 조건이 자동으로 적용되도록 수정함으로써 해결할 수 있었습니다.
|검색 시, 조인 성능 저하
검색 조건이 많을수록 DB가 과부하되어 응답 속도가 느려지는 현상이 발생했습니다. 이 문제는 여러 테이블을 조인할 때 인덱스가 제대로 설정되지 않아 where 조건절이 매번 전체 테이블을 훑는 과정에서, 쿼리 성능이 급감했기 때문에 발생했습니다. 이를 해결하기 위해, 가장 먼저 자주 사용하는 검색 컬럼(병원 이름, 지역명, 과목명 등)에 인덱스를 설정했습니다. 그리고 서브쿼리로 조건 필터링을 선행하고, 뷰를 이용해 가상 테이블을 구성한 뒤에, 생성한 뷰를 대상으로 단순한 조건 검색을 수행함으로써 속도를 개선할 수 있었습니다. 이 과정은 MyBatis log4jdbc 설정을 통해 실행 SQL을 콘솔에 출력하고, 출력된 SQL을 MySQL에서 EXPLAIN으로 분석하여 full scan, using index, using temporary 등을 확인하며 진행되었습니다.
프로젝트 성과 및 느낀점
|결과
계획한 기능(응급실/공휴일 진료기관/병원/약국/의약품 검색, 게시판 4개, Kakao 지도 기반 추천 시스템 등)을 모두 안정적으로 구현하였으며, 사용자 관점에서 직관적인 UI와 효율적인 정보 탐색이 가능하도록 구성되었습니다. 각 기능은 실제 사용 시나리오에 맞춰 테스트를 거쳐 완성되었고, 데이터 처리와 검색 기능 역시 성능 향상을 고려해 최적화되었습니다.
|배운점 및 성장한 역량
이번 프로젝트를 통해 Spring 프레임워크 기반의 풀스택 웹 개발 전체 흐름을 실습하며, 백엔드-프론트엔드 간의 구조적 연계, DB 설계 및 연동, 검색/추천 기능 구현 등 웹 애플리케이션 전반에 대한 실질적인 이해를 높일 수 있었습니다. 특히 MyBatis를 활용한 동적 SQL 처리, 다중 조건 검색 및 성능 최적화 과정에서 SQL 튜닝과 데이터 흐름 제어 능력이 향상되었습니다. 또한, 사용자 중심의 기능 설계와 실제 데이터 기반의 응용 로직 구현을 통해 서비스 설계 역량도 함께 성장했습니다.
|다음 개선 과제
- 실시간 데이터 반영 - 지금은 공공데이터포털에서 수집한 데이터를 수동으로 DB에 저장해 정적으로 관리하고 있으나, 추후에는 API 연동을 자동화하여 실시간 병상 정보, 진료 가능 여부 등 최신 상태를 반영할 수 있는 구조로 개선하고자 합니다.
- 서비스 배포 및 운영 경험 확보 - 현재까지는 로컬 환경에서의 구현 및 테스트에 집중했으나, 향후에는 클라우드 환경을 활용하여 서비스 배포 및 운영까지 완성해보고 싶습니다.