Java/Spring 개발자를 위한 운영 환경 구조 정리

Spring Boot 애플리케이션을 Kubernetes 환경에서 운영할 때 가장 중요한 요소 중 하나는 로그와 모니터링 체계입니다.

로컬 환경에서는 로그 파일을 직접 확인할 수 있지만 Kubernetes에서는 애플리케이션이 컨테이너 기반으로 실행되기 때문에 로그 관리 방식이 달라집니다.

이번 글에서는 Spring Boot 애플리케이션을 Kubernetes에서 운영할 때 사용하는 로그와 모니터링 구조를 정리해 보겠습니다.


1. 기존 서버 환경의 로그 구조

전통적인 Java 서버 환경에서는 보통 다음과 같은 방식으로 로그를 관리합니다.

 
Server
└ Spring Application
└ /logs/app.log
 

개발자는 서버에 접속하여 로그를 확인합니다.

 
tail -f /logs/app.log
 

이 방식은 서버 기반 환경에서는 문제가 없지만 Kubernetes 환경에서는 적합하지 않습니다.


2. Kubernetes에서의 로그 구조

Kubernetes에서는 컨테이너 로그를 stdout/stderr로 출력하는 방식을 사용합니다.

Spring Boot 애플리케이션 로그 구조

 
Spring Boot

stdout / stderr

Docker Container

Kubernetes Pod
 

즉 로그를 파일이 아니라 **표준 출력(Standard Output)**으로 출력하는 것이 기본 방식입니다.

로그 확인 방법

 
kubectl logs pod-name
 

 
kubectl logs spring-app-7d9fbbd8c6-abcde
 

이 명령어로 컨테이너 로그를 확인할 수 있습니다.


3. Spring Boot 로그 설정

Spring Boot에서는 기본적으로 Logback을 사용합니다.

Kubernetes 환경에서는 로그를 파일이 아니라 콘솔로 출력하는 것이 좋습니다.

예시 설정

<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

이렇게 하면 로그가 stdout으로 출력됩니다.


4. 로그 수집 구조

Kubernetes 환경에서는 보통 다음과 같은 로그 수집 구조를 사용합니다.

Spring Boot
   ↓
Container stdout
   ↓
Kubernetes
   ↓
Log Collector
   ↓
Log Storage
   ↓
Dashboard

 

대표적인 로그 스택은 다음과 같습니다.

ELK Stack

Elasticsearch
Logstash
Kibana

 

Loki Stack

Promtail
Loki
Grafana

 

 

최근 Kubernetes 환경에서는 Loki + Grafana 조합이 많이 사용됩니다.


5. Spring Boot 모니터링 (Actuator)

Spring Boot에는 Actuator라는 모니터링 기능이 있습니다.

Actuator를 사용하면 다음과 같은 정보를 확인할 수 있습니다.

  • 애플리케이션 상태
  • 메트릭
  • JVM 정보
  • HTTP 요청 통계

의존성 추가

 
implementation 'org.springframework.boot:spring-boot-starter-actuator'
 

Actuator endpoint 예

 
/actuator/health
/actuator/metrics
/actuator/prometheus
 

6. Prometheus 기반 모니터링

Kubernetes 환경에서는 보통 Prometheus를 사용하여 메트릭을 수집합니다.

구조

 

Spring Boot
   ↓
Actuator Metrics
   ↓
Prometheus
   ↓
Grafana

Prometheus endpoint 설정

 
management.endpoints.web.exposure.include=health,info,prometheus
 

이렇게 하면 Prometheus가 메트릭을 수집할 수 있습니다.


7. Grafana 대시보드

Grafana를 사용하면 Spring Boot 애플리케이션의 상태를 시각화할 수 있습니다.

대표적으로 다음 정보를 모니터링합니다.

  • CPU 사용량
  • 메모리 사용량
  • HTTP 요청 수
  • 응답 시간
  • JVM 메모리

구조

Grafana에서는 Spring Boot용 대시보드도 제공됩니다.

Spring Boot
   ↓
Prometheus
   ↓
Grafana Dashboard

8. Kubernetes 운영 환경 전체 구조

Spring Boot 로그와 모니터링 구조는 다음과 같습니다.

Spring Boot Application
       ↓
stdout logs
       ↓
Kubernetes Pod
       ↓
Log Collector (Promtail / Fluentd)
       ↓
Loki / Elasticsearch
       ↓
Grafana Dashboard

 

모니터링 구조

Spring Boot Actuator
       ↓
Prometheus
       ↓
Grafana

 

이 구조를 사용하면 애플리케이션 상태를 실시간으로 확인할 수 있습니다.


결론

Kubernetes 환경에서는 기존 서버 기반 로그 방식과 달리 컨테이너 중심 로그 구조를 사용합니다.

Spring Boot 애플리케이션을 Kubernetes에서 운영할 때는 다음 구성이 일반적입니다.

  • stdout 로그 출력
  • Prometheus 메트릭 수집
  • Grafana 대시보드 시각화
  • Loki 또는 Elasticsearch 로그 저장

이러한 구조를 통해 Java/Spring 애플리케이션의 운영 가시성과 안정성을 높일 수 있습니다

 

LIST

+ Recent posts