분류 전체보기 234

카프카 정리와 실습

개념대용량 실시간 데이터 스트리밍 플랫폼으로, 게시/구독 (pub-sub) 메시징 기능과 분산 로그 저장소의 특징을 모두 갖추고 있다.높은 처리량과 내결함성을 제공해 대규모 분산 시스템의 데이터 파이프라인에 많이 사용된다. 브로커 (Broker)Kafka 서버 프로세스 1개를 의미한다.하나의 Kafka 인스턴스가 하나의 브로커로 동작하며, 여러 브로커가 보여 Kafka 클러스터를 구성한다.일반적으로 프로덕션 환경에서는 3개 이상의 브로커로 클러스터를 구성하여 내결함성 확보를 권장한다.각 브로커는 자신만의 ID를 가지며 클러스터 내 토픽의 일부 파티션 데이터를 저장하고, 프로듀서/컨슈머로부터 오는 요청을 처리한다.클러스터에는 하나의 브로커가 "컨트롤러 (Controller) 역할을 맡는다.컨트롤러 브로커는..

Kafka 2025.04.30

리플렉션 2트

리플렉션(Reflection) 요약 정리리플렉션은런타임 시점에클래스, 메서드, 필드, 생성자 등의 메타데이터를 조회하거나 조작할 수 있는 기능이다.컴파일 시점에 뭐 하는 게 아니고,런타임에 .class 파일을 읽어서클래스의 메타정보(클래스명, 메서드, 필드, 생성자 등) 를 조사하거나 조작하는 것.그러니까 "코드를 실행 중"에,클래스 이름을 알고 있다면해당 클래스의 메서드, 필드, 생성자 등에 접근해서동적으로 메서드 호출, 객체 생성, 필드 읽기/수정 등을 할 수 있다.리플렉션이란, 실행 중인 프로그램 안에서 클래스의 구조(메타데이터)를 조사하고, 그 구조를 기반으로 메서드 호출, 필드 접근, 객체 생성을 동적으로 수행하는 기술이다.흐름상컴파일할 때는 그냥 .class 파일만 만들어진다. (메타데이터 포..

Spring 2025.04.28

전략 패턴

일반적으로 매우 복잡한 형태의 if-else 분기나 switch-case 분기를 피하기 위해 사용템플릿 메서드 패턴과 마찬가지로 프레임 워크를 확장하는 데 사용각 로직을 개별적으로 캡슐화,이를 서로 교환 가능하게 만드는 것.--> 사용하는 클라이언트와는 독립적으로 로직을 변경할 수 있음.## 전략의 생성생성 논리를 캡슐화하고 클라이언트 코드에서 생성과 관련된 세부 정보를 보호하기 위해 유형에 따라 생성 전략의 논리를 추출하여 팩터리 클래스에 넣음 전략 클래스가 stateless인 경우public class StrategyFacory { private static final Map strategies = new HashMap()};static {strategies.put("A", new Concre..

기타 2025.04.28

빈과 리플렉션

빈과 리플렉션, 그리고 스프링 동작 정리스프링이 실행될 때 (앱 시작 시점에)@Component, @Service, @Repository, @Controller 같은 걸 쭉 스캔해서클래스 메타정보(어떤 클래스, 어떤 생성자, 어떤 필드) 를 싹 읽어놓고빈으로 등록할 대상을 결정한다 (IoC Container에 등록)나중에 실제 서비스 객체를 사용할 때필요한 의존성 (ex: 레포지토리, 다른 서비스 등)을리플렉션을 이용해서 필드 주입, 생성자 주입, 메서드 주입 해준다서비스 객체는 그냥 "그게 어디서 만들어졌는지" 신경 안 쓰고 바로 쓰기만 하면 된다공식 용어 :개념설명스프링이 스캔해서 메타정보를 모으는 것컴포넌트 스캔(Component Scan)메타정보를 기반으로 객체를 관리하는 것IoC (Inversi..

Spring 2025.04.28

CGLIB 프록시

좋아, 좋아. 드디어 제대로 흥미로운 주제에 왔다."CGLIB 프록시"→ 이거 알면 스프링 AOP, 트랜잭션 처리, 심지어 @Transactional이 어떻게 작동하는지까지 진짜 제대로 이해할 수 있어.바로 시작하자.📌 1. CGLIB 프록시란?CGLIB (Code Generation Library) 는클래스를 상속받아서 프록시 객체를 만드는 라이브러리야.즉,기존 클래스를 "상속"받아서"새로운 클래스"를 "런타임에" "만들어내서""메서드를 가로채서" "부가기능을 추가"하는 방식.✅ 간단히 비교| 구분 | JDK 동적 프록시 | CGLIB 프록시 | |:---|:---| | 대상 | 인터페이스 | 클래스 | | 생성 방식 | 인터페이스 기반 프록시 생성 | 클래스를 상속해서 새로운 클래스를 생성 | | ..

GPT Archiving 2025.04.28

펌젠과 메타스페이스

1. "펌젠이 뭐야? 그럼 메타스페이스는? 그 둘의 차이에 대해 말해봐."1) 펌젠(PermGen)이란?펌젠은 Permanent Generation의 약자로, Java 7까지 JVM의 힙 메모리 영역 중 하나였습니다. 이곳은 주로 클래스 메타데이터와 정적 데이터를 저장하는 데 사용됐어요. 구체적으로:클래스 메타데이터: 클래스 정의(예: 클래스 이름, 메서드 정보, 필드 정보 등).정적 변수: static으로 선언된 변수나 상수.인턴드 문자열(String Interning): 문자열 풀에 저장된 문자열 객체(예: "hello".intern()).기타: 메서드 영역과 관련된 일부 데이터.펌젠은 힙 메모리 안에 고정된 크기로 할당되었기 때문에, 크기가 제한적이었어요. 그래서 클래스를 많이 로드하거나 정적 객..

GPT Archiving 2025.04.15

@PostMapping은 사실 @RequestMapping(method = RequestMethod.POST)의 단축 버전

@PostMapping은 사실 @RequestMapping(method = RequestMethod.POST)의 단축 버전 @PostMapping은 Spring 4.3부터 추가된 단축 어노테이션// 요거@PostMapping("/upload")// 이거랑 완전히 같음@RequestMapping(method = RequestMethod.POST, value = "/upload")  @Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented@RequestMapping(method = RequestMethod.POST)public @interface PostMapping { String[] value() default {}; ..

Java 2025.04.08

toastGrid에서 계층형 드롭다운 구현 | tui-grid, editor, 행단위 editor 옵션 동기화, 동적 select 옵션

문제 상황 → 구현 목표 → 기본 동작에서 왜 안 되는지 → 해결 방식문제 상황Toast UI Grid를 사용하여 다음과 같은 계층형 드롭다운 필드를 구성하고자 함:대분류 (mainCategory) ↓중분류 (subCategory) ↓소분류 (detailCategory)각 단계는 상위 선택값에 따라 하위 옵션이 달라져야 함.즉, 셀(row 단위)로 동적으로 select 옵션이 변경되어야 함.==기본적으로 toast Grid에서는 row 단위 select editor의 동기화가 불가능하다.==실제 구현 시도Grid 컬럼 정의에서 각 셀에 editor: { type: 'select', options: { listItems: [...] } } 형태로 설정함.하지만 문제는…기본 ToastGrid에서는 계..

JS 2025.04.02

kafka connect

Kafka와 Kafka Connect 쉽게 이해하기*Kafka Connect와 es-sink.json 쉽게 이해하기Kafka Connect란? (우체국 배달 시스템 비유)Kafka Connect는 Apache Kafka의 일부로, Kafka와 외부 시스템(예: Elasticsearch, 데이터베이스 등)을 연결해주는 "자동 배달 시스템"이에요. Kafka 자체는 메시지를 주고받는 "우체국" 같은 역할을 하지만, 그 메시지를 다른 곳으로 옮기려면 추가 작업이 필요하죠. Kafka Connect는 이 작업을 자동화해줘요.비유: Kafka가 "우체국"이라면, Kafka Connect는 "배달원"이에요. 여러분이 Python에서 Kafka로 편지(데이터)를 보내면, Kafka Connect가 그 편지를 꺼내서 ..

카테고리 없음 2025.03.16