이번 글에선, 백엔드 개발자로써, 최적화를 수행하기 위해 수행, 고려할 수 있는 것들을 몇가지 정리해보겠다.
캐시 사용하기
반복적으로 실행되는 쿼리 결과를 캐시하여 DB에 쿼리를 보내는 횟수를 줄일 수 있다. Spring Boot에서는 캐시 관련 어노테이션을 사용하여 쉽게 캐시를 적용할 수 있다. 예를 들어 @Cacheable 어노테이션은 메서드의 반환값을 캐시에 저장하고, 이후 동일한 메서드를 호출할 때 캐시된 값을 반환한다.
인덱스 추가하기
쿼리 성능을 높이기 위해 인덱스를 추가할 수 있다. 인덱스는 특정 컬럼을 대상으로 빠른 검색을 가능하게 한다. Spring Boot에서는 JPA 어노테이션을 사용하여 인덱스를 추가할 수 있다. 예를 들어 @Index 어노테이션을 사용하여 엔티티 클래스의 필드에 인덱스를 추가할 수 있다.
쿼리 튜닝하기
일부 쿼리는 실행 시간이 매우 오래 걸릴 수 있다. 이러한 쿼리를 튜닝하여 실행 시간을 단축할 수 있다. 쿼리 튜닝을 위해서는 실행 계획을 분석하고 쿼리를 재작성하는 등의 작업이 필요하다.
FetchType 지정하기
JPA에서는 FetchType을 지정하여 연관된 엔티티를 어떻게 로딩할지 결정할 수 있다. FetchType을 LAZY로 지정하면 해당 엔티티를 실제로 사용할 때까지 로딩하지 않아서 성능을 향상시킬 수 있다. 그리고 모든 엔티티가 필요하다면, 쿼리영역에서 fetch Join, 혹은 @EntityGraph를 통해 한번에 가져오는 것으로 LAZY 로딩의 단점을 커버 가능하다.
쿼리 로그 남기기
쿼리 로그를 남겨서 실행되는 쿼리의 종류와 실행 시간 등을 확인할 수 있다. Spring Boot에서는 application.properties 파일에 다음과 같은 설정을 추가하여 쿼리 로그를 남길 수 있다
indexing: 데이터 탐색 속도를 향상 시킨다(disk의 어떤 위치에 있는지 해쉬 맵을 통해 좁힐 수 있다.)
이외에도 여러가지가 있지만, 1차원적이고, 간단하게 최대의 효율을 낼만한 것들을 우선적으로 정리해보았다.
캐싱, 인덱싱의 경우, 실제 프로젝트에서 수행하고 성능 분석을 정리한 글을 아래에 첨부했으니, 실제로 어느정도의 성능 변화가 생기는지 궁금하다면 참고해보자!
인덱싱을 통한 성능 변화 분석
https://codenme.tistory.com/83
[Optimization] 인덱싱(indexing)을 통한 성능 개선 분석
백엔드 개발자로써, 최적화를 수행하기 위해 수행할 수 있는 것들이 몇가지 있다. 캐시 사용하기 반복적으로 실행되는 쿼리 결과를 캐시하여 DB에 쿼리를 보내는 횟수를 줄일 수 있다. Spring Boot
codenme.tistory.com
캐싱을 통한 성능 변화 분석
https://codenme.tistory.com/157
[Optimization] 캐싱(caching)을 통한 성능 개선 분석
https://codenme.tistory.com/83 [Optimization] 인덱싱(indexing)을 통한 성능 개선 분석 백엔드 개발자로써, 최적화를 수행하기 위해 수행할 수 있는 것들이 몇가지 있다. 캐시 사용하기 반복적으로 실행되는
codenme.tistory.com
'back-end study' 카테고리의 다른 글
[Optimization] 캐싱(caching)을 통한 성능 개선 분석 (0) | 2023.08.03 |
---|---|
성능 지표에 관하여 (ThroughPut, Latency) (0) | 2023.06.21 |
HTTP 클라이언트- Apache HttpClient VS OkHttpClient VS Spring WebClient (0) | 2023.06.15 |
WebClient 이론 및 사용법 (0) | 2023.06.08 |
Blocking / Non-blocking 과 Sync / Async 의 차이 (0) | 2023.06.08 |