전체 글(112)
-
Prometheus 서버 모니터링 구축하기 (2) - 설치부터 SMS 알림까지
모든 모니터링 도구는 같은 EC2 인스턴스 안에 설치하고, 서로 로컬 통신만 하게 하였습니다. 공통 설치 패턴Exporter, Prometheus, Alertmanager는 모두 아래와 같은 패턴으로 설치했습니다./opt에 다운로드하고 압축 해제실행 전용 계정 생성실행 파일만 /usr/local/bin으로 복사, 소유권 변경설정 파일은 /etc/도구이름/, 데이터는 /var/lib/도구이름/ 에 저장systemd 서비스로 등록 파일 위치 정리위치설명/opt설치 및 압축을 푸는 작업 공간으로 사용/usr/local/bin직접 설치한 프로그램의 표준 위치로 경로 없이 실행 가능/etc/...리눅스 설정 파일의 표준 위치/var/lib/...실행 중 생기는 데이터의 표준 위치 전용 계정을 만드는 이유패턴을 ..
2026.09.30 -
Jev 알아보기
Jev는 TypeSafe AI가 2026년 9월 15일에 공개한 모델로 텍스트를 토큰 단위로 생성하는 기존 LLM과 달리 상태(state)와 질문(question)을 입력받아 확률, 신뢰도가 붙은 구조화된 답변을 반환하는 모델입니다.이렇게만 말하면 무슨 말인지 모르니 천천히 알아가 보겠습니다. 생성형 AI의 아쉬운 점지금까지의 생성형 AI는 사람이 읽기 좋은 자연스러운 답변을 만드는 데는 뛰어나지만, 소프트웨어 안에서 반복적으로 판단을 내려야 하는 자동화 작업에는 몇 가지 근본적인 한계가 있습니다. 속도와 비용: 답을 토큰 단위로 하나씩 순차 생성하다 보니, 단순히 "예/아니요"나 "이 중 하나 골라줘" 같은 판단 하나를 받기 위해서도 전체 응답을 다 생성할 때까지 기다려야 하고, 그만큼 비용도 커집니다..
2026.09.24 -
Prometheus로 서버 모니터링 구축하기 (1) - 도구 선택과 아키텍처 이해
시작하게 된 계기어느 날 새벽, 운영 중이던 서버가 원인 모르게 종료되었고 로그를 열어보니 이런 게 찍혀 있었습니다.[SpringContextShutdownHook] INFO ... Application availability stateReadinessState changed from ACCEPTING_TRAFFIC to REFUSING_TRAFFIC 애플리케이션이 스스로 종료 절차에 들어가면서 "이제 트래픽을 받지 않겠다"고 상태를 바꾼 로그였는데문제는 왜 종료됐는지 알 수 없었다는 것, 그리고 서버가 죽은 걸 한참 뒤에야 알았다는 것이었습니다. 문제의식을 느끼고 모니터링 시스템 구축이 필요하다라 생각했고, 최초 모니터링 요구사항으로 아래의 2가지를 구현하였습니다.서버가 비정상 상태가 되면 즉시 알림을..
2026.09.17 -
Spring AOP의 자기 호출(Self-Invocation) 이슈
self-invocation이란self-invocation은 한 객체 안에서 자기 자신의 다른 메서드를 호출하는 걸 의미합니다.평범한 자바코드에서는 아무 문제 없지만 Spring AOP 기반 기능(@Transactional, @Async, @Cacheable 등)을 쓸 때 내부에서 호출한 메서드에는 어노테이션이 동작하지 않기 때문에 문제가 발생합니다. @Servicepublic class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } publi..
2026.09.10 -
@Async로 UX 개선하기
문제 상황이 글에서 데이터를 저장한 뒤, Gemini API로 분석하는 기능을 이벤트 기반으로 처리했습니다.이제 문제는 분석에 최소 1분의 시간이 걸린다는 것입니다. 사용자는 데이터 등록 버튼을 누르고 화면이 멈춘 채로 1분 이상의 시간을 기다려야 합니다. 로직상 에러는 없지만 사용자 입장에서 지금 로딩화면이 정상적으로 등록 중이라 멈춘 건지 아니면 무언가 에러가 발생해서 멈춘건지 알 수 없기 때문에 UX관점에서 보면 정말 좋지 않다고 할 수 있습니다. 생각해 보면 사용자가 이 시간을 기다릴 필요는 없습니다.데이터 등록 자체는 순식간에 끝나는 동작이고, 뒤이은 분석은 사용자의 입력이 끝났으니 별개의 작업으로 돌릴 수 있습니다.그래서 데이터 저장 작업이 끝나면 바로 사용자에게 응답하고 데이터 분석 작업은 ..
2026.09.09 -
Service Interface를 반드시 생성해야 하는가
서비스 레이어 클래스를 만들 때 항상 interface를 만들고 그 구현체를 만드는 방식으로 클래스를 추가했습니다.처음 스프링을 배울 때 그렇게 배워서 계속 관습적으로 사용하고 있었는데 항상 메서드를 추가할 때마다 파일 2개에 모두 추가해야 한다는사소한 귀찮음에서 하나 의문이 생겼습니다. interface를 필요한 클래스에만 쓰면 훨씬 프로젝트 관리도 쉬워지고 코드도 깔끔해질 것 같은데, 왜 구현체가 하나밖에 없는데도 꼭 interface를 만들까? 그래서 이번 기회에 한 번 알아봐야겠다라 생각했습니다. interface를 생성하는 게 왜 관습적으로 고착되었는가이에 대해서 알아보기 위해서는 스프링에서 프록시 객체를 만드는 방법에 대해 알아야 합니다. 우선 프록시 객체에 대해서 간단하게 설명하면 "대..
2026.09.07