Spring Cloud Config Server가 정적 페이지를 응답하지 않은 이유

Config Server에 간단한 관리용 페이지를 하나 붙이려 했는데, /tools/properties-manager.html을 요청하자 HTML 대신 JSON 설정 응답이 내려왔어요. Spring REST Docs로 API 문서까지 깔끔하게 정리해뒀는데, 정작 그 문서를 보여줄 페이지도 열리지 않는 상황이었습니다. 처음엔 정적 리소스 경로 설정 문제인 줄 알았습니다. classpath:/static/에…

AI를 활용한 테스트 코드 작성 핵심 원칙 3가지

AI에게 테스트를 맡겼더니 커버리지는 80%가 넘는데, 정작 버그는 잡지 못했던 경험이 있으신가요? AI 코드 어시스턴트는 테스트 작성에 분명히 도움이 됩니다. 반복적인 코드도 금방 작성해주고 요청에 따라 다양한 케이스에 대해 테스트 코드를 작성해줄 수 있습니다. 하지만 “AI가 테스트를 써줬으니 됐다”는 생각으로…

MCP 동작 원리: “PR #1 리뷰해줘” 한 마디 뒤에서 벌어지는 일

MCP란 무엇인가 최근에 AI 코딩 툴을 사용하면서 MCP라는 단어를 자주 접하게 되었습니다. MCP는 Model Context Protocol의 약자입니다. 마지막에 프로토콜이 붙은 것을 보면 프로토콜의 한 종류임을 알 수 있습니다. 프로토콜은 기기 간 데이터를 원활하게 주고받기 위해 정의된 통신 규약 및 약속입니다….

(byte)167이 -89로 표시되는 이유

Java 언어로 TCP 소켓을 통해 IP 정보를 바이트 배열로 전송하는 로직을 구현하고 있었다. 숫자 167을 바이트 배열에 담아 전송하기 위해서 (byte)167 이렇게 강제 형 변환 과정을 거쳤다. 변환된 값을 출력해서 어떻게 전송되는지 확인해보려고 했는데 -89 라는 값이 표시되었다. 왜 내가…

ORM N+1 문제, 왜 발생하고 어떻게 해결할까?

ORM(Object-Relational Mapping) 라이브러리를 사용한 코드를 작성하면서 발생할 수 있는 N+1 문제를 이해하고, N+1 문제 발생 시 조치 방법에 대해 알아보자. ORM이란? 엔티티 객체와 관계형 데이터베이스를 맵핑하여 애플리케이션이 SQL을 스스로 생성하여 실행할 수 있도록 돕는 기술 및 라이브러리를 말한다. Java를 예로…

Spring Cloud Config 이해하기

Spring Cloud Config 동작 방식과 고려해야 할 점

Spring Cloud Config 동작 방식 MSA 구조의 프로젝트를 진행하다 보면 많은 수의 애플리케이션(마이크로 서비스)이 만들어집니다. 만약 10개의 애플리케이션이 동일하게 사용하는 공통 외부 설정이 있다면 유지 보수가 힘들어집니다. 코드가 중복될 때와 비슷한 문제가 발생합니다. 공통 외부 설정 값을 변경해야 한다면 모든…

application.yaml 합치기

application.yaml 하나로 관리하기

Spring Boot 애플리케이션을 개발하다 보면 외부 설정 파일(application.yaml)을 관리하는 방법에 대해 고민하게 됩니다. 애플리케이션이 실행되는 환경에 따라서 달라지는 값들이 있습니다. 대표적으로 DBMS를 제공하는 서버의 IP, Port는 개발 환경과 운영 환경에서 각각 다른 값을 가집니다. 그래서 애플리케이션이 실행되는 환경에 따라서 다른…

@SpringBootTest 컨텍스트 캐싱

@SpringBootTest 테스트 실행 시간 줄이기

컨텍스트 캐싱 스프링부트를 사용해 개발된 애플리케이션은 구동할 때 애플리케이션 컨텍스트와 필요한 것들을 미리 준비하는 시간이 소요됩니다. Junit5 를 사용하여 통합 테스트를 할 때도 역시 테스트용 애플리케이션 컨텍스트를 준비하는 과정이 필요합니다. 실행해야 할 테스트가 10개 있을 때 각 테스트가 실행 될…