분류 전체보기 237

지피티와 함께하는 통계쿼리 공부일기 2

ROLLUP을 이용한 부서별/직무별/성별 인원 및 급여 통계MYSQL에서는 GROUP BY ... WITH ROLLUP 구문을 이용하여, 집계 결과로 생성되는 NULL 값들을 구분하기 위해 GROUPING() 함수를 사용할 수 있다.GROUPING(col) = 1 이면 해당 행이 ROLLUP에 의해 생성된 소계/총계 행이라는 의미다. 이를 응용하여, NULL 대신 '전체' 등의 라벨을 표시하면 결과를 이해하기 쉬워진다. ROLLUP은 컬럼의 순서에 따라 점진적으로 상위 수준의 총계를 계산한다. - 컬럼 리스트를 계층적으로 줄여가며 총계를 만듦 - ex) GROUP BY A, B, C WITH ROLLUP (A, B, C): 개별 데이터. (A..

DB 2025.06.30

지피티와 함께하는 통계쿼리 공부일기

sqld 공부할땐 대충 뭐가 뭔지 기억이라도 하고 있었는데이제 기억도 안나긔ROLLUP, CUBE, GROUPING SETS 같은 거 지피티한테 물어봐서 대답이 돌아와도 눈에 안들어옴 그래서 심층리서치를 사용해 차근차근 보크숩을 해보게씀 도메인은 인사로 잡았고지피티가 직원-부서-직무의 기본 관계와 직원-근태 기록 으로 4개 테이블 잡아줬긔 -- 기존 테이블이 있다면 삭제하고 새로 생성DROP TABLE IF EXISTS attendance;DROP TABLE IF EXISTS employees;DROP TABLE IF EXISTS jobs;DROP TABLE IF EXISTS departments;-- 1) 부서 테이블CREATE TABLE departments ( dept_id INT P..

DB 2025.06.27

카프카 정리와 실습

개념대용량 실시간 데이터 스트리밍 플랫폼으로, 게시/구독 (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