프로젝트를 하게 된 계기

스마트시티 연구소의 DigitalTwin 추진안 개편 과정 중 기존에 다른 연구원이 구현했던 시스템의 리팩토링을 맡게되었다.

Stack

  • Language : Java, Javascript
  • Framework : Spring4
  • DBMS : MariaDB
  • Library 및 그 외 사용 툴
    • OpenLayers : 브라우저에서 GIS 데이터를 Layer 별로 시각화하기 위해 사용
    • Geoserver : 빠른 GIS 데이터 계산 및 렌더링을 위해 사용

Diagrams

  • 시각화 성능개선을 위한 리팩토링을 수행했기 때문에 전체적인 프로젝트의 구조는 싣지 않았다.

주요 기능

  • 폭우, 대설 위험도 시각화 rain_risk snow_risk

담당 파트 및 고찰

  • GIS 데이터 경량화
    • 기존 시스템의 문제점은 BaseMap의 행정구역 경계가 뚜렷하지 않아 지역별 위험도의 가시성을 높이기 위해 모든 행정구역의 Polygon을 렌더링한다.
    • 읍면동 단위만 5000개가 넘게 존재하고 하나의 행정구역을 그리기 위해 선이 꺾이는 모든 지점을 점으로 찍기 때문에 모든 GIS 데이터를 Client가 다 fetch 하기까지 1분이 넘는 시간이 걸렸다.
    • Douglas-Peucker 알고리즘을 이용하는 툴을 이용해 각 행정구역의 polygon을 간소화시켜 fetch 시간을 5초로 감소시킴.
  • Geoserver
    • 기존 시스템은 gis 정보를 담고있는 geojson 파일을 그대로 client에게 전달하는 방식이었다.
    • 원본 데이터를 가공하여 데이터를 발행하는 부분을 핵심 로직과 분리하기 위해 Geoserver를 도입하였다. geoserver
  • JS Promise를 이용한 비동기 동작 코드의 가독성 향상
    • 기존 코드는 비동기로 동작하는 코드와 동기로 동작하는 코드의 구분이 모호하여 처음 리팩토링을 시작했을때 코드실행 순서 파악에 어려움을 겪었다.
    • Promise, async, await 을 이용한 코드로 재구성하여 가독성을 높이고, 동기코드의 실행 순서를 보장하였다.

한 마디

  • 실무에서 남이 개발한 코드를 개선하는 경험은 처음이라 당황스러운 부분이 많았음.
  • 문서화와 주석, 가독성 좋은 코드 작성의 중요성에 대해 다시 한 번 깨닫게 됨.
  • 일반적인 SW 스킬도 중요하지만 구현하는 서비스에 관련된 기본지식과 경험도 중요하다.