DEV-STUDY/Spring
[Spring] 성능 최적화 및 모니터링 도구
HwangJerry
2023. 9. 15. 23:18
어플리케이션 성능 모니터링
어플리케이션 성능 모니터링(APM)은 어플리케이션의 성능을 실시간으로 모니터링할 수 있도록 해주는 도구입니다. 이를 통해 개발자는 어플리케이션의 성능을 실시간으로 확인하고 분석할 수 있습니다.
- Spring Boot Actuator : 스프링 부트 어플리케이션의 상태를 모니터링하고 관리하는 데 사용되는 모듈입니다. Actuator를 사용하면 어플리케이션의 상태, 메트릭, 빈, 스레드 등을 확인할 수 있습니다. Actuator는 spring boot starter에 등록되어 있습니다.
- 그 외에 Micrometer와 같은 모니터링 시스템 구현체도 있습니다.
로깅 및 로그 분석
어플리케이션 로그는 어플리케이션의 동작과 관련된 중요한 정보를 담고 있습니다. 로그를 효과적으로 관리하고 분석하면 문제를 신속하게 파악하고 해결할 수 있습니다. 스프링 부트에서는 SLF4J와 LogBack을 기본 로깅 프레임워크로 사용합니다.
성능 최적화 전략
성능 최적화는 어플리케이션의 응답 속도를 높이고 리소스 사용량을 줄이는 과정입니다. 다음과 같은 전략을 사용하여 스프링부트 어플리케이션의 성능을 최적화할 수 있습니다.
- JVM 옵션 설정 : 가비지 컬렉션 전략, 메모리 설정, JIT 컴파일러 설정 등을 통해 어플리케이션의 성능을 향상시킬 수 있습니다.
- GC 알고리즘 선택 : 목적에 따라 Throughput(처리량) 또는 ResponseTime(응답 속도) 관점에서 튜닝 진행
- Parallel GC : "처리량"이 중요한 시스템에서 주로 사용. Full GC 수행시 compaction 작업이 수행되므로 GC 시간 자체는 많이 소요되나, stop the world 시간이 일정함
- CMS GC : 응답시간이 중요한 시스템에서 주로 사용. compaction을 수행하지 않아 stop the world 시간이 짧지만, 자원 사용량이 증가하며, compaction이 자주 발생하는 시스템의 경우 Full GC보다 compaction 시간이 오래 걸릴 수 있음
- G1 GC : 성능적으로는 가장 우수한 GC 알고리즘이며, java 9 이후 default GC 알고리즘으로 채택됨.
- GC 알고리즘 선택 : 목적에 따라 Throughput(처리량) 또는 ResponseTime(응답 속도) 관점에서 튜닝 진행
Throughtput 관점 GC | ResponseTime 관점 GC |
주어진 시간 내에 최대한 많은 일을 처리하는 것을 목적으로 하는 GC | 요청에 대한 응답시간 측면에서 성능을 높이기 위한 GC |
대표 GC 알고리즘 : Perallel GC | 대표 GC 알고리즘 : CMS GC, G1GC |
java -Xms256m -Xmx512m -XX:+UseG1GC -jar myapp.jar
- 캐싱 적용 : 자주 사용되는 데이터나 연산 결과를 캐시에 저장하여 성능을 향상시킬 수 있습니다. 스프링 부트에서는 EhCache, Redis, Hazelcast 등 다양한 캐싱 라이브러리를 사용할 수 있습니다.
@EnableCaching
@Configuration
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("sampleCache");
}
}
- 데이터베이스 최적화 : 인덱스 생성, 쿼리 최적화, 커넥션 풀 설정 등을 통해 데이터베이스의 성능을 향상시킬 수 있습니다.
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: user
password: password
hikari:
maximumPoolSize: 10
- 비동기 처리 : 비동기 방식으로 작업을 처리하여 어플리케이션의 응답 속도를 높일 수 있습니다.
@Service
public class SampleService {
@Async
public CompleteFuture<String> asyncMethod() {
// 비동기 처리 로직
}
}
실제 환경에서 가장 효과적인 성능 최적화 방법을 찾으려면 프로파일링, 벤치마킹 등을 활용하여 어플리케이션의 성능을 체계적으로 분석해야 합니다.
출처: