1. 운영 환경을 위한 실용적인 로그 레벨(Practical Log Level)[ 실용적인 로그 레벨(Practical Log Level) ]먼저 개인적으로 서비스를 운영하면서 느꼈던 로그 레벨에 대한 부분을 표로 정리하면 다음과 같다. 사용 환경상황DEBUG개발개발 중에 문제를 추적하고 진단하는 데 사용됨INFO개발, 운영서비스를 운영하고 상황을 이해하는 데 사용됨WARN개발, 운영잠재적인 문제나 주의가 필요한 상황을 알리기 위해 사용됨ERROR개발, 운영시스템 오류나 예외 상황을 기록하기 위해 사용됨 관련 부분을 보다 자세하 살펴보면 다음과 같다. DEBUG개발을 진행하면서 문제를 추적하고 진단하기 위한 개발 및 테스트용 로그주로 로직 검증, 버그 추적, 데이터 흐름 파악을 위해 사용되므로, 운영 ..
1. MCP 서버 프로토콜, SSE에서 Streamable HTTP 방식으로의 대변경 [ MCP 프로토콜과 JSON-RPC 2.0 데이터 포맷 ]이전 포스팅에서 설명하였듯, MCP(Modal Context Protocol)는 Antropic(엔트로픽)이 2024년 11월 26일 처음 제안되어 오늘날 가장 널리 사용되고 인기있는 AI 프로토콜 중 하나이다. MCP와 같은 AI 프로토콜은 다양한 AI 구성 요소 간에 정보를 주고 받기 위해 탄생하게 되었다.구체적으로, MCP는 클라이언트와 서버 간 메시지 교환 형식으로 JSON-RPC 2.0을 사용한다. JSON-RPC 2.0은 RPC(Remote Procedure Call) 방식의 프로토콜 중 하나로, JSON을 메시지 포맷으로 사용하는 경량의 비동기 통신..
1. Gradle 의존성 분석을 통해 NoClassDefFoundError, NoSuchFieldError 오류 트러블슈팅 & 해결하기[ Gradle의 의존성 분석을 위한 Task들 ]Gradle의 dependencies TaskGradle은 의존성 분석을 위한 다양한 Taks들을 제공하는데, 크게 2가지를 활용하게 된다.dependencies모든 의존성과 그 트리 구조를 출력하는 Task전체적인 의존성을 파악하고, 특정 의존성이 '왜 추가되었는지' 확인하는 데 용이함dependencyInsight특정 의존성에 대한 상세 정보를 출력하는 Task특정 의존성에 대해 '왜 이 버전이 결정되었는지' 확인하는 데 용이함 먼저 dependencies Task를 실행해보자. 다음과 같은 명령어로 실행할 수 있다....
1. 올바른 카프카 컨슈머(KafkaConsumer) 설정 가이드와 내부 동작 분석[ group.protocol ]설정에 대한 설명group.protocol은 consumer가 사용할 그룹 프로토콜을 지정하는 설정으로 현재 classic과 consumer 두 가지 값을 지원한다. 해당 값을 consumer로 설정하면, consumer 그룹 프로토콜이 사용되며 다른 값을 설정하거나 생략하면 classic 그룹 프로토콜이 사용된다.classic 그룹 프로토콜은 Kafka 0.9 이후 기본 제공되어온 전통적인 Kafka consumer group 관리 방식이다. session.timeout.ms, heartbeat.interval.ms 등이 기존 방식 그대로 작동하며 consumer coordinator가 리..
1. COW(CopyOnWrite) 기법과 이를 활용하는 자바와 레디스의 예시들(COW on Java and Redis)[ COW(CopyOnWrite) 기법이란? ]Copy-on-write(CoW, 복사 시 쓰기)는 컴퓨터 프로그래밍과 운영체제에서 데이터 복사를 최적화하기 위해 사용되는 전략이다. COW 방식은 데이터를 복사할 때 전체 데이터를 즉시 복제하는 대신, 기존 데이터에 대한 새로운 참조만 생성해두고, 원본이나 복사본 중 어느 하나가 데이터를 수정하려고 할 때 실제 복사를 진행한다.예를 들어 부모 프로세스 A가 존재하는 상황에서 fork() 메서드를 통해 자식 프로세스 B를 생성했다고 하자. 이때 두 프로세스가 공유하는 페이지들이 다음과 같이 존재할 수 있다. COW 기법은 두 프로세스가 동..