애플리케이션 개발에서 로깅(logging)과 모니터링(monitoring)은 필수적인 요소입니다. Java 애플리케이션이 실행되는 동안 발생하는 이벤트를 기록하고, 성능 및 장애를 모니터링하면 안정적인 서비스를 제공할 수 있습니다. 이번 포스팅에서는 Java에서 로깅과 모니터링을 효과적으로 수행하는 방법을 알려 드리겠습니다.
로깅(logging)은 애플리케이션이 실행되는 동안 이벤트를 기록하여 디버깅, 오류 감지 및 성능 분석에 도움을 줍니다.
로깅을 사용하는 이유
1) Java에서 사용되는 주요 로깅 프레임워크
프레임워크 | 설명 |
---|---|
java.util.logging (JUL) | 기본 제공되는 로깅 기능, 간단한 애플리케이션에 적합 |
Log4j | Apache에서 제공하는 강력한 로깅 프레임워크 |
Logback | Log4j의 후속 프로젝트로 Spring Boot에서 기본 지원 |
SLF4J | 여러 로깅 프레임워크를 통합하여 사용할 수 있는 인터페이스 |
2) SLF4J + Logback 설정 예제
pom.xml
에서 Logback 및 SLF4J 의존성 추가
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
logback.xml
설정 예제:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.example" level="DEBUG"/>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
3) 로깅 코드 예제
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggingExample {
private static final Logger logger = LoggerFactory.getLogger(LoggingExample.class);
public static void main(String[] args) {
logger.info("애플리케이션이 시작되었습니다.");
logger.debug("디버깅 메시지");
logger.error("오류 발생!");
}
}
출력 예시:
2024-02-08 10:00:00 - 애플리케이션이 시작되었습니다.
2024-02-08 10:00:01 - 디버깅 메시지
2024-02-08 10:00:02 - 오류 발생!
모니터링은 애플리케이션의 상태를 지속적으로 확인하고, 장애 발생 시 신속히 대응할 수 있도록 도와줍니다.
1) 주요 모니터링 대상
2) Spring Boot Actuator를 활용한 모니터링
Spring Boot 애플리케이션에서는 Spring Boot Actuator
를 활용하면 손쉽게 모니터링이 가능합니다.
설정 방법
pom.xml
에서 Actuator 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
application.properties
에서 Actuator 활성화
management.endpoints.web.exposure.include=health,info,metrics
사용 예시
http://localhost:8080/actuator/health
→ 애플리케이션 상태 확인합니다.http://localhost:8080/actuator/metrics/jvm.memory.used
→ JVM 메모리 사용량을 조회합니다.3) ELK(Elasticsearch + Logstash + Kibana) 스택을 활용한 모니터링
ELK 스택은 로그 수집, 분석, 시각화를 통해 실시간으로 애플리케이션 상태를 확인할 수 있는 강력한 모니터링 도구입니다.
설정 예제 (logstash.conf):
input {
file {
path => "/var/log/app.log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:message}" }
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "application-logs"
}
}
4. 로깅 및 모니터링 모범 사례
INFO
, DEBUG
, ERROR
등의 수준을 상황에 맞게 사용합니다.1. Spring Boot에서 로그 파일을 외부 저장소에 저장할 수 있나요?
답변: 네, Logback의 파일 출력 설정을 활용하면 로그를 특정 디렉터리 또는 원격 저장소(S3, Kafka 등)에 저장할 수 있습니다.
2. 실시간 로그 모니터링을 위한 추천 도구는 무엇인가요?
답변: ELK 스택(Elasticsearch, Logstash, Kibana) 또는 Grafana + Prometheus 조합을 추천합니다.
3. 로깅과 모니터링을 함께 구성할 때 주의할 점은?
답변: 지나치게 상세한 로그를 기록하면 성능 저하가 발생할 수 있으므로, 중요 이벤트만 로그로 남기고, 메트릭 데이터는 모니터링 시스템에서 수집하는 것이 효율적입니다.
일상에서 벗어나 진정한 휴식을 꿈꾼다면, 일본 하코네 온천 료칸만큼 매력적인 여행지도 드물 것입니다. 하지만 검색만…
디즈니랜드 여행을 앞두고 가장 중요한 고민 중 하나는 바로 “숙소 선택”입니다. 꿈같은 하루를 선물하고 싶은…
스이카 카드 발급 해야하는 이유 "도쿄 지하철 정복은 스이카 카드 없으면 절대 불가능합니다!" "이 카드…
리버 크루즈를 타야만 하는 이유 "오사카 여행에서 낮에는 활기찬 거리, 밤에는 화려한 네온사인으로 물든 도시를…
오사카 여행에 필수적인 교통패스인 오사카 교통패스에 대해 소개 하겠습니다. 일본 오사카 여행을 준비 중이시라면, 효율적인…
후쿠오카는 일본 여행지 중에서도 근교 여행지와 맛집, 쇼핑, 자연 풍경, 도시를 한 번에 즐길 수…