AI가 일할 환경을 설계하는 하네스 엔지니어링

프롬프트만 잘 쓰는 것으로는 부족하다. AI가 필요한 문맥을 찾고, 안전한 범위에서 도구를 쓰고, 결과를 스스로 검증하도록 일하는 환경 자체를 설계해야 한다.먼저 가장 단순한 상황을 생각해 보자. AI에게 이렇게 요청했다고 하자. 회원가입 API에 이메일 중복 검사를 추가해 ...
AI가 일할 환경을 설계하는 하네스 엔지니어링 자세히 보기

이중화된 배치·스케줄러 중복 실행 막기 (ShedLock / SKIP LOCKED)

서비스를 이중화(HA)하면 가용성은 올라가지만, 스케줄러가 붙은 배치는 골치가 생긴다.같은 @Scheduled 잡이 두 인스턴스에서 동시에 깨어나 같은 일을 두 번 해버리는 것이다.정산이 두 번 돌거나, 같은 푸시가 두 번 나가거나, 집계가 중복으로 쌓인다.동시성 제어를 위한 DB...
이중화된 배치·스케줄러 중복 실행 막기 (ShedLock / SKIP LOCKED) 자세히 보기

동시성 제어를 위한 DB 락 (JPA 낙관적·비관적 락)

재고 차감, 포인트 적립, 쿠폰 발급처럼 여러 요청이 같은 데이터를 동시에 갱신하는 로직은 한 번쯤 동시성 문제로 사고가 난다.재고가 1개 남았는데 두 요청이 동시에 들어와 둘 다 차감에 성공해 버리는 식이다.단일 인스턴스라면 synchronized로 막을 수 있을 것 같지만, 서...
동시성 제어를 위한 DB 락 (JPA 낙관적·비관적 락) 자세히 보기

JMeter로 부하 테스트하기

배포 전에 “트래픽이 몰리면 어디까지 버틸까”를 미리 확인할 때 부하 테스트를 한다. 대표 도구인 JMeter의 기능과 활용법, 그리고 요즘 쓰이는 대안 툴을 정리한다.1. 부하 테스트 목적기능 테스트가 “되느냐”를 본다면, 부하 테스트는 “얼마나 견디느냐”를 본다. 확인하려는...
JMeter로 부하 테스트하기 자세히 보기

Prometheus + Grafana + cAdvisor 연결과 모니터링 활용 방법

Spring 서비스의 Actuator 메트릭을 Prometheus에 연결하고, Grafana에서 조회하는 기본 연결을 구성해봤다.이 글은 연결 과정과 함께, 이후 확장할 수 있는 메트릭·대시보드·알림 활용 방법을 정리한다.1. 도입 배경서비스 상태를 로그만으로 확인하면 메모리 ...
Prometheus + Grafana + cAdvisor 연결과 모니터링 활용 방법 자세히 보기

간헐적 API 지연, 원인 탐색 과정

어떤 서비스의 API가 평소엔 수십 ms로 정상 응답하다가, 가끔씩 6~12초씩 느려지는 현상이 있었다.인프라를 깊게 아는 편이 아니라 “어디서부터 봐야 하나”가 막막했는데,구간을 하나씩 잘라가며 의심 범위를 좁히는 절차로 접근하니 결국 원인에 도달할 수 있었다.문제 상황 현...
간헐적 API 지연, 원인 탐색 과정 자세히 보기

레거시 .NET을 Spring Boot로 전환하기 위한 AI Rules & Skills 적용기

사내 레거시 시스템(ASP.NET WebForms)을 Spring Boot로 전환하는 프로젝트를 진행하면서,AI 코딩 에이전트(Claude Code)를 그냥 쓰지 않고 “규칙(Rules)과 스킬(Skills)” 을 사용한 경험을 정리한다.배경전환 대상은 십수 년 된 ASP.NE...
레거시 .NET을 Spring Boot로 전환하기 위한 AI Rules & Skills 적용기 자세히 보기

MSA에서 JWT 인증·권한 전파하기 (게이트웨이 검증 + @PreAuthorize)

앞 글 Spring Security 6 + JWT 은 단일 서비스(모놀리식) 기준이었다.하지만 서비스가 여러 개로 쪼개진 MSA에서는 “토큰을 어디서 검증하고, 권한을 어떻게 각 서비스까지 전달할 것인가”가 새로운 문제가 된다.이 글은 실제 사이드 프로젝트(주식 MSA)에서 쓴...
MSA에서 JWT 인증·권한 전파하기 (게이트웨이 검증 + @PreAuthorize) 자세히 보기

QA Agent Server, AI 기반 웹 테스트 자동화

반복적인 웹 화면 테스트를 자동화해보고 싶어서, “이 페이지 로그인 테스트해줘” 같은 자연어 요청을 받으면 AI가 직접 브라우저를 열고 입력·클릭하며 테스트한 뒤 결과를 정리해주는 서버를 만들어봤다.프로젝트 레파지토리: https://github.com/GeonDev/auto-...
QA Agent Server, AI 기반 웹 테스트 자동화 자세히 보기

Git Hook과 Gemini를 활용한 자동 코드 리뷰 시스템 구축

Spring 프로젝트에서 코드 품질을 자동으로 관리하기 위해 Git Hook과 Gemini AI를 활용한 자동 코드 리뷰 시스템을 구축했다. 커밋 전 자동으로 AI가 코드를 분석하고, 문제가 있으면 커밋을 차단하며, 상세한 리포트를 생성하는 시스템이다.1. 배경 및 문제 상황1.1...
Git Hook과 Gemini를 활용한 자동 코드 리뷰 시스템 구축 자세히 보기

Docker Desktop 대체를 위한 Rancher Desktop 세팅(mac + apache )

회사 프로젝트에서 개발을 할 때 맥북에 있는 내장 아파치에 도메인 세팅을 한 후 로컬 개발을 진행하고 있다. 문제는 맥북의 OS가 버전 업 될 때마다 내장 아파치의 설정이 초기화 되어 다시 세팅해야 한다는 번거로움이 있었다.이를 조금 개선해보고자 도커를 도입해보려고 했으나 기업에서...
Docker Desktop 대체를 위한 Rancher Desktop 세팅(mac + apache ) 자세히 보기

RestTemplate 설정으로 인한 쿠키 경고 메세지 수정 (ResponseProcessCookies : Invalid cookie)

최근 하나로 되어 있던 DB를 서비스 별로 분리하고 서비스간 연관이 있는 기능을 사용할때는 API를 통하여 데이터를 공유 하는 방식으로 서비스를 개선하고 있다.server to server 호출은 기존에도 사용하던 방식이지만 서비스 별로 요청 대기시간이나 비동기 호출을 요구하는 경...
RestTemplate 설정으로 인한 쿠키 경고 메세지 수정 (ResponseProcessCookies : Invalid cookie) 자세히 보기

스프링 트랜젝션 수동으로 적용하기 (PlatformTransactionManager)

트랜젝션이 필요한 로직이 있을 때는 대부분 선언적 트랜젝션인 @Transactional을 사용했다. Spring AOP 기반의프록시 방식이라 클래스나 메소드에 간단히 붙일 수 있고, 일반적인 CRUD 흐름에서는 충분히 편했다. 그런데 인앱결제 로직을 수정하면서 선언적 트랜젝션만으로...
스프링 트랜젝션 수동으로 적용하기 (PlatformTransactionManager) 자세히 보기