1. 도커 이미지 빌드 최적화를 위한 Layered Jar [ 기존 Fat JAR 방식의 문제와 Layered Jar의 등장 ]기존 Fat JAR 방식의 문제점Layered Jar란 스프링 부트 애플리케이션을 위한 Docker 이미지를 만들 수 있도록 도와주는 도구이다. 표준 jar 스펙은 jar 내부에 jar 파일을 가질 수 없다. 하지만 애플리케이션을 개발하다 보면 많은 외부의 프레임워크와 라이브러리를 사용하게 되어 다른 Jar가 필요해진다. 따라서 스프링 부트는 jar 내부에 다른 jar를 가지면서 java -jar로 실행할 수 있는 "fat jar" 형식을 예전부터 지원해 왔다. 이러한 fat jar 내부 구성은 다음과 같다. 이러한 fat jar를 도커 이미지로 만드는 것은 어렵지 않다. 하지..
1. 우리집 컴퓨터는 어떻게 네이버에 연결될까?[ 인터넷 연결을 위한 네트워크 구성 ]오늘날 우리는 집에서 외부로부터 데이터를 매우 빠르게 주고 받는다. 이것은 어떻게 가능한 것일까? 우리의 홈 네트워크는 어떻게 구성되어 있는지 살펴보도록 하자.우리가 집에서 네이버를 접속하는 상황을 생각해보자. 일반적으로 컴퓨터 끼리 통신을 하기 위해서는 연결이 되어야 한다. 하지만 네이버 서버(컴퓨터)는 춘천과 같은 먼 곳에 있을 것이기에, 우리가 직접 컴퓨터 선을 연결해서 데이터를 받는 것이 불가능하다. 따라서 우리는 통신사의 도움을 받아, 통신사가 연결해둔 선을 활용해서 데이터를 주고 받아야 한다. [ 구리선을 활용한 데이터의 교환 ]컴퓨터가 가진 것은 0과 1의 전기 신호를 이해하는 능력 뿐이다. 따라서 0과 ..
1. 에러 스택 트레이스 최적화를 도와주는 -XX:+OmitStackTraceInFastThrow(사라진 예외 스택 트레이스)[ OmitStackTraceInFastThrow 옵션이란? ]-XX:+OmitStackTraceInFastThrow 옵션은 JVM이 동일한 위치에서 반복해서 예외를 던질 경우, JIT 컴파일러가 스택트레이스와 메시지가 없는 싱글턴 예외로 바꿔 던지는 최적화 기법이다. 이는 JDK 1.4부터 기본 활성화되어 있는 상태이다.예외 생성 비용의 대부분은 fillInStackTrace() 메서드로 콜스택을 훑어 프레임 배열을 만드는 작업이다. 스택이 깊으면 예외 하나당 수 ms씩 소요되곤 하는데, 같은 지점에서 뻔한 예외가 수천 번 반복되면 매번 스택을 뜨는게 낭비이다. 따라서 JIT이 ..
1. MCP 서버의 인증 과정에 대한 이해(MCP Authorization flow)[ MCP 인증의 필수 유무 ]MCP 공식 문서에 따르면, MCP 인증은 선택 사항이다. 하지만 다음의 상황에는 MCP 인증이 강하게 요구된다고 한다.user-specific한 데이터에 접근하는 경우누가 어떤 행동을 했는지에 대한 감사가 필요한 경우사용자 동의가 필요한 API에 대한 접근 권한 관리가 필요한 경우엄격한 권한 통제가 필요한 enterprise 환경을 위해 개발하는 경우사용자 단위로 rate limit 구현 혹은 사용량 트래핑이 필요한 경우 따라서 필요에 맞게 MCP 인증은 반드시 필요한 상황이 올테니, 알아둘 필요가 있다. [ MCP 인증 플로우 ]만약 MCP 인증을 도입했다면, MCP 인증 플로우는 ..
1. CLI를 위한 2가지 인증 방식, Authorization Code Flow와 Device Authorization Flow [ Authorization Code Flow와 PKCE이란? ]PKCE(Proof Key for Code Exchange, "픽시")는 OAuth 2.0의 인증 코드 가로채기 공격을 막기 위한 보안 확장이다. 기존의 OAuth 2.0의 인증 코드 플로우(Authorization Code Flow)에서는 인증 서버가 리디렉션을 통해 인증 코드를 클라이언트에 돌려주면, 클라이언트가 그 코드를 활용해 액세스 토큰으로 교환한다.이를 위해 사용자는 인증 코드를 돌려받을 본인 서버의 리디렉션 전용 URI를 인증 서버에 사전에 등록을 해두어야 한다. 그러면 인증 서버는 인증 코드를 쿼리..