공공데이터 포털에서 기상청이 제공하는 API를 이용하여 각 서버 (FE, IoT)에 필요한 정보를 가공하여 보내주는 역할을 맡고 있습니다.
실시간으로 기상 정보를 받을 수 없다는 태풍의 특징에 기반하여, 본 프로젝트는 가상 태풍 환경 서버와 실제 태풍 환경 서버로 나누어 개발을 진행하였습니다.
- Java 17
- Framework : Springboot
- DB : MariaDB
- DB Server : AWS RDS
- Log 관리 : Logback
- SQL Mapper : Mybatis
- 단위 테스트 : Junit5
- 성능 테스트 : Jmeter
- api-test : PostMan
- lombok
태풍은 늘 관찰할 수 있는 것이 아니라 6월에서 9월 사이의 기간 동안 발생하는 특수한 기상 변화이기에
개발 기간 동안 정상적인 테스트가 불가능하여 과거의 태풍 관측 정보를 기반으로 가상의 환경을 구축하는
가상 환경과 실시간 태풍 관측 API를 통해 정보를 추출하는 실제 환경으로 구분하여 총 2개의 기능을 개발하였습니다.
- 최초 관측 정보 요청 또는 태풍 관측 종료 신호 발생 시, 작동합니다.
- 임의의 태풍을 50%의 확률로 선택합니다.
- 태풍이 발견되지 않을 경우, 24시간의 공백의 시간이 발생합니다.
- 임의로 선택된 태풍 관측의 시작 시각을 기준으로 시간을 진행 시킵니다.
- 3시간마다 호출을 받습니다. 만약 태풍 정보가 존재하지 않는다면 가장 최근의 관측 정보를 제공합니다.
- 요청 시간에 해당하는 태풍의 관측 정보를 제공합니다.
[ 태풍 이름 | 태풍 번호 | 태풍 관측 시간 | 태풍 위도&경도 | 태풍 강도 | 태풍 크기 ]
- 태풍 관측 정보의 태풍 강도를 기준으로 정보를 제공합니다.
[ 태풍 강도 : NULL, 약 = 1 | 중, 강 = 2 | 초강력, 매우 강 = 3 ]
- 태풍 관측 정보의 태풍 강도를 기준으로 차수벽의 동작을 요청합니다.
[ 태풍 강도 : NULL, 약, 중 = wallAlertDeactivation | 강, 매우 강, 초강력 = wallAlertActivation ]
- FE의 요청이 들어오면 기상청 공공데이터 API 서버에서 예,특보 관련 오늘 기준 최대 5일까지의 정보를 수신합니다.
- 데이터 형식에 맞춰 FE로 데이터를 전송합니다.
- 기상청 공공데이터 API 서버에서 예,특보 관련 정보 요청 및 수신합니다.
- (실제 시간 1시간마다 요청합니다.)
- 특보 정보를 분석 후 차수벽을 '가동' 및 '가동 해제'하라는 데이터를 전송함. (Activation, Deactivation)
- XAMPP를 통해 웹 서버를 열고 IoT의 캠 서버에 접속(RSTP)하여 HLS를 통해 세그먼트 파일(stream0001.ts)과 메타데이터 파일(stream.m3u8)을 만듭니다.
- 세그먼트 파일 : 실시간을 구현하기 위해 설정된 시간만큼 영상데이터를 담고 습니다.
- 본 프로젝트는 10초로 설정해놨으며, 이전 세그먼트 파일과 타임스탬프가 이어집니다.
- 메타데이터 파일 : 위 세그먼트 파일을 시간 순서대로 나열해놓은 메타데이터 파일입니다.
- 이 파일을 통하여 세그먼트 파일에 접근 및 영상 데이터를 볼 수 있음.
- 세그먼트 파일 : 실시간을 구현하기 위해 설정된 시간만큼 영상데이터를 담고 습니다.
- 웹 서버에 FE가 접속하여 stream.m3u8을 Dashboard에 정보를 게시합니다.
사진 1. 공공데이터 포털에 요청하여 받아온 데이터 모습. (오늘 기준 3일 전 데이터만 불러올 수 있음.)

