open api를 사용하여 약 6200개의 데이터를 불러온다. 가져온 데이터를 사용자가 볼 수 있도록 프론트에 넘겨주는 과정에서 1분을 넘기거나 더 걸리기도 했다. 이 말은 웹 페이지에 들어갔을 때 전체 데이터가 보여지는데 걸리는 시간이 1분을 넘긴다는 소리였고 말도 안되는 부분으로, 1분이 넘게 걸렸던 이유는 약 6200개의 데이터를 1번부터 6200번까지 순차적으로 불러오는 로직이 문제였다.
1번부터 6200번까지 순차적인 실행이 아닌 동시에 실행하는 멀티스레드로 1차 개선하였고 실제로 속도 또한 크게 바뀌었다. 하지만 여전히 개선이 필요했고 다음으로 생각한 방법은 전체 데이터에대한 페이징 처리였다.
페이징처리의 간단한 설명으로는 한 페이지에 내가 설정한 데이터 갯수만큼 담아 요청에 보내는 것이고, 한 페이지에 10개의 데이터를 담는다고 했을 때 약 620개의 페이지를 넘기게 되는것이다.
속도는 약 0.2초~0.4초 사이로 큰 개선이 되었지만 가져오는 데이터의 특성을 다시 한 번 생각해보았다. open api로 가져오는 데이터는 고정되어 수정이나 삭제가 될 것이라 생각하지 않았고 추가도 없을 것이라고 생각해 캐싱을 고려했고 최종적으로 redis 캐싱을 사용하게 되었다.
캐싱은 요청마다 새롭게 데이터를 가져오는 것이 아닌 메모리의 데이터를 꺼내어 사용하기에 속도도 가장 빠른 것을 확인할 수 있다.
문제점
redis 캐시를 사용하며 속도는 빠르고 좋지만 2가지 문제가 있었다.
1. redis 서버가 실행중일 때만 캐시가 작동된다는 것
2. redis는 인메모리 데이터베이스로 실행될 때만 데이터를 저장하기에 영구 저장이 안되며 일정 메모리를 넘어서면 메모리의 데이터가 삭제되는 문제
1번은 수정중이며 2번의 경우, redis에서 기존의 데이터를 스냅샷 형태로 저장하여 백업을 지원한다는 것과 aof로 모든 쓰기 방식을 텍스트로 저장하여 백업을 지원한다는 내용을 바탕으로 개선하면 될 것 같다.
'공모전' 카테고리의 다른 글
[공모전] AxiosError request failed with status code 500 (0) | 2023.07.08 |
---|---|
[공모전] EC2 인스턴스와 Redis (0) | 2023.07.02 |
[공모전] MySQL db와 연동했지만 h2가 연결되었던 문제 (0) | 2023.06.22 |
[공모전] xml파일 변환 (0) | 2023.06.18 |
[공모전] 애자일/폭포수 (0) | 2023.06.17 |