AI 에이전트를 안정적으로 제어하기 위한 구조: 하네스(Harness)와 컨텍스트 엔지니어링AI 에이전트(Agent) 기술을 도입할 때 자주 겪는 문제 중 하나는 에이전트가 예상치 못한 비정상 루프에 빠지거나, 정제되지 않은 결과를 출력해 시스템이 제어 불능 상태가 되는 점입니다.에이전트가 높은 자율성을 바탕으로 문제를 해결하는 과정에서 생기는 불확실성을 통제하기 위해 '하네스(Harness)'와 '컨텍스트 엔지니어링(Context Engineering)' 개념이 중요하게 다루어집니다. 두 개념의 역할과 차이, 그리고 기술적 발전 맥락을 정리합니다.1. AI 에이전트 시스템의 발전 과정AI 기술은 모델의 응답 정밀도를 높이는 단계에서 시작해, 자율적으로 실행하고 이를 통제하는 방향으로 진화했습니다.Pla..
외부 파트너 시스템에 상태를 통지하는 기능을 붙이면서 마주친 문제와, 그걸 @TransactionalEventListener로 풀어가는 과정에서 밟은 함정들을 정리했습니다. Spring Boot 3.5 / Java 21 / PostgreSQL 환경입니다.문제 상황파트너사와 연동하는 리포트 발급 기능이 있습니다. 흐름은 단순합니다.사용자가 리포트를 신청하면 → 파트너사에 "진행 중" 통지산출이 완료되면 → 파트너사에 "완료" 통지처음 작성한 코드는 이런 모양이었습니다.@Transactionalpublic void completeReport(String reportNo) { // ... 리포트 산출 결과 처리 ... // 파트너사 통지 externalApiClient.sendStatus(pa..
들어가기 전최근 리뷰하던 코드에서 System.exit(1)을 마주쳤습니다. 애플리케이션 코드 아무 곳에서나 이렇게 프로세스를 강제 종료시키는 게 정말 괜찮은 방법인지 궁금해서, 왜 지양해야 하는지와 그럼에도 직접 호출하는 게 맞는 경우까지 정리해봤습니다.결론부터 요약하면 이렇습니다.System.exit()은 JVM 전체를 그 자리에서 끝내버리는 명령입니다. 호출부가 코드 곳곳에 흩어질수록 나중에 "왜 죽었는지" 추적하기 어렵고, 테스트도 사실상 불가능해집니다.Spring Boot처럼 프레임워크 위에서 동작하는 앱이라면, 예외를 던져서 프레임워크의 실패 처리 경로(SpringApplication)에 종료를 맡기는 편이 진단 정보와 정리 과정 양쪽 모두에서 더 낫습니다.그렇다고 System.exit()이 ..
환경 : Mac / Vultr 클라우드 / 게이트웨이 서버 경유 내부망 구성상황Vultr 클라우드에서 아래와 같은 서버 구성을 쓰고 있었습니다.내 Mac ↓ (인터넷)gateway.mydevcloud.net ← 공인 IP, 외부 접근 가능 (SSH A) ↓ (내부 사설 네트워크)prod-server.internal.mydevcloud.net ← 사설 IP만 있음 (SSH B)터미널에서는 SSH A에 접속한 다음 SSH B로 hop하면 내부 서버에 들어갈 수 있었습니다.그런데 SFTP 클라이언트로 파일을 올리려고 하니 무한 로딩이 걸렸습니다.왜 SFTP가 바로 안 될까?터미널에서 SSH A → SSH B 수동 hop은 되지만,SFTP 클라이언트는 Mac에서 SSH B로 직접 TCP 연결을 ..
문제 상황머천트 정보를 LinkPrice API에서 받아 DB에 업데이트하는 스케줄러가 있었다. 업데이트 시 replaceToEntity() 메서드를 사용했다.// MerchantDTO.javapublic Merchant replaceToEntity() { this.siteName = this.siteName.replaceAll("\'", "\''").replaceAll("\"", "\\\"") + "' "; this.checkComment = this.checkComment.replaceAll("\'", "\''").replaceAll("\"", "\\\"") + "' "; this.adviceComment = this.adviceComment.replaceAll("\'", ..
문제 상황LinkPrice API를 OpenFeign으로 호출하고, 응답을 String으로 받아 직접 Jackson으로 파싱하는 구조였다.@FeignClient(name = "LinkPriceMerchantAllOpenFeign", url = "${linkprice.host}", configuration = LinkPriceConfiguration.class)public interface LinkPriceClient { @GetMapping("linkprice.url") String searchMerchantDetailAll();}public List selectMerchantDetailAll() throws Exception { ObjectMapper objectM..
- Total
- Today
- Yesterday
- dockerfile
- SQL
- 에러
- Java
- 스케줄러
- Linux
- JPA
- ncp
- mybatis
- 이슈해결
- spring
- hazelcast
- docker
- 데이터적합성
- 트랜잭션
- spring batch
- Lock
- 네이버 클라우드
- springcloud
- Spring JPA
- SpringBoot
- OpenFeign
- MySQL
- 도커
- 동시성제어
- LocalDate
- 알고리즘
- Quartz
- 컨테이너
- Cache
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
