지금까지 개발했던 서비스에서는 캐시를 적용할 일이 생각보다 많지 않았다. 덕분에 Redis도 이름에 비해 제대로 사용해본 경험은 많지 않았는데, 최근 동일 요청의 중복 처리를 막거나 카운터 값을 관리하면서 조금씩 사용하게됐다. 아무래도 애플리케이션 내에서 동시성을 처리하다보니, Redis에 직접 명령어를 날리기보다는 애플리케이션에서 RedisTemplate을 사용하는 방식이었고, 코드를 작성할 때는 setIfAbsent(), add(), increment() 같은 메서드를 호출하면 되니 큰 어려움은 없었지만 막상 Redis에서 어떤 명령어가 실행되는지 보려니 SETNX, SADD, HSETNX 같은 이름들이 매번 낯설었다. 생각난 김에 Redis에서 제공하는 자료구조부터 살펴보고, 최근에 사용했거나 그 ..
전체 글
서버는 꺼지지 않아요개발 공부를 처음 시작했을 당시, 주변 취준생 친구들 사이에서 거의 바이블처럼 여겨지던 강의가 있었는데, 바로 김영한님의 인프런 JPA 강의였다. 당시 나를 포함해 개발자로서 취준을 해나가던 주변 친구들 거의 대부분이 들었던 것 같다. 강의 예제를 따라 JPA 엔티티를 만들고, 그 객체를 그대로 도메인 객체로도 쓰고 서비스에서도 쓰고 뭣도 하고.. 당시엔 이 방식이 너무나 당연했다. 사실 JPA 엔티티와 도메인 엔티티를 분리할 수 있다는 생각 자체를 못 했던것 같기도 하다. (애초에 도메인 엔티티라는 개념조차도 생소했다) 이후, 헥사고날 아키텍처와 클린 아키텍처처럼 도메인과 인프라의 경계를 강조하는 아키텍처를 유행하면서, 해당 기조에 편승해 JPA 엔티티와 도메인 객체를 별도로 분리하는 구조를 택하기 시..
회사에서 B2B로 계약한 AI 툴 덕분에 한동안 Claude 모델을 토큰 제한 없이 마음껏 사용할 수 있었다. 그야말로 무한 AI 열차. 하지만 행복한 시절은 그리 오래가지 않았다. 요금제 개편으로 인해 기존 무제한 플랜이 사라지고 월별 토큰 제한이 생겼는데, 처음에는 사용량에 대한 감이 없다 보니 이전처럼 최고 수준 모델(Claude Opus 5)로 박아두고 별생각 없이 사용했다. 그리고 사용한지 2~3일만에 월 버짓의 50%를 사용해버리고 말았다.이대로는 남은 한 달을 버틸 수 없을 것 같아 부랴부랴 토큰을 아낄 방법을 찾아보기 시작했다. 관련 정보를 대략적으로 훑어보니, 이게 단순히 입력 문장을 줄이는 문제만은 아니었다. 모델에게 어떤 정보를 보여줄지, 반복되는 맥락을 어떻게 재사용할지, 작업에 ..
요즘 AI 관련 용어를 보다보면 피로할 때가 있다. 하루 밤 자고나면 온갖 AI 관련 용어들이 새롭게 튀어나오는데,(AI Agent, Agentic Coding, Context Engineering, Harness Engineering 등등...) 어떤 용어는 실제 기술적 구분처럼 보이기도 하고, 어떤 용어는 기존에 하던 일을 조금 더 트렌디하게 포장한 말처럼 보이기도 한다. AI 춘추전국시대에서 기술적 용어들이 온전히 정립되지 않은 상태이니 이런 상황이 이해가 가지만, 솔직한 마음으론 "이거 그냥 프롬프트 잘 쓰고, 지침서 잘 넣자는 말 아닌가?" 하는 생각이 들었다. 물론 완전히 틀린 말은 아닐 수 있다. 많은 AI 엔지니어링 기법은 결국 모델에게 더 좋은 정보를 주고, 더 좋은 제약을 주는 문제로 ..
멱등키라는 개념을 처음 접했을 때는 대략 “POST 요청에서 중복 요청을 막기 위해 사용하는 값” 정도로 이해하고 있었다. 이를테면 결제 요청을 보냈는데 네트워크 문제로 응답을 받지 못했다거나, 사용자가 버튼을 따닥 눌러 동일한 요청이 여러 번 들어온다거나 하는 상황에서 동일한 멱등키를 함께 보내면 서버가 동일한 요청을 한 번만 처리할 수 있도록 해주는 장치 정도로 생각했다.틀린 이해는 아니지만, 최근에 팀의 채용 과정에서 사전과제를 리뷰하고 면접을 진행하면서 이 설명만으로는 조금 부족하다는 생각이 들었다. 사전과제에는 금전과 관련된 특정 행위에 대해 중복 처리를 방어하는 요구사항이 있었고, 많은 분들이 멱등키를 사용해 구현해주셨다. 그런데 실제 면접에서 “멱등키는 어디에서 언제 발급하나요?”, “지금 ..
지금껏 카프카를 단순 비동기 워커처럼 써왔던 입장으로써, 대략적인 개념이나 동작방식은 이해하고 있더라도 그 이상 깊이 가려하면 이전에 학습했던 지식들이 꼬여서 매번 헷갈린다. - 카프카는 큐인가 로그인가?- 컨슈머 그룹 내에서 메시지는 어떻게 처리되는가?- 파티션 수와 성능은 항상 비례하는가?- 타 메시지큐(이를테면 RabbitMQ)와의 근본적인 차이점은 무엇인가? 이번 글에선 단순 암기보단 동작 방식에 초점을 맞춰 카프카란 친구를 조금 더 이해해보고자 한다. 카프카란? Apache Kafka is an open-source, distributed event streaming platform used for high-performance data pipelines, streaming analytics, ..
6월 25부로 Gemini CLI가 오픈되었다. 그것도 무료로!무료 라이센스에선 Gemini 2.5 pro 모델과 백만개 토큰, 하루 1000개의 요청이 가능하다. 개인이 사용하기에 절대 무리 없는 수준의 모델에, 토큰 개수와 하루 요청 제한까지 사실상 하루종일 쓰는게 아니라면 체감하기 힘든 제한으로 보인다. 후딱 설치해보자. 설치하기설치법은 Gemini CLI Github을 보고 따라하면 쉽게 가능하다. 20 이상의 Node.js 버전이 필요하니 이 부분만 최신으로 업데이트해준다. (Node는 깔아놓고 안쓴지 너무 오래되어서 엄청 옛 버전이었다)brew upgrade node24.3.0 버전 준비 갈 완료다. 명령어 실행을 간단하게 gemini 커맨드로 하고 싶으니 아래 커맨드로 설치해준다.npm i..
환경JDK 11Spring Boot 2.6.8 문제상황Spring은 Profile별로 다른 프로퍼티 값을 주입하기 위해 yml 혹은 properties 파일을 사용한다. 일반적으로 application-{profile}.yml 파일을 profile 마다 만들어 따로따로 값들을 관리하거나, 혹은 단일의 application.yml 파일을 두고 Multi-Document file 형식으로 값들을 관리한다. 3개의 하이픈("-")을 경계로 두고 spring.config.activate.on-profile 옵션을 통해 특정 profile에서만 프로퍼티 값들이 사용되도록 하는 방식이다. 아래는 문제 발생 당시 yml 파일의 예시이다.// applcation-local.ymlmy-property: local-pro..