Page cover image

😞2022.04.13

일일 회고 60회차

할일 및 한일

경험 및 배움

논문 세미나 준비

"IoT 환경에서의 마이크로서비스 최적화를 위한 API Gateway의 응답 캐싱 자동화" 라는 졸업 논문 주제를 구체화시키기 위해 캐싱을 적용한 API Gateway와 간단한 Web Application으로 구성된 시스템을 구축하는 것을 진행했다.

API Gateway의 기능 중의 하나는 사용자의 요청을 Web Application으로 전달하는 것이므로 Web Application이 존재하지 않는다면 API Gateway는 정상적으로 동작하지 못할 것이다. 이로써 Web Application을 먼저 구현한 후 API Gateway를 구현하기로 결정했다.

이번 프로젝트는 체계적으로 진행하기 위해 GitHub Repository를 생성하고 구현해야 할 기능들을 Issue로 만든 후 개발을 진행했다. 첫 번째 이슈는 예전에 튜토리얼로 구현했었던 API Gateway 코드를 기반으로 간단한 API Gateway 설정과 Redis 환경 구성을 진행했다. 그다음으로 웹 애플리케이션을 구현하는 이슈를 진행했다.

웹 애플리케이션은 PostgreSQL을 활용하여 데이터를 미리 DB에 저장해뒀다가 API 요청 시 DB로부터 데이터를 조회하도록 구현했다. 처음에는 DB를 H2를 사용하려 했지만, H2는 인메모리 데이터베이스이므로 API Gateway에서 캐싱하여 응답하는 것과 Web Application으로부터 데이터를 조회하는 것의 속도 차이가 거의 안 날 것으로 예상되어 보조 기억 장치에 저장시키는 PostgreSQL을 사용하기로 결정했다.

웹 애플리이션은 IoT 환경에서의 애플리케이션을 가정하여 사용자가 IoT 디바이스의 수집 데이터를 전체 조회하는 API를 구현했다. Spring Web과 JPA를 사용하여 구현했으며, 사용자가 /data URL로 GET 요청할 시에 100,000개의 데이터를 전송해주도록 구현했다.

이 시스템은 IoT 환경을 가정으로 개발되었기 때문에 100,000개의 데이터를 직접 수집하는것이 아니라 가상의 데이터를 만드는 작업이 필요했다. 그러므로 애플리케이션이 실행될 때 데이터베이스에 미리 데이터를 랜덤으로 생성하는 SQL이 실행되도록 구현을 진행했다. 작성 완료한 SQL은 다음과 같으며 해당 SQL을 data.sql 이라는 파일로 생성했다.

CREATE TABLE if not EXISTS sensing
(
    id    INTEGER PRIMARY KEY,
    value DOUBLE NOT NULL
);

INSERT INTO sensing
SELECT generate_series as id, random() * 100 as value 
from generate_series(1, 100000); 
  • sensing이라는 테이블이 존재하는지 확인한 후, 만약 존재하지 않는다면 sensing 테이블을 생성했다.

  • PostgreSQL에서 제공하는 generate_series 라는 연속된 수를 생성시키는 함수와 random 함수를 사용하여 100,000개의 랜덤 데이터를 저장했다.

이처럼 SQL을 작성한 뒤, Spring의 Database Initialization 기능을 사용하려 했지만 정확하게 알지 못한채 사용하여 data.sql 파일이 정상적으로 수행되지 못 했다. 현재는 수행되지 않는 원인을 알 수 없으므로 주석을 달아놨지만 추후에 원인을 찾아서 코드를 수정할 예정이다.

지금까지는 Web Application 구현을 완료했고, 다음에 API Gateway에 캐싱을 적용하여 Web Application과 연동할 예정이다.

해당 코드를 업로드해놓은 저장소는 다음과 같다.

개선 및 목표

  • Spring의 Database Initialization 동작 방식 조사 및 분석하기

  • API Gateway에 캐싱을 적용하고 구현 완료된 Web Application과 연동하기

Last updated