본문 바로가기

320x100

전체 글

(41)
자바에서 코드를 조작하는 방법: 바이트코드, 리플렉션, 프록시, 애노테이션 프로세서 스프링이 어떻게 @Transactional이 붙은 메서드만 트랜잭션으로 감싸는지, 롬복은 어떻게 내가 쓰지도 않은 getter를 만들어 주는지, 하이버네이트는 어떻게 아직 조회하지 않은 엔티티를 필드에 넣어 두는지. 전부 "내가 쓴 코드"만 봐서는 설명이 되지 않는 동작이다.이런 일들은 자바가 코드를 조작할 수 있는 지점을 열어 두었기 때문에 가능하다. 조작할 수 있는 지점은 크게 네 군데이고, 각각 개입하는 시점이 다르다. 컴파일 타임, 클래스 로딩 시점, 그리고 런타임이다. 이 글은 그 네 가지를 노트 순서대로 정리한다.JVM과 바이트코드먼저 조작 대상이 되는 바이트코드가 어디에 있는지부터 짚는다.자바 개발 환경은 JDK 안에 JRE가 있고, JRE 안에 JVM이 있는 구조다. JDK는 컴파일러(ja..
카프카 핵심 개념 정리 카프카를 공부하면서 정리한 내용이다. 메시지 큐의 기본 동작부터 토픽, 컨슈머 그룹, 파티션, 레플리케이션까지 핵심 개념을 순서대로 짚고, 공부하면서 생겼던 의문("메시지는 언제 삭제되나", "컨슈머는 왜 그룹으로 묶나")도 함께 풀어본다. 카프카와 메시지 큐카프카는 대규모 데이터 처리를 할 수 있는 메시지 큐이다.메시지 큐는 큐 형태로 데이터를 일시적으로 저장하는 임시 저장소다. 요청을 받는 쪽과 실제로 처리하는 쪽을 분리해서, 데이터를 비동기적으로 처리할 수 있게 해준다.카프카를 사용했을 때의 처리 흐름은 이렇다.요청 수신 → Producer가 메시지 큐에 메시지 전달 → 카프카가 메시지 보관 → 메시지를 넣자마자 사용자에게는 성공 응답 → Consumer 서버가 큐에서 메시지를 꺼내 실제 작..
주식 추천 MCP 프로젝트 - 주말 자동 복기와 규칙 갱신 루프 지난 편에서 리포트를 GitHub private repo에 자동으로 쌓는 파이프라인까지 만들었다. 픽봇은 국장 장전과 장후, 미장 장전과 장후로 하루 네 번 돌면서 리포트를 남기고, 나는 폰으로 그걸 확인한다.그런데 여기에도 빈 구멍이 있었다. 리포트가 쌓이기만 한다는 것이다. "지난주 픽이 실제로 맞았나"를 아무도 보지 않았다. 데이터는 있는데 피드백이 없으니 픽봇은 같은 실수를 계속 반복할 수 있는 구조였다.이번 편은 쌓인 리포트로 주말에 자동으로 성적을 매기고, 그 결과를 다음 주 픽에 반영하는 작업이다. 닫힌 루프 설계목표는 사람 손을 거치지 않고 한 바퀴가 도는 것이다.일요일 → 지난주 픽 채점 → 규칙 도출 → 데일리 픽봇에 자동 주입 → 다음 주 반영 → (반복)이 루프를 ..
주식 추천 MCP 프로젝트 - GitHub 리포트 자동 발행 파이프라인 지난 편까지 만든 픽봇은 클로드 데스크탑의 스케줄 기능으로 매일 두 번 돌아간다. 오후 4시에 한국장, 오후 8시에 미국장 분석이 자동으로 실행되고 수급과 차트, 뉴스를 종합한 리포트가 나온다.그런데 문제가 하나 있었다. 리포트가 로컬 PC의 채팅창에만 남는다. 밖에서 폰으로 "오늘 픽 뭐였지?"를 확인할 방법이 없었다. 분석은 자동인데 확인은 PC 앞에 앉아야 하는 반쪽짜리 자동화였던 셈이다.이번 편은 이 마지막 구간을 잇는 작업이다. 코드보다는 파이프라인 설계와 시행착오 위주의 글이다. 발행 방식 선택처음 떠올린 건 무료 서버를 하나 띄워서 MD 파일을 보여주는 것이었다. 스케줄이 MD를 만들면 누군가 그걸 읽어서 DB에 넣거나 웹으로 렌더링하는 그림이다. 그런데 요구사항을 다시 적어 보니 이랬다.보..
주식 추천 mcp 프로젝트 - 미국장 하이브리드 + 국내 수급 확장 1편: 데이터 수집 mcp 구현2편: 한국투자증권 API 기반 시세/수급 데이터 수집 MCP 서버 구현3편: 미국주식 시세/수급 데이터 수집 MCP 서버 구현그런데 실제로 돌려서 결과를 받아 보니 이상했다. LLM이 뽑아준 미국 종목의 현재가가 그 시각 실시간 시세와 달랐다. 장이 열려 있는데도 어제 종가를 기준으로 판단하고 있었던 것이다.원인을 찾다가, 한투 API에 해외주식 시세가 이미 있다는 걸 알게 됐다. 3편에서는 미국장을 yfinance로만 짜느라 아예 후보에 안 넣었던 부분이다.쓰는 김에 내용을 조금 더 보완할 방법을 찾다 보니, 국내 쪽도 다시 보게 됐다. 한투 국내 API 74개 중에 내가 쓰고 있던 건 4개였다.항목3편 시점지금미국장 도구4개5개한국장 도구2개4개미국장 시세yfinanc..
주식 추천 mcp 프로젝트 - 미국주식 시세/수급 데이터 수집 MCP 서버 구현 이전 글에서 한국투자증권 Open API 기반으로 국내 주식의 시세·수급을 수집하는 Market Data MCP 서버를 구현했었다.1편: 데이터 수집 mcp 구현2편: 한국투자증권 API 기반 시세/수급 데이터 수집 MCP 서버 구현이번 글은 같은 구조를 미국주식으로 확장한 mcp-us-market-data 서버 구현기이다.전체 플로우에서의 위치는 여전히 1~3단계다. 한국장만 보다가 분석 대상을 미국장까지 넓힌 것이다.단계내용상태1투자 소스 수입✅2해당 소스 정보 수집✅3차트 및 투자 데이터 분석✅ (이번 글: 미국장 확장)4주식 추천 및 기록⬜5누적 데이터로 실제 성공률 반영⬜시리즈를 관통하는 원칙도 그대로 가져간다."MCP 서버는 데이터만 수집하고, 판단·해석은 LLM에게 위임한다."이번엔 API ..
Spring WebFlux와 리액티브 프로그래밍 정리 스프링에서 외부 API 통신을 공부하다가 WebClient를 만났다. RestTemplate과 뭐가 다른지 찾아보니 "RestTemplate은 동기, WebClient는 비동기도 가능"이라는 설명이 나오는데, 이 한 줄을 제대로 이해하려면 리액티브 프로그래밍과 WebFlux까지 내려가야 했다. 왜 스레드를 늘리는 대신 대기를 없애려 하는지, 왜 WebFlux에서는 JDBC/JPA를 못 쓰는지, Mono/Flux는 어떻게 다뤄야 하는지. 그 과정에서 생긴 질문들을 순서대로 따라가며 정리해보고자 한다. RestTemplate vs WebClient둘 다 외부 API를 호출하는 HTTP 클라이언트다. 차이는 호출한 스레드가 어떻게 되느냐에 있다.RestTemplate: 동기 호출이다. 요청을 보내고 응답이 올..
@Transactional — 예외를 잡았는데도 롤백되는 이유 @Transactional의 커밋과 롤백은 "예외가 났는가"로 결정되지 않는다. 예외를 잡았는데도 롤백되고, 예외가 났는데도 커밋되는 경우가 있다. 이 글은 회원가입 예제에서 코드를 직접 고쳐가며, 사람이 실제로 겪는 순서 그대로 그 규칙을 발견해 나간다.실험 구조회원가입이 회원(MEMBER)을 저장(본 작업)한 뒤 가입 이력(SIGNUP_HISTORY)을 저장하는 구조다.@Service@RequiredArgsConstructorpublic class SignupService { private final MemberRepository memberRepository; private final SignupHistoryService historyService; // 케이스별로 이 메서드를 조금..

728x90