오늘은 별건 아니고, 배포중인 어플에서 뉴스 댓글 목록을 불러올때 2~3초 가량 소요되서
이 코드를 리팩토링 하였다.
리팩토링은 왜 할까 ?
1. 성능향상, 가독성 향상
2. 유사한 내용이 반복될때 코드의 중복 제거
3. 새로운 기능을 추가할 때
위 세가지 이유가 제일 핵심적인 이유다.
기존 코드를 Swagger에서 돌려 보았을때 두 눈을 의심했다.
이게 목록 불러오는 @Get API를 단 한번 실행 시킨것이다....
물론 Response값으로 다양한 값이 필요하긴 하지만 이건 말이 안된다.
이러니 목록 불러올때 2~3초 가량 로딩시간이 걸렸던 것이다.
실행된 사진 속 쿼리문을 보니 중복된 테이블에서 SELECT가 여러번 이루어 지는걸로 보아
for문을 돌면서 그 안에서 DB커넥션이 여러번 이뤄지고 있는 것 같다.
성능관점에서 DB커넥션수를 최소화하고 Service부에 부하를 가하는게 훨씬 좋다.
왜냐?
첫째. 성능
각 데이터베이스 연결은 메모리, CPU 및 네트워크 대역폭과 같은 리소스를 소비한다.
연결 수를 줄임으로써 오버헤드를 최소화하고 애플리케이션의 성능을 향상시킬 수 있다.
이렇게 하면 애플리케이션이 과부하 상태에서도 응답성을 유지하는 데 도움이 될 수 있다.
둘째. 확장성
애플리케이션이 커짐에 따라 데이터베이스에 대한 동시 연결 수가 증가할 수 있는데,
연결 수를 줄이면 애플리케이션이 효율적으로 확장되고 데이터베이스에서 부과하는 제한 없이 더 많은 사용자를 수용할 수 있다.
셋째. 연결 Pool 고갈
많은 데이터베이스에는 동시에 처리할 수 있는 최대 연결 수가 있다.
이 제한에 도달하면 새 연결 요청이 대기하거나 거부되어 애플리케이션에서 지연 또는 오류가 발생한다.
연결 수를 줄이면 연결 풀이 고갈되는 것을 방지하고 애플리케이션을 안정적으로 유지할 수 있다.
넷째. 비용 절감
스팅 공급자와 클라우드 서비스는 종종 사용하는 데이터베이스 연결 수에 따라 요금을 부과하기도 한다.
연결 수를 줄이면 호스팅 비용도 절약할 수 있다.
이정도면 필수적으로 해야되는게 맞는것 같다.
그래서 Service부에서 필요한 DB커넥션은 최소화하면서 불필요한 쿼리 최대한 로직으로 풀어서 리팩토링을 하였다.
리팩토링을 다 하고 Swagger에서 동일하게 코드를 실행시켰더니
이 말도안되는 차이,,,,,
배포를 하고 댓글 불러오는 부분에서 로딩시간이 걸렸던것도 완전히 사라졌다.
앞으로도 DB커넥션은 무조건 최소화하고 불 필요한 쿼리수는 줄이도록 하자.
'Web > NestJS' 카테고리의 다른 글
[Nest.JS] Axios, Http 비동기 통신 라이브러리 (0) | 2023.04.15 |
---|---|
[Nest.JS] DTO 객체의 키 이름 변경 @Transform (0) | 2023.04.06 |
[Nest.JS] @Param() 사용 시 왜 경로를 지정해 주는걸까? (0) | 2023.03.03 |
[Nest.JS] @Query() 파라미터 값 Boolean으로 사용하는 방법 (2) | 2023.03.01 |
[Nest.JS] Error "require statement not part of import statement." 해결 방법 (0) | 2023.02.27 |