Spring AI로 MCP 서버 만들기: 코드는 쉬운데 Spring Boot 3에서 안 뜹니다
Spring AI 2.0.1로 MCP 서버를 만들어 직접 붙여봤습니다. @McpTool 하나면 끝나는데, 그 전에 Jackson 3 때문에 Spring Boot 4로 올려야 했습니다.
Spring AI 2.0.1로 MCP 서버를 만들어 직접 붙여봤습니다. @McpTool 하나면 끝나는데, 그 전에 Jackson 3 때문에 Spring Boot 4로 올려야 했습니다.
아키텍처 규칙을 테스트로 만드는 라이브러리입니다. 바이트코드를 읽는 방식이 정말 더 정밀한지 궁금해서 직접 돌려봤더니, 소스에 있는 import를 못 보는 경우가 있었습니다.
JDK 24의 JEP 491로 synchronized pinning이 사라졌습니다. 지금 검색되는 가상 스레드 조언 절반이 낡았고, 진짜 병목은 커넥션 풀로 옮겨갔습니다.
Java 25 LTS의 JEP 18개 중 지금 바로 쓸 수 있는 것과 아직 프리뷰인 것을 구분했습니다. Scoped Values는 정식, 구조적 동시성은 아직 5번째 프리뷰입니다.
스타터 이름 변경부터 Jackson 3, 조용히 동작이 바뀌는 항목까지. Spring Boot 4.0에서 실제로 깨지는 것을 공식 가이드 기준으로 정리했습니다.
PKCE 의무화, Implicit·ROPC 제거 등 OAuth 2.1 변경점과 Spring Security 마이그레이션 방법을 2026년 9월 기준으로 정리했습니다.
지난 포스팅에서 우리는 JPA의 낙관적 락과 비관적 락을 통해 데이터베이스 레벨에서 동시성 문제를 해결하는 방법을 배웠습니다. 하지만 서비스의 규모가 커져 서버가 한 대가 아닌 여러 대(Scale-out)가 되는 순간, 자바의 synchronized 키워드나 단일 애플리케이션 내부의 락은 무용지물이 됩니다. 각 서버의 메모리가 독립적이기 때문입니다. 물론 데이터베이스의 비관적 락(Pessimistic Lock)을 사용하면 서버가 여러 대여도 동시성을 제어할 수 있습니다. 하지만 DB … 더 읽기
지난 포스팅에서 우리는 JPA의 꽃이라 불리는 변경 감지(Dirty Checking)에 대해 알아보았습니다. 트랜잭션 안에서 엔티티의 값을 수정하기만 하면, JPA가 알아서 UPDATE 쿼리를 날려주는 편리한 기능이었습니다. 하지만 이 변경 감지에는 치명적인 성능적 한계가 존재합니다. 바로 “대량의 데이터를 수정해야 할 때“입니다. 예를 들어, 쇼핑몰 서비스에서 “모든 상품의 가격을 10% 인상한다”라는 요구사항이 있다고 가정해 봅시다. 상품이 100만 개라면 어떻게 될까요? 변경 … 더 읽기
Spring Data JPA를 사용하다 보면 신기한 경험을 하게 됩니다. 데이터베이스에서 객체를 조회한 후, setter 메서드로 값을 변경하기만 했는데 별도로 save()나 update() 메서드를 호출하지 않아도 DB에 변경 사항이 반영되는 현상입니다. 마치 자바 컬렉션에서 객체를 꺼내 필드를 수정한 것처럼 자연스럽게 동작합니다. 또한, 같은 ID를 가진 엔티티를 두 번 조회했는데 쿼리 로그에는 SELECT 문이 한 번만 찍히는 경우도 목격하게 됩니다. 이러한 JPA의 ‘마법’ 같은 기능 … 더 읽기
현대 웹 애플리케이션에서 소셜 로그인(Social Login)은 선택이 아닌 필수 기능이 되었습니다. 사용자 입장에서는 귀찮은 회원가입 절차를 건너뛸 수 있어 편리하고, 서비스 제공자 입장에서는 비밀번호 관리의 부담을 덜고 검증된 사용자 정보를 얻을 수 있다는 확실한 이점이 있기 때문입니다. 하지만 개발자 입장에서 소셜 로그인을 처음 구현하려고 하면 마주치는 장벽이 꽤 높습니다. “OAuth 2.0 프로토콜은 무엇이고, 리다이렉트 URI는 … 더 읽기