[Infra, AI] AI를 활용한 모니터링 개선 및 자동화 (2) - Grafana MCP와 Claude Code로 에러 분석 자동화
·
Infra
1. 배경 및 목표이전 글에서 AI가 로그를 읽고 판단할 수 있도록 로그 구조를 JSON 형태로 바꿨습니다. [Spring] AI를 활용한 모니터링 개선 및 자동화 (1) - AI가 판단할 수 있는 로그로 리팩토링1. 배경 및 목표1) AI를 활용한 모니터링 개선 및 자동화혼자 백엔드를 운영하다 보면 에러가 발생했을 때 로그를 찾고, 요청 흐름을 따라가고, 원인을 좁히는데 생각보다 많은 시간이 듭니다. 직5g-0.tistory.com 이번에는 에러가 발생하면 AI가 직접 로그와 코드를 확인하고, 원인과 근거, 수정 방향을 Slack으로 보내주는것이 목표입니다.지난 글에서도 언급했지만, AI에게는 코드 수정, 배포, 데이터 변경 권한을 주지 않습니다. 아직은 모든 과정을 자동화하기에는 리스크가 있다고 생각..
[Spring] AI를 활용한 모니터링 개선 및 자동화 (1) - AI가 판단할 수 있는 로그로 리팩토링
·
Backend/Spring
1. 배경 및 목표1) AI를 활용한 모니터링 개선 및 자동화혼자 백엔드를 운영하다 보면 에러가 발생했을 때 로그를 찾고, 요청 흐름을 따라가고, 원인을 좁히는데 생각보다 많은 시간이 듭니다. 직접 판단을 하며 놓치는 부분도 분명히 생기고요. 그래서 AI의 도움을 받아 트러블 슈팅을 더 효과적으로 할 수 있도록 개선해 보고자 했습니다.최종 목표는 다음과 같습니다.에러(ERROR) 발생 시 웹훅으로 AI에게 에러 정보 전달AI는 에러가 발생한 로그와 코드를 확인해 원인과 수정 방향을 정리개발자는 Slack 알림으로 AI가 정리한 내용을 받아 검토하고 결정수정까지 자동화하는 방향도 생각해보았지만, 아직 모든 과정을 자동화하기에는 위험이 크다고 판단했습니다. 필요 이상의 작업이 들어가거나, 의도된 것들을 수정..
운영 장애에서 오픈소스 기여까지, OpenFeign/querydsl 기여
·
회고
1. 배경1) 오픈소스 기여 도전 배경이전 글에서 JPA 양방향 @OneToOne으로 인한 Q클래스 데드락 장애를 다뤘습니다. [Spring] QueryDSL 특정 API 타임아웃 - JPA 양방향 @OneToOne으로 인한 클래스 초기화 데드락, Class Initializa1. 문제1) 증상운영 중 특정 도메인의 API만 응답이 없어지는 문제가 발생했습니다.타임아웃이 발생했고, 컨테이너를 재시작하면 문제가 해결됐지만 불규칙한 주기로 문제가 재발했습니다.자세5g-0.tistory.com이 문제는 원인을 파악하기 특히 힘들었습니다.예외 발생X, 스레드가 조용히 멈춤에러 로그도 없음DB, CPU, 메모리도 정상불규칙하게 재발, 에러상황 재현 어려움문제를 파악하고 나서 QueryDSL 이슈를 찾아보니, 이..
[Spring] QueryDSL 특정 API 타임아웃 - JPA 양방향 @OneToOne으로 인한 클래스 초기화 데드락, Class Initialization Monitor
·
TroubleShooting
1. 문제1) 증상운영 중 특정 도메인의 API만 응답이 없어지는 문제가 발생했습니다.타임아웃이 발생했고, 컨테이너를 재시작하면 문제가 해결됐지만 불규칙한 주기로 문제가 재발했습니다.자세한 문제상황은 다음과 같습니다.DB 정상, CPU/메모리도 정상Slow query log에도 안잡힘개발서버에서도 간헐적으로 동일 증상 발생운영 상태에서 발생했기 때문에 원인 파악보다 빠른 복구가 우선이었고, 재시작 후 어떤 상황에서 재발하는지 판단이 어려워 에러 확인이 더욱 어려웠습니다.2) 원인 후보가장 먼저 DB 커넥션 풀 고갈을 의심했습니다.풀 고갈이라면 모든 API가 동시에 막혀야하는데 특정 도메인 API만 문제가 생겼습니다.DB를 직접 확인해도 문제가 없었고, 살아있는 트랜잭션도 없었습니다.두번째로는 무거운 쿼리..
[Spring] 테스트 코드 도입기 - JUnit과 Mockito를 활용한 단위 테스트
·
Backend/Spring
1. 배경 및 목표1) 배경저는 스타트업에서 혼자 백엔드를 개발하고 있습니다.스타트업 특성상 빠른 기능 구현과 잦은 명세 변경에 따른 리팩토링이 반복되는 환경입니다.안정성을 중요하게 생각하지만, 혼자 개발하는 만큼 놓치는 케이스가 생기지 않을까 불안함이 있었고,이를 개발 서버에서 배포 전 최대한 많은 테스트를 해보는 것으로 달래곤 했습니다.최근 Claude Code를 도입하면서 작업속도가 향상되었고, 확보된 시간을 안정성에 투자할 수 있겠다고 판단했습니다.테스트 코드를 도입하면 다음과 같은 이점을 얻을 수 있습니다.작성한 코드가 의도한대로 동작하는지 검증 가능리팩토링 등 코드 수정 후에도 기능이 정상적으로 동작하는지 검증할 수 있음테스트 코드를 통해 해당 기능이 어떤 목적을 지니고, 어떻게 동작하는지 문..
[Spring] PageImpl 역직렬화를 위한 Wrapper 클래스, PageImpl Redis 캐싱
·
Backend/Spring
1. 배경 및 목표1) PageImpl Wrapper 클래스의 필요성지금까지 사내 프로젝트에서 PageImpl을 상속받은 RestPageImpl 이라는 클래스를 사용해 페이징을 처리해왔습니다.@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)public RestPageImpl(@JsonProperty("content") List content, ...) 개인 프로젝트때는 PageImpl로도 페이징을 처리했었는데 굳이 이런 클래스를 만들어 사용하는 이유가 궁금해져 알아보았습니다. PageImpl은 직렬화(객체 -> JSON)은 가능하지만 역직렬화(JSON -> 객체)가 불가능합니다.이를 해결하기 위해 Jackson이 역직렬화에 사용할 수 있는 생성자를 추가한 Wrappe..
[Infra] AWS EC2 scheduled reboot, docker container 갑자기 모두 내려갔을때
·
TroubleShooting
문제갑자기 Docker 컨테이너가 모두 내려가있었습니다...AWS 인스턴스 하나를 운영 보조용으로 사용하고 있었습니다.평소처럼 로그를 확인하러 그라파나에 접속했고 모두 내려가있었습니다. 일단 제가 내린적이 없기 때문에 시스템이 종료된적이 있나 확인해보았습니다.사용된 명령어는 다음과 같습니다.# 서버의 재부팅 기록을 확인last reboot 확인결과 2026-02-02 04:56에 서버가 재시작 되었다는걸 알 수 있었습니다.AWS에 들어가서 확인해보았습니다. 설명에 Scheduled Reboot를 보고 AWS에서 13:00(KST)에 인스턴스 재부팅 예약이 있었다는걸 알 수 있었습니다.서버에서 확인한 부팅 시각은 04:56이었고, 서버 시간이 UTC 기준이라면 KST로는 13:56입니다.AWS 콘솔의 sc..
[OS] 프로세스 개념, 프로세스 스케줄링
·
CS/운영체제
1. 프로세스 개요1) 프로세스란?프로세스란 실행 중인 프로그램입니다.여기서 실행 중인 프로그램이란 디스크에 저장된 파일과 같은 수동적인 존재가 아닌,실행할 명령어를 지정하는 프로그램 카운터와 관련 자원의 집합을 가진 능동적인 존재를 나타냅니다.즉, 정확히 말하면 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 됩니다.프로세스(process): 실행 중인 프로그램. 운영체제로부터 CPU, 메모리, 파일 등의 자원을 할당받아 작업을 실행프로세스의 활동 상태는 프로그램 카운터 값과 프로세서 레지스터의 내용으로 나타냅니다.프로세스의 메모리 배치는 다음과 같습니다. 함수가 호출될 때마다 함수 매개변수, 지역 변수 및 복귀 주소를 포함하는 활성화 레코드(activation record)가 스택에 push됩니..