✅ 리소스 최적화 목표OOM 방지 및 과도한 리소스 낭비 방지HPA(Horizontal Pod Autoscaler) 대응 가능GC 튜닝과 컨테이너 메모리 사용률의 균형 유지1. Spring Boot 애플리케이션 유형 분류 유형 리소스 사용 특성REST API 서버낮은 메모리, 중간 CPU웹소켓 / 실시간 처리CPU 민감, GC 튜닝 필요배치 작업메모리 집중, 짧은 수명메시지 소비자평균 CPU, 가변 메모리2. 쿠버네티스 리소스 설정 예시resources: requests: memory: "512Mi" cpu: "250m" limits: memory: "1024Mi" cpu: "500m"💡 팁requests는 서비스 안정성을 보장limits는 최대치 제한 및 OOM Kill 회..
✅ BlockingQueue란?java.util.concurrent.BlockingQueue는 생산자-소비자 패턴에 적합한 멀티스레드 안전 큐 인터페이스입니다.쓰레드 간 데이터 전달용 큐로,큐가 **비어 있을 때 take() 호출 시 대기(block)**하고,큐가 **가득 찼을 때 put() 호출 시 대기(block)**합니다.✅ 주요 메서드 특징메서드 설명 동작put(E e)큐가 꽉 차면 블로킹생산자가 데이터를 넣음take()큐가 비어있으면 블로킹소비자가 데이터를 꺼냄offer(E e)큐가 꽉 차면 false 반환비블로킹poll()큐가 비어있으면 null 반환비블로킹✅ 주요 구현체 비교구현체내부 구조특성큐 용량용도ArrayBlockingQueue배열고정 크기고정생산자/소비자 기본형LinkedBlocki..
✅ Java 큐/스택 계열 컬렉션 비교 컬렉션 특징 주요 메서드 시간 복잡도 용도 / 사용 시점Stack후입선출(LIFO) 구조push(), pop(), peek()O(1)계산기, 괄호 검사, DFSQueue (인터페이스)선입선출(FIFO) 구조offer(), poll(), peek()O(1)일반적인 작업 대기열LinkedListQueue, Deque 동시 구현add(), remove(), get() 등O(1) (양 끝 삽입/삭제)큐, 덱 용도로 유연하게 사용 가능ArrayDequeDeque 구현체, 스택/큐 대체 가능addFirst(), addLast(), pollFirst() 등O(1)Stack, Queue 대체로 우수PriorityQueue우선순위 큐 (힙 기반)offer(), poll(), pe..
✅ Java 주요 컬렉션 비교표 컬렉션 특징 주요 메서드 성능 중복 허용 정렬 보장 쓰레드 안전ArrayList배열 기반 리스트. 인덱스 접근이 빠름.get: O(1)add/remove: O(n) (중간에서)허용삽입 순서 유지❌LinkedList이중 연결 리스트 기반. 삽입/삭제 빠름get: O(n)add/remove: O(1) (앞뒤에서)허용삽입 순서 유지❌HashSet해시 기반. 순서 없음. 빠른 검색add/remove/contains: O(1)❌ 중복 불가❌❌LinkedHashSetHashSet + 삽입 순서 유지HashSet과 동일❌✔ 삽입 순서 유지❌TreeSet이진 탐색 트리 기반 (Red-Black Tree)add/remove/contains: O(log n)❌✔ 정렬됨 (자연순/비교기)..

👀 Observer 패턴 (관찰자 패턴)✅ 정의객체의 상태 변화가 있을 때, 그 변화를 관심 있는 다른 객체(옵저버)에게 자동으로 알려주는 디자인 패턴즉, **“어떤 객체를 관찰하고 있다가, 변화가 생기면 알려줘!”**라는 구조를 구현하는 방식입니다.🎯 기본 구성 요소구성요소설명Subject관찰 대상. 상태가 변경되면 옵저버들에게 알림Observer변화를 감지하고 반응하는 객체Notify()Subject가 상태 변화 시 Observer에게 알리는 메서드🧵 구조 Subject (Publisher) ├── observers[] 등록 └── 상태 변경 시 notify() 호출 ↓Observer A (Subscriber)Observer B (Subscriber)📦 예제 – 자바 코드// O..
✅ 1. CRON (크론)📌 정의유닉스/리눅스 계열 운영체제에서 사용되는 시간 기반 작업 스케줄러주기적으로 반복되는 작업을 자동으로 실행하기 위해 사용📌 동작 방식리눅스의 cron daemon이 정해진 시간에 등록된 명령을 실행설정 파일인 **crontab**을 사용하여 작업 등록📌 Cron 표현식 예시* * * * * 명령어│ │ │ │ ││ │ │ │ └── 요일 (0=일요일~6=토요일)│ │ │ └──── 월 (1~12)│ │ └────── 일 (1~31)│ └──────── 시 (0~23)└────────── 분 (0~59)📌 예시# 매일 자정에 스크립트 실행0 0 * * * /home/user/backup.sh# 매 5분마다 실행*/5 * * * * /usr/bin/python3 /h..
Thread, Coroutine, Green Thread는 모두 동시성(Concurrency) 과 병렬성(Parallelism) 을 다루기 위한 실행 단위이지만, 운영 방식과 무게감, 어디서 스케줄링되는지(OS vs 사용자) 에 따라 명확히 구분됩니다.🧵 1. Thread (쓰레드)✅ 정의OS(운영체제)가 관리하는 실행 단위하나의 프로세스 내부에서 여러 개의 작업을 동시에 처리할 수 있게 해줌무거움 (Heavyweight): 생성, 전환, 관리 비용이 큼✅ 특징각각 독립된 스택(stack) 을 가짐OS 수준에서 스케줄링되며, CPU 코어 수만큼 진짜 병렬 실행 가능하지만 context switching(문맥 교환) 비용이 큼✅ 예시Thread t1 = new Thread(() -> { System..
✅ Path Variable이란?path variable은 URL 경로의 일부로 동적인 값을 전달하기 위한 방법입니다. 예를 들어 /users/123에서 123은 id라는 path variable입니다. RESTful API에서 자원을 명확하게 식별하기 위한 URL 패턴으로 널리 사용됩니다.1. Path Variable을 사용하는 이유① RESTful한 API 설계GET /users/123: ID가 123인 사용자를 조회DELETE /products/987: ID가 987인 상품 삭제HTTP 메서드(GET, POST, PUT, DELETE)와 결합하여 자원 중심의 API 구조를 설계할 수 있습니다.② 자원의 명확한 식별URL을 통해 특정 자원을 바로 가리킵니다.예: /articles/2024, /orde..
개요Apache APISIX는 Lua로 작성된 플러그인을 통해 요청 처리를 확장할 수 있는 API 게이트웨이입니다. 이 튜토리얼에서는 APISIX Lua 플러그인을 사용하여 RESTHeart를 통해 MongoDB 데이터를 조회하고, 그 결과를 Kafka 또는 외부 REST API로 전달하는 방법을 다룹니다. RESTHeart는 MongoDB에 대한 REST 인터페이스로, HTTP 요청으로 MongoDB 데이터를 손쉽게 조회할 수 있습니다.우리는 플러그인에서 RESTHeart API를 호출하여 JSON 형식의 데이터를 얻은 뒤, 이 데이터의 일부 필드를 추출하여 (1) Kafka 브로커로 전송하거나 (2) 외부 HTTP 서비스에 POST/PUT으로 보낼 것입니다. 각 방식마다 Lua 코드 예제와 함께 필요..
✅ 예시Kafka 메시지를 기반으로 RESTHeart에 다음 작업을 수행:조회(GET) → 메시지 키로 조건 조회등록(POST) → 메시지 내용을 새 문서로 등록수정(PUT/PATCH) → 특정 키의 문서 수정삭제(DELETE) → 특정 키에 해당하는 문서 삭제🔧 1. SMT 동작 방식 요약Kafka → Kafka Connect → SMT → RESTHeart (HTTP 요청) → 응답 무시 or 활용SMT는 메시지를 변환 또는 외부 시스템 호출 가능(비동기 or 동기)요청 실패 시 DLQ로 전달하도록 설계 가능📦 2. 커스텀 SMT Maven 프로젝트 구조custom-smt-rest/├── src/│ └── main/│ └── java/│ └── com/exampl..