Spring & Java
운영형 Spring 본문

이번 시간에는 운영 가능한 스프링은 무엇이며 운영 3요소는 무엇인지 확인해보는 시간을 가져보겠습니다
학습 목표
● 운영 가능한 Spring이란?
● 운영 3요소
운영형 Spring


" 운영형 " 이 중요한 이유!
1. 새벽 3시 장애 발생
● X 운영 불가 : " 서버 들어가서 확인해봐야... " -> 2시간 소요
● O 운영 가능 : 헬스체크 DOWN -> 로그 확인 -> 10분 내 원인 파악
2. 스테이징 -> 프로덕션 배포
: 로컬 환경 > 내부 환경 > QA환경 > 스테이지 환경 > 프로덕션 환경
( 로컬 > DEV > QA >스테이징 > 프로덕션 환경별 5단계 )
● X 운영 불가 : DB 설정 하드코딩 -> 프로덕션 DB 연결 실패
● O 운영 가능 : 환경변수로 설정 주입 -> 무사히 배포
운영 3요소
운영시 중요하게 생각해야하는 3요소 Health, Log, Config 입니다.
1. Health (헬스 체크)
목적 : 서버가 정상 동작 중인지 확인
| 상태 | 의미 |
| UP | 정상 |
| DOWN | 문제 발생 |
# 헬스체크 요청
curl http://localhost:8080/actuator/health
# 응답 예시
{"status":"UP"}
실제 예시

2. Log - 로그
목적 : 장애 발생 시 원친 추적
2024-01-15 10:30:45 INFO - Application started
2024-01-15 10:31:02 ERROR - Database connection failed
2024-01-15 10:31:02 ERROR - java.sql.SQLException: Connection refused
-> 로그를 보면 " DB 연결 실패 " 가 원인임을 알 수 있음
3. Config (설정)
목적 : 환경 ( 로컬 / 개발 / 운영 ) 별 다른 설정 적용
| 환경 | DB호스트 | 로그 레벨 |
| local | localhost | DEBUG |
| prod | https://aws.amazon.com/ko/rds/ | INFO |
-> 코드 수정 없이 환경변수로 설정 변경
느낀점
운영형 Spring 환경은 서버를 여러 분기별로 나누어 관리함으로써 안정성과 확장성 측면에서 분명한 장점이 있다고 느꼈다.
하지만 실제 운영 환경에서는 단일 서버와 달리 요청이 여러 서버로 분산되기 때문에, 문제가 발생했을 때 어느 서버에서 어떤 원인으로 장애가 발생했는지를 즉시 파악하기 어렵다는 점도 함께 느끼게 되었다.이러한 구조에서는 단순한 디버깅 방식이 아닌 Health Check, 로그, 모니터링을 통해 간접적으로 서버 상태를 판단해야 한다. 이론적으로는 그 필요성을 이해했지만, 아직은 실제 장애 상황을 경험해보지 못했기 때문에 그 중요성이 완전히 체감되지는 않았다.
다만 운영 서버에서는 “문제가 발생하지 않도록 하는 것”보다 “문제가 발생했을 때 빠르게 원인을 찾고 대응하는 것”이 더 중요하다는 점을 이번 학습을 통해 알게 되었다. 앞으로 로그 구조와 서버 상태 모니터링이 왜 운영 환경에서 필수적인 요소로 사용되는지 점차 이해해 나갈 수 있을 것이라 생각한다.