2024. 10. 2. 09:00ㆍ모니터링
2024/10/02
애플리케이션을 개발하고 배포까지 마무리하면
개발자로서의 역할은 끝난걸까요?
당연히 아니겠죠? 애플리케이션의 안정적이고
효율적인 운영을 위해 모니터링은 필수적입니다.
또한, 웹 애플리케이션 개발은 항상 해커들의 타겟이 됩니다.
해커들은 다양한 기법을 사용하여 시스템의 취약점을 찾고,
이를 악용하려고 합니다.따라서 보안은 매우 중요한 요소입니다.
※ 모니터링에 대해 알아보자.
▶ 모니터링이란?
모니터링은 시스템의 성능, 안정성 및 가용성을 실시간으로 관찰하고 측정하는 과정을 의미한다. 모니터링 도구를 사용하여 시스템의 상태를 추적하고, 문제를 감지하고, 성능을 최적화하며, 장애 발생 시 빠르게 대응할 수 있다.
● 모니터링의 중요성
○ 문제 예방 : 모니터링을 통해 잠재적인 문제를 사전에 발견하고 해결할 수 있다.
○ 빠른 대응 : 문제가 발생했을 때 신속하게 대응할 수 있어 시스템 다운타임을 최소화한다.
○ 성능 최적화 : 애플리케이션의 성능 병목 지점을 찾아 개선할 수 있다.
○ 사용자 경험 향상 : 안정적이고 빠른 서비스를 제공하여 사용자 만족도를 높인다.
○ 비즈니스 연속성 : 시스템 가용성을 보장하여 비즈니스 운영의 연속성을 유지할 수 있다.
● 모니터링의 범위
○ 서버 모니터링 : CPU, 메모리, 디스크 사용량, 네트워크 트래픽 등 서버 자원 사용을 모니터링한다.
○ 애플리케이션 모니터링 : 애플리케이션의 상태, 성능, 로그 등을 모니터링한다.
○ 네트워크 모니터링 : 네트워크 트래픽, 대역폭 사용량, 네트워크 지연 등을 모니터링한다.
○ 데이터베이스 모니터링 : 쿼리 성능, 연결 수, 데이터베이스 사용량 등을 모니터링한다.
○ 보안 모니터링 : 보안 이벤트, 침입 시도, 취약점 등을 모니터링한다.
▶ Spring Boot Actuator란?
📌 Spring Boot Actuator는 Spring Boot 애플리케이션의 상태와 성능을 모니터링하고 관리할 수 있도록 다양한 엔드포인트를 제공하는 기능이다. Actuator는 헬스 체크, 메트릭스, 환경 정보, 로그 정보 등 여러 가지 중요한 정보를 쉽게 확인할 수 있도록 도와준다.
● Actuator 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'
● Actuator 엔드포인트
👉 Actuator는 기본적으로 여러 엔드포인트를 제공한다. 이러한 엔드포인트는 /actuator 경로 하위에 위치하며, 각각의 엔드포인트는 다양한 정보를 제공한다.
○ /actuator/health : 애플리케이션의 상태를 확인한다.
○ /actuator/metrics : 애플리케이션의 메트릭 정보를 제공한다.
○ /actuator/loggers : 로깅 설정을 조회하고 변경할 수 있다.
○ /actuator/env : 환경 변수와 설정 정보를 확인한다.
○ /actuator/beans : 애플리케이션 컨텍스트에 있는 빈 목록을 확인한다.
○ /actuator/threaddump : 스레드 덤프를 확인한다.
○ /actuator/httptrace : 최근 HTTP 요청 및 응답을 추적한다.
● Actuator 엔드포인트 설정
📍 기본적으로 모든 엔드포인트가 활성화되어 있지 않을 수 있다. application.properties 파일을 사용하여 필요한 엔드포인트를 활성화하거나 비활성화할 수 있다.
○ 설정 옵션 설명
▪ never : 헬스 체크 상세 정보를 절대 표시하지 않다.
▪ always : 모든 사용자에게 헬스 체크 상세 정보를 항상 표시한다.
▪ when_authorized : 인증된 사용자에게만 헬스 체크 상세 정보를 표시한다.
⚙️ src/main/resources/application.properties
spring.application.name=sample
server.port=8080
#모든 엔드포인트 노출 설정
management.endpoints.web.exposure.include=*
#헬스 체크 엔드포인트 상세 정보 표시 설정
management.endpoint.health.show-details=always
# 이 설정은 /actuator/health 엔드포인트에서 헬스 체크 정보를 항상 상세히 보여주도록 설정한다.
# 기본적으로, 헬스 체크 엔드포인트는 요약된 상태 정보만 제공하며, 상세 정보는 노출되지 않는다.
● 주의사항 및 권장사항
○ 보안
▪ 모든 엔드포인트를 노출하는 설정은 개발 및 테스트 환경에서는 유용할 수 있지만, 운영 환경에서는 보안 위험을 증가시킬 수 있다.
▪ 필요한 엔드포인트만 노출하는 것을 권장한다.
▪ 헬스 체크 엔드포인트에서 상세 정보를 항상 노출하는 설정 역시 운영 환경에서는 민감한 정보를 포함할 수 있으므로, show-details설정을 when_authorized 옵션을 사용하는 것이 좋다.
○ 엔드포인트 보호
▪ actuator 접근 포트만 다른 포트로 설정하여 보호 할 수 있다.
# 애플리케이션의 기본 포트를 8080으로 설정
server.port=8080
# Actuator 엔드포인트를 19090 포트에서 서비스하도록 설정
management.server.port=19090
▪ Spring Security를 사용하여 민감한 엔드포인트에 접근 제어를 설정하는 것이 좋다.
▪ 예를 들어, /actuator 경로에 대한 보안 설정을 추가할 수 있다.
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/actuator/**").authenticated()
.and()
.httpBasic();
}
}
'모니터링' 카테고리의 다른 글
시큐어 코딩 - XSS (2) | 2024.10.11 |
---|---|
시큐어 코딩 - CSRF (9) | 2024.10.11 |
시큐어 코딩 - CORS (0) | 2024.10.09 |
애플리케이션 로그 모니터 (2) | 2024.10.07 |
모니터링 - Prometheus와 Grafana (0) | 2024.10.04 |