캐시 스탬피드(Cache Stampede)란? 설명 및 대응 방안
·
개발메모
캐시를 왜 사용할까?서비스 트래픽이 많아질수록 데이터베이스 또는 외부 API에 대한 부하는 기하급수적으로 증가합니다. 이를 줄이기 위한 대표적인 방법이 캐시(Cache) 입니다.캐시는 자주 사용되는 데이터를 Redis와 같은 외부 저장소에 저장해두고, 같은 요청이 반복될 때 빠르게 응답할 수 있도록 돕는 기술입니다. 하지만 잘못된 캐시 전략은 오히려 대량의 트래픽을 한 번에 유발하는 “캐시 스탬피드” 문제를 일으킬 수 있습니다.캐시 스탬피드(Cache Stampede)란?캐시 스탬피드(Cache Stampede) 는 다음과 같은 상황에서 발생합니다:캐시의 유효 시간이 만료되는 순간, 다수의 요청이 동시에 백엔드(예: DB, 외부 API)로 몰려 시스템에 큰 부하를 주는 현상예시 시나리오:인기 있는 데이터..
ngrok 사용법(localhost 무료 외부 호스팅하기)
·
개발메모/기타
📌 개요가끔 외부에서 내 로컬 서버에 접근해야 할 때가 있습니다.예를 들어, Slack, Kakao, Naver, OpenAI 같은 서비스에 Webhook을 등록할 때,내 컴퓨터에서 실행 중인 서버를 외부에서 접근 가능하도록 만들어야 합니다. 이럴 때 유용한 도구가 바로 ngrok입니다.이번 글에서는 ngrok의 설치부터 실행, 주의할 점까지 빠르게 정리해보겠습니다.⚙️ ngrok 사용법1. ngrok 설치공식 사이트 접속: https://dashboard.ngrok.com/get-started/setup/windowsOS에 맞는 ngrok 다운로드 및 압축 해제ngrok.exe 실행계정 생성 및 로그인 후 Dashboard > Your Authtoken으로 이동 및 복사 ngrok 기본 config ..
[간단정리] Java에서 불변 객체(Immutable Object)란?
·
개발메모/간단정리
🔎 개요Java에서 불변 객체(Immutable Object)는 한 번 생성되면 상태(state)가 변하지 않는 객체를 말합니다.대표적으로 String, Integer, LocalDate 등 많은 표준 클래스들이 불변 객체로 설계되어 있습니다.🧩 내용✅ 불변 객체의 특징객체의 모든 필드는 final로 선언생성자에서만 값을 설정하고 이후에는 변경 불가Setter가 존재하지 않음외부에서 내부 상태를 변경할 수 없도록 방어적 복사(Defensive Copy) 사용✅ 왜 불변 객체를 사용할까?안정성(Thread-Safety)멀티스레드 환경에서 동시에 접근해도 안전합니다. 객체의 상태가 바뀌지 않으니 동기화 코드를 줄일 수 있습니다.예측 가능하고 디버깅 쉬움값이 변하지 않기 때문에 프로그램 흐름을 추적하기 더..
IntelliJ + Claude 연동하기(feat. MCP, node.js)
·
개발메모/기타
🧭 개요최근 다양한 AI 도구들이 개발자 워크플로우에 통합되며 개발 생산성을 크게 끌어올리고 있습니다. 특히 Anthropic의 Claude Desktop App은 강력한 코드 이해 및 수정 기능을 제공하며, JetBrains의 MCP(Model Context Protocol) 지원을 통해 IntelliJ와의 자연스러운 연동도 가능해졌습니다.이 글에서는 IntelliJ와 Claude Desktop App을 MCP로 연동하여, 실제 프로젝트를 분석하고 특정 메서드에 로깅을 추가하는 과정을 소개합니다. 간단한 설정만으로도 Claude에게 IntelliJ 내 코드에 대해 직접 명령을 내릴 수 있으니, 흥미로운 개발 도구 자동화에 관심 있는 분이라면 꼭 한번 시도해보시기 바랍니다. 준비물node.jsClaud..
[간단정리] Java에서 Stack, Queue 그리고 Deque
·
개발메모/간단정리
🧭 개요최근 알고리즘 문제를 풀면서 자연스럽게 Stack이나 Queue를 사용하는 일이 많아졌습니다.그 과정에서 Java에서는 이들 대신 Deque 사용을 권장한다는 내용을 접하게 되었고,처음엔 “왜 굳이?”라는 의문이 들었습니다.자세히 알아보니 생각보다 명확한 이유들이 있었고, 앞으로 실무에서도 도움이 될 것 같다는 생각이 들어이번 기회에 Stack, Queue, Deque의 차이점과 왜 Deque가 권장되는지를 정리해보려 합니다.📚 내용1. Stack 클래스의 문제점Java에서 Stack은 LIFO(후입선출) 구조를 제공하지만, 다음과 같은 단점이 존재합니다:레거시 클래스: Stack은 JDK 1.0 시절부터 존재하는 오래된 클래스입니다.Vector 기반 구현: Stack은 Vector를 상속받고..
이분 탐색(Binary Search) 알고리즘
·
JAVA/알고리즘
개요이분 탐색(Binary Search) 알고리즘 간단하게 알아보기이분 탐색이란이분 탐색은 정렬된 데이터에서 특정 값을 찾는 데 사용되는 알고리즘으로, 시간 복잡도가 O(log n)인 매우 효율적인 탐색 방법입니다. 배열을 두 부분으로 나누며 탐색 범위를 점차 좁혀가는 방식으로 동작합니다.이분 탐색의 특징정렬된 데이터에서만 사용할 수 있습니다.탐색 속도가 빠르며, 특히 데이터의 크기가 커질수록 유리합니다.순차 탐색(Linear Search)보다 훨씬 적은 연산으로 원하는 데이터를 찾을 수 있습니다.이분 탐색의 원리배열의 중간값을 기준으로 찾고자 하는 값과 비교찾는 값이 중간값보다 작으면 왼쪽으로, 크면 오른쪽으로 탐색 범위 조정탐색 범위를 반복적으로 절반으로 줄여 나가며 찾고자 하는 값을 탐색이분 탐색의..
[간단정리] RDBMS, NoSQL 특징 및 차이점
·
개발메모/간단정리
개요데이터베이스는 데이터의 체계적 저장과 관리를 위해 사용되는 시스템으로, 크게 RDBMS(관계형 데이터베이스 관리 시스템)와 NoSQL로 나뉩니다. RDBMS는 테이블 간의 관계를 기반으로 하는 구조화된 데이터 관리 시스템으로, 데이터 무결성과 ACID 속성을 중요시합니다. 반면, NoSQL은 비정형 데이터와 대규모 데이터 처리에 적합한 분산형 데이터베이스로, 문서, 키-값, 그래프, 열 기반 모델을 포함합니다.각각의 DBMS는 사용 목적과 데이터 유형에 따라 적절한 선택이 필요합니다.1. RDBMS관계형 데이터베이스 관리 시스템(RDBMS)은 1970년대에 에드가 F. 커드에 의해 제안되었습니다. 이 시스템은 데이터 간의 관계를 테이블 형식으로 관리하며, SQL을 사용하여 데이터를 처리합니다. 테이블..
[간단정리] 객체 지향 프로그래밍 SOLID 원칙
·
개발메모/간단정리
개요SOLID는 객체 지향 프로그래밍 및 설계에서 다섯 가지 기본 원칙을 의미합니다.이 원칙들은 코드의 유지보수성과 확장성을 높이는 데 도움을 줍니다.각 원칙과 간단한 예제를 함께 살펴보겠습니다. 1. 단일 책임 원칙 (Single Responsibility Principle - SRP)2. 개방-폐쇄 원칙 (Open-Closed Principle - OCP)3. 리스코프 치환 원칙 (Liskov Substitution Principle - LSP)4. 인터페이스 분리 원칙 (Interface Segregation Principle - ISP)5. 의존성 역전 원칙 (Dependency Inversion Principle - DIP)1. 단일 책임 원칙 (Single Responsibility Princ..