SRE는 '사이트 신뢰성 엔지니어링'의 약자로, 시스템과 애플리케이션의 안정성, 성능, 확장성을 보장하기 위해 소프트웨어 엔지니어링 기법을 활용하는 분야입니다. 주로 대규모 시스템 운영과 관련된 업무에서 사용되며, 개발(Dev)과 운영(Ops) 사이의 간극을 줄이는 역할을 합니다.
전통적인 시스템 운영 방식은 개발팀과 운영팀이 각각 분리되어 있던 반면, SRE는 두 영역을 하나의 팀이 책임지며 협업합니다.
SRE는 DevOps와 매우 밀접한 개념입니다. DevOps는 개발과 운영간의 협업을 강조하며, SRE는 이를 한 단계 더 발전시켜, 실제로 시스템의 신뢰성을 유지하기 위해 소프트웨어 공학 원칙을 적용합니다. 그래서 SRE는 DevOps의 일종으로 볼 수 도 있지만, 더 구체적으로 서비스 신뢰성에 집중한다고 볼 수 있습니다.
취준 및 신입 Java/Spring 백엔드 개발자가 SRE의 개념을 이해하고 실습해볼 수 있는 몇 가지 아이디어를 소개합니다. 실습을 통해 모니터링, 자동화, 장애 대응 등 SRE 관련 업무에 익숙해질 수 있습니다.
Spring Boot 프로젝트 생성 및 Actuator 추가
Maven/Gradle 의존성에 spring-boot-starter-actuator를 추가합니다.
<!-- pom.xml 예시 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
기본 Actuator 엔드포인트 활성화
application.properties 또는 application.yml에 필요한 엔드포인트를 활성화하고, 접근 권한을 설정합니다.
management.endpoints.web.exposure.include=health,info,metrics,loggers
management.endpoint.health.show-details=always
엔드포인트 호출 및 결과 확인
애플리케이션을 실행한 후 브라우저나 curl로 /actuator/health, /actuator/metrics 등의 엔드포인트에 접근하여 결과를 확인합니다.
메트릭 커스터마이징
원하는 메트릭을 수집하거나, 커스터마이징하여 원하는 데이터를 모니터링하도록 설정해볼 수 있습니다.
의도적으로 예외 발생시키기
특정 API 호출 시 인위적으로 예외를 발생시키는 코드를 작성합니다.
@RestController
public class TestController {
@GetMapping("/test-error")
public String testError() {
throw new RuntimeException("인위적인 장애 발생!");
}
}
예외 처리 및 로그 확인
Spring Boot의 기본 에러 처리 방식을 관찰하고, 로그 파일이나 콘솔에 출력되는 예외 메시지를 확인합니다.
장애 복구 방안 고민 및 적용
예를 들어, 특정 오류에 대해서 fallback 로직을 적용하거나, 장애 발생 시 자동 재시작, 알림 전송 등을 연습해볼 수 있습니다.
Jenkins 또는 GitHub Actions 사용
.github/workflows 디렉토리를 만들고 간단한 빌드/테스트 워크플로우를 구성합니다.테스트 자동화
간단한 JUnit 테스트를 작성하고, CI/CD 파이프라인에 포함시켜 빌드 이후 테스트가 자동으로 실행되도록 설정합니다.
배포 자동화
로컬 Docker 환경 또는 클라우드 환경으로 자동 배포하는 단계를 추가해봅니다. (예: Dockerfile 작성 및 빌드 후 컨테이너 실행)
SLO/SLA 정의
예를 들어, "API 응답 시간 95%는 500ms 이하"와 같은 목표를 설정합니다.
SLI 수집
Spring Actuator의 메트릭이나, Prometheus와 같은 모니터링 도구를 연동해 실제 응답 시간을 모니터링합니다.
대시보드 구성
Grafana 등을 이용해 SLI를 시각화해보고, 목표 대비 실제 수치를 확인합니다.
이러한 실습은 작은 프로젝트라도 충분히 적용할 수 있습니다. 처음에는 간단한 프로젝트로 시작해서 점차적으로 모니터링, CI/CD, 장애 복구 등 영역을 확장해 나가면서 실제 운영 환경에서의 SRE 역할을 경험해볼 수 있습니다.
실습 과정 중 궁금한 사항이나 더 심화하고 싶은 부분이 있으면, 관련 자료나 튜토리얼을 찾아보며 꾸준히 학습해 나가는 것이 좋습니다. 이를 통해 개발과 운영 모두에 대한 이해를 높이고, 보다 안정적인 애플리케이션을 구축하는 데 큰 도움이 될 것입니다.