사내 VM IP 관리 시스템 만들기 - Spring Boot Heartbeat 처리 + 이상 감지 + Slack 알림 (3편)

heartbeat 처리 흐름 에이전트가 30초마다 POST /api/heartbeat를 호출한다. 서버는 MAC 주소를 기준으로 VM을 식별하고 상태를 갱신한다. heartbeat 수신 │ ▼ MAC 주소로 VM 조회 │ ├─ DB에 없음 → 신규 등록 └─ DB에 있음 → 상태 갱신 (hostname, last_seen_at) │ ▼ 이상 감지 실행 │ ├─ IP 변경 감지 ├─ IP 충돌 감지 └─ IP 대역 이탈 감지 HeartbeatService @Service @RequiredArgsConstructor @Transactional public class HeartbeatService { private final VmRepository vmRepo; private final AnomalyDetectorService anomalyDetector; public void process(HeartbeatRequest req) { Vm vm = vmRepo.findByMacAddress(req.getMacAddress()) .orElseGet(() -> vmRepo.save(Vm.create( req.getMacAddress(), req.getHostname(), req.getAgentVersion() ))); vm.heartbeat(req.getHostname(), req.getAgentVersion()); anomalyDetector.detectAndUpdate(vm, req.getNetworkInterfaces()); } } Vm.create()는 신규 VM을 UNKNOWN 상태로 생성한다. vm.heartbeat()는 lastSeenAt을 현재 시각으로 갱신하고 상태를 ONLINE으로 바꾼다. ...

2026년 4월 14일 · 5 min · 988 words · Chanyeol

Spring Boot 3.x 환경에서 Querydsl 설정 및 동적 쿼리 최적화 가이드

Spring Data JPA는 간단한 CRUD 작업을 처리할 때 매우 강력하지만, 복잡한 검색 조건이나 동적 쿼리를 작성해야 할 때는 한계에 부딪히기 쉽습니다. @Query 어노테이션을 사용하여 직접 JPQL을 작성할 수는 있지만, 문자열 기반의 쿼리는 오타 발생 시 런타임 에러를 유발하며 가독성이 떨어지는 단점이 있습니다. 이러한 문제를 해결해 주는 도구가 바로 Querydsl입니다. Querydsl은 자바 코드로 쿼리를 작성할 수 있게 해주어 컴파일 시점에 오류를 잡아낼 수 있고, 메서드 체이닝 방식을 통해 직관적인 동적 쿼리 작성을 지원합니다. 이번 포스팅에서는 최신 Spring Boot 3.x 환경에서의 설정 방법과 실무 최적화 팁을 알아보겠습니다. ...

2026년 3월 2일 · 3 min · 483 words · Chanyeol
1