Skip to content

경로 이미지 생성 방법 고려

Herb edited this page Jul 27, 2023 · 5 revisions

image

이미지 생성을 위해 어떤 기능이 필요하고 누가 하기로 결정했나요?

위 와이어 프레임에서 여행 히스토리여행에 대한 감상을 위한 경로 이미지의 경우, 맵 API에서 제공하는 도형 그리기 API(네이버 맵 API 기준 Polyline)를 사용할 수 없습니다.
따라서 이미지를 직접 생성하거나, 클라이언트에서 직접 위경도를 이용하여 그려야 합니다.

해당 요구사항을 해결하기 위해서는 다음과 같은 기능을 가진 라이브러리가 필요합니다.

  • 이미지 생성
  • 선과 점 표현
  • 투명한 배경색

저희는 현재 클라이언트의 바쁜 일정과 기능 구현에 있어 약간의 연산이 들어간다는 부분에서 백엔드에서 이미지를 생성하기로 결정을 내렸습니다.

어떤 기술을 고려해보았나요?

이미지 생성을 위해 다음과 같은 라이브러리 또는 기술들을 확인해보았습니다.

  • Python의 Matplotlib
  • AWT(Abstract Window Toolkit) [최종 선택]
  • 이미지 처리 라이브러리 및 Java에서 내부적으로 Matplotlib 사용할 수 있는 라이브러리
  • Java Swing, Java FX

Python & Matplotlib

데이터 시각화 라이브러리
이미지 생성 및 로컬에 저장까지 걸리는 시간: 0.2초

  • 코드가 간단해서 유지보수성이 좋습니다.
  • AWS Lambda 같은 서버리스 컴퓨팅 서비스나 FastAPI와 같은 웹 프레임워크로 추가적인 API를 구현 해야 합니다.
  • Spring Boot에서 추가적인 API 호출을 해야하고, 확장성과 비동기 처리 등 고려해야 할 부분이 많습니다.

Java AWT 이외의 라이브러리

Python이 아닌 Java에서의 라이브러리도 고려를 해봤지만 요구사항에 적합하지 않거나, 적은 요구사항에 비해 무거운 라이브러리들이 많았습니다.

라이브러리 설명 제외 이유
Swing AWT 이후에 나온 GUI 라이브러리, 네이티브 UI를 사용하지 않고 모든 운영체제 상에서 동일한 UI를 가지도록 함 요구사항에 비해 무겁고 복잡도가 높음
JavaFX Swing 이후에 나온 GUI 라이브러리, 3차원 그래픽을 지원함 요구사항에 비해 무겁고 복잡도가 높음
simple-java-plot AWT로 구현된 플로팅 라이브러리 AWT 기반이긴 하지만 직접 AWT를 사용하는 것에 비해 메리트가 없음, 커스텀 설정 기능이 없음
matplotlib4j Matplotlib를 Java에서 사용할 수 있게 하는 라이브러리 내부적으로 파이썬 사용하기에 무거움, 배경 투명화 기능 없음

Java & AWT(Abstract Window Toolkit)

그래픽과 이미지를 그리기 위한 도구
이미지 생성 및 로컬에 저장까지 걸리는 시간: 1.75초

  • 플로팅 라이브러리를 사용하는 것보다 구현의 난이도가 다소 존재합니다.
  • 이미지 생성 시간이 다소 소요되기 때문에 빠른 응답 반환을 위해 비동기 처리를 고려할 수 있을 것 같습니다.
  • 추가적인 api 호출을 하지 않아도 됩니다.

어떤 기술을 사용할 예정인가요?

AWT의 경우 Matplotlib에 비해 구현의 난이도가 다소 있고, 이미지 생성 시간이 더 많이 걸리는 단점이 있습니다.
하지만 추가적인 api 호출을 하지 않아도 되는 부분, Python을 사용하는 경우 추가적인 웹 프레임워크의 학습 비용을 고려하여 AWT를 사용하기로 결정했습니다. 🥕

추가적으로 유지보수를 위해 팀원들에게 어떤 방식을 이용하여 공유할 수 있을까요?

  1. 코드리뷰와 PR을 통해 작성한 AWT 코드에 대한 설명 및 리뷰 받습니다.
  2. AWT를 사용한 부분을 문서화하여 공유합니다.