Actuator와 Micrometer (2) - Micrometer로 메트릭 수집하고 Prometheus로 내보내기
1. 개요 1편에서는 Actuator의 health 로 "서버가 살아 있는가"를 확인했다. 하지만 운영에서는 "좌석 조회 API가 요즘 느려지지 않았나?", "오늘 예매가 몇 건 성공했나?"처럼 숫자로 답해야 하는 질문 도 많다. 이런 숫자를 메트릭 (metric)이라…
TAG
18개의 글
1. 개요 1편에서는 Actuator의 health 로 "서버가 살아 있는가"를 확인했다. 하지만 운영에서는 "좌석 조회 API가 요즘 느려지지 않았나?", "오늘 예매가 몇 건 성공했나?"처럼 숫자로 답해야 하는 질문 도 많다. 이런 숫자를 메트릭 (metric)이라…
1. 개요 공연 예매 서비스를 운영하다 보면 "서버가 지금 살아 있나?", "DB 연결은 괜찮나?", "좌석 조회 API가 요즘 느려지지 않았나?" 같은 질문에 답해야 한다. 로그만으로는 이런 질문에 빠르게 답하기 어렵다. Spring Boot는 이 문제를 두 도구로…
1. 개요 내장 Tomcat과 DispatcherServlet 처럼 애플리케이션을 실행하기 위해 필요한 기술 객체까지 애플리케이션 클래스에 함께 두면, 비즈니스 코드와 기반 설정의 경계가 흐려진다. 이번 글에서는 여러 애노테이션을 하나로 묶는 합성 애노테이션(compo…
1. 개요 앞 글에서는 @Import 에 TomcatWebServerConfig 와 DispatcherServletConfig 를 직접 적어 인프라 빈을 분리했다. 구성 클래스가 몇 개뿐이라면 충분하지만, 라이브러리가 제공하는 기능이 많아지면 애노테이션 코드를 고칠 때…

1. 개요 앞 글에서 만든 @MyAutoConfiguration 에는 @Configuration(proxyBeanMethods = false) 가 들어 있다. false 하나가 무엇을 바꾸는지 알려면, @Bean 메서드가 일반 자바 메서드와 다르게 동작하는 이유부터 살…
1. 개요 앞 글에서는 스프링 컨테이너가 HelloController 와 HelloService 를 만들고 연결하도록 구성했다. 이번에는 그 연결 방식인 의존성 주입(DI, Dependency Injection) 을 테스트에 활용한다. DI를 적용하면 컨테이너를 띄우지…

1. 개요 Freestyle Job은 빠르게 시작할 수 있지만, 화면에서 바꾼 빌드 절차는 애플리케이션 코드와 함께 리뷰하거나 버전을 비교하기 어렵다. Jenkins Pipeline은 빌드·테스트·배포 순서를 코드로 작성하고 Jenkinsfile 로 저장소에 커밋하는…
1. 개요 앞선 글에서는 Jenkins Pipeline으로 Spring Boot 프로젝트를 테스트했다. 이번에는 테스트를 통과한 JAR를 Docker 이미지로 만들고, 기존 컨테이너를 새 이미지로 교체해 로컬에서 실행한다. 이 글의 Jenkins는 Docker Desk…

1. 개요 Spring Boot 프로젝트를 처음 만들면 JPA의 ddl auto: update 로 테이블을 만드는 경우가 많다. 엔티티만 고치면 개발용 DB 구조가 따라오므로 시작하기 편하다. 하지만 프로젝트가 커지고 개발·테스트·운영 DB가 나뉘면, 같은 코드라도 D…
1. 개요 앞선 글에서는 테스트를 통과한 Spring Boot 애플리케이션을 Docker 이미지로 만들어 Docker Hub에 푸시했다. 이미지를 저장소에 올리는 것만으로는 EC2에서 실행 중인 컨테이너가 바뀌지 않는다. 이 글에서는 main 브랜치에 푸시하면 테스트,…
1. 개요 GET /schedules/{scheduleId}/seats 는 컨트롤러만 정상이라고 해서 충분하지 않다. 요청 경로가 컨트롤러에 연결되고, 서비스가 회차와 좌석을 조회하고, JPA가 DB에서 데이터를 읽고, 마지막으로 JSON 응답까지 만들어져야 한다. 이…
1. 개요 테스트가 통과한 Spring Boot 애플리케이션을 실행 가능한 형태로 전달하려면, JAR와 JRE를 함께 묶은 Docker 이미지가 편리하다. 이 글에서는 Gradle 테스트 Job이 성공했을 때만 Spring Boot 이미지를 빌드하고 Docker Hub…
1. 개요 앞 글의 단위 테스트는 서비스 클래스 하나의 규칙을 빠르게 확인했다. Spring Data JPA 저장소를 사용할 때는 엔티티 매핑과 쿼리도 함께 검증해야 한다. 이 글에서는 H2 인메모리 데이터베이스를 사용하는 @DataJpaTest 를 만들고 GitHub…
1. 개요 첫 워크플로가 실행되는 것을 확인했다면, 실제 Spring Boot 프로젝트의 테스트를 연결할 차례다. 이 글에서는 서비스 클래스의 JUnit 단위 테스트를 예시로, main 브랜치에 푸시하거나 풀 리퀘스트를 열 때마다 Gradle의 test 태스크를 실행한…
1. 개요 코드를 원격 저장소에 올린 뒤 매번 직접 빌드와 테스트를 실행하면 확인을 빼먹기 쉽다. GitHub Actions는 push , 풀 리퀘스트 같은 이벤트가 발생할 때 저장소의 작업을 자동으로 실행하는 도구다. 이 글에서는 GitHub Actions의 구성 요…
1. 개요 공연 예매 API의 GET /schedules/{scheduleId}/seats 는 회차의 좌석 목록을 돌려준다. 그런데 없는 회차 ID로 요청하면 어떻게 응답해야 할까? 처음 구현에서는 서비스가 IllegalArgumentException 을 던졌고, 이를…
1. 개요 앞 글에서는 내장 Tomcat과 서블릿을 직접 만들고 연결했다. 이 방식은 웹 요청이 처리되는 원리를 이해하기에 좋지만, 애플리케이션이 커질수록 객체를 만들고 연결하고 서버를 시작하는 코드가 main() 에 계속 쌓인다. 이 글에서는 이 작업을 스프링 컨테이…
Kafka를 애플리케이션에 연결하려면 Producer와 Consumer의 클라이언트 설정, 직렬화 방식, 리스너 실행 등을 준비해야 한다. Spring Kafka는 이 과정을 Spring의 빈과 애노테이션으로 구성할 수 있게 해 주는 프로젝트다. 이번 글에서는 Spri…