개요Claude Code를 쓰다 보면 세 가지 설정 파일을 마주치게 됩니다.CLAUDE.md ➡️ 매 세션마다 자동으로 로드되는 프로젝트 규칙.claude/commands/ ➡️ 내가 직접 /명령어로 호출하는 커맨드.claude/skills/ ➡️ Claude가 대화 흐름을 보고 자동으로 감지해서 쓰는 스킬처음에는 Commands와 Skills이 둘 다 슬래시 커맨드로 호출되니까 "그냥 같은 거 아닌가?" 싶었습니다. 실제로 원래는 별개 시스템이었는데 현재는 통합되어 둘 다 같은 /명령어 인터페이스로 작동합니다. 오늘은 이 차이점을 직접 포트폴리오 프로젝트를 만들면서 겪은 경험을 바탕으로 정리하고자 합니다. CommandsCommands : 내가 직접 호출 하는 것위치claude/commands/명령어이..
개요로컬 LLM, 어떤 모델을 골라야 할까❓로컬 LLM 시대가 본격화되면서 가장 먼저 부딪히는 질문이 있습니다. "내 장비에서 어떤 모델이 실제로 돌아갈까?" 막상 모델을 고르려 하면 선택지가 너무 많습니다. 어떤 모델이 내 환경에서 실제로 잘 돌아가는지는 직접 받아보기 전까지 알기가 어렵습니다. 스펙 표를 봐도 감이 잘 안 오고, 받아보면 생각보다 느리거나 메모리가 부족해서 실행이 안 되기도 합니다. 여기서 이 문제를 해결해주는 기능이 최근에 등장했습니다. 바로 "llmfit"입니다. 본 글에서는 이 llmfit에 대한 기능을 정리하고자 합니다. llmfit이란❓ GitHub - AlexsJones/llmfit: Hundreds of models & providers. One command to f..
개요프로젝트를 시작할 때 엔티티의 날짜 타입으로 뭘 선언할지 고민한 적이 있을 것입니다. 주변 코드나 레퍼런스를 보면 LocalDateTime, ZonedDateTime을 쓰는 경우가 대부분입니다. 그런데 Instant를 알고 난 뒤 한 가지 의문이 생겼습니다. "LocalDateTime이 정말 맞는 선택인가?" 본 글에서는 두 타입의 차이와 어떤 상황에서 무엇을 선택해야 하는지 정리합니다. LocalDateTime이란❓LocalDateTime now = LocalDateTime.now(); LocalDateTime은 날짜와 시간 정보를 가지고 있지만 타임존(TimeZone) 정보는 없는 타입입니다. 이름에 Local이 붙은 이유가 여기 있습니다. "내가 있는 곳의 시간" 을 표현하는 타입이지만,..
개요개인 프로젝트의 마이페이지에서 경로 검색 기능을 개발하던 중, Tmap 지오코딩 API 호출 시 400 Bad Request 에러가 발생했습니다. POI 검색 결과를 그대로 API에 전달하면서 특수문자 인코딩 문제와 POI명/주소 혼용 문제가 원인이었습니다. 본 글에서는 이 문제의 원인 분석과 UX를 고려한 해결 과정을 정리하고자 합니다.🚨 문제 상황사용자가 출발지와 도착지를 입력하고 경로를 검색했을 때, 티맵 지오코딩 API 호출 시 백엔드 서버에서 아래와 같은 에러 로그와 함께 경로 탐색에 실패하는 현상이 발생했습니다.org.springframework.web.reactive.function.client.WebClientResponseException$BadRequest: 400 Bad R..