
Claude.ai는 OpenAI의 ChatGPT와 유사한 대화형 AI 모델로, 강력한 성능을 제공하지만 사용량에는 제한이 존재한다. 특히, 사용량은 단순한 메시지 개수가 아닌 토큰(token) 단위로 계산되며, 이를 효율적으로 관리하지 않으면 빠르게 제한에 도달할 수 있다. 본 글에서는 Claude.ai의 사용량이 어떻게 계산되는지 분석하고, 이를 최소화하여 최대한 효율적으로 활용하는 방법을 소개한다.본 글은 레딧의 관련 글을 참고하여 작성되었다.1. Claude.ai 사용량은 어떻게 계산되는가?Claude.ai의 사용량 제한은 "메시지 개수"가 아니라 "토큰 수"를 기준으로 한다. 즉, 하나의 메시지가 포함하는 텍스트의 길이, 시스템 프롬프트, 첨부 파일 등의 요소가 사용량을 결정한다.주요 토큰 소비 ..

이 문서는 codemcp의 공식 README(https://github.com/ezyang/codemcp)와 실제 설치 경험을 기반으로 작성되었습니다.1. codemcp란?codemcp는 Claude Desktop과 함께 동작하는 AI 기반 페어 프로그래밍 도구입니다. 이를 통해 코드 작성, 버그 수정, 리팩토링을 자동화할 수 있으며, Git을 활용하여 변경 사항을 관리할 수 있습니다.주요 기능Claude에게 코드 수정 요청 가능Git을 통해 변경 사항 자동 커밋 및 롤백 지원코드 포매팅 및 테스트 자동 실행 (codemcp.toml 설정)IDE에 종속되지 않으며 다양한 개발 환경에서 활용 가능2. 설치 방법2.1 uv 패키지 매니저 설치codemcp는 uv 패키지 매니저를 사용합니다. 아래 명령어를 실..

1. Docker Compose를 이용한 OpenGrok 설치OpenGrok을 Docker Compose를 통해 간편하게 설치하고 실행할 수 있습니다.1.1 Docker Compose 파일 작성먼저, docker-compose.yml 파일을 생성하고 다음 내용을 추가합니다.version: "3"services: opengrok: container_name: opengrok image: opengrok/docker:latest ports: - "9999:8080" environment: SYNC_PERIOD_MINUTES: "60" volumes: - ~/opengrok/src:/opengrok/src - ~/opengrok/etc:/open..

최근 회사에서 세금계산서 발급 및 홈택스 데이터 스크래핑 업무를 자동화하기 위한 전자세금계산서 연동 프로젝트를 진행하게 되었습니다.기존에는 홈택스에 접속해 일일이 문서를 다운로드하고 입력하는 과정이 번거롭고 오류가 잦았는데요. 이를 해결하기 위해 다양한 API 제공 업체를 검토했고, 바로빌 API를 선택하게 되었습니다.이번 포스팅에서는 바로빌 API를 선택하게 된 이유부터 전자세금계산서 연동 및 홈택스 스크래핑 구현 과정을 소개합니다.이 글은 바로빌 API 서비스의 공식 제공 샘플 코드 기반으로 작성되었으며, 개발 경험을 바탕으로 보완과 개선을 포함하였습니다.1. 바로빌 선택 이유1. 검증된 API 서비스2009년부터 전자세금계산서 API를 개발 및 제공한 바로빌은 국세청 표준인증을 획득하였으며 특히 자..
Spring WebFlux 기본 개념Spring WebFlux는 Spring 5에서 도입된 리액티브 웹 프레임워크로, 비동기 논블로킹 방식으로 HTTP 요청과 응답을 처리합니다. 이는 높은 동시성 처리를 지원하며, 특히 리액티브 스트림 기반의 데이터 흐름을 다루기에 적합합니다. WebFlux는 Reactor를 기반으로 하여 Mono와 Flux를 사용해 비동기적으로 스트림을 처리합니다.1. Spring MVC와 WebFlux의 차이점Spring MVC: 전통적인 동기, 블로킹 방식으로 각 요청은 별도의 스레드에서 처리됩니다. 요청이 많아지면 스레드 수가 증가하고, 자원 낭비가 발생할 수 있습니다.Spring WebFlux: 비동기, 논블로킹 방식으로 요청을 처리합니다. 이벤트 루프와 리액티브 스트림을 활용..
map과 flatMap의 차이점mapmap은 기존 데이터를 다른 형태로 동기적으로 변환합니다. 단순히 값을 변환하거나 가공할 때 사용됩니다.반환되는 타입은 Mono나 Flux가 아닌 일반 객체여야 합니다.flatMapflatMap은 기존 데이터를 다른 형태로 변환하면서, 변환 결과가 Mono 또는 Flux 같은 비동기 타입일 때 사용합니다.주로 비동기 연산이 필요할 때 사용되며, Mono>와 같은 중첩된 비동기 타입이 아닌 Mono로 결과를 평평하게 "펼쳐"줍니다.예제 1: map을 사용한 동기적 변환import reactor.core.publisher.Monofun main() { val userMono = Mono.just("john.doe@example.com") .map { em..