모든 글
총 15개의 글
-
집계용 중간 결과 테이블을 Global Temporary Table로 바꾸기
집계 중간 결과를 일반 테이블 하나에 담고 매 실행 앞에서 DELETE로 비우면 비용이 세 군데서 나옵니다. Global Temporary Table이 그중 무엇을 없애고, redo 감소는 왜 조건부인지 Oracle 12c 문서를 근거로 정리합니다.
-
Spring과 Jackson에서 필드 부재와 명시적 null 구분하기
수정 API에서 필드에 null을 넣는 것과 필드를 아예 빼는 것은 다릅니다. 서버가 필드 부재와 명시적 null을 구분하지 못하면 null 규칙을 정할 수 없습니다. Jackson의 동작과 패치 본문 형식을 로컬에서 실행해 확인했습니다.
-
Claude Code에서 Kotlin LSP가 참조를 못 찾을 때: Gradle 프로젝트 루트 확인하기
Kotlin LSP 프로세스가 실행 중이어도 Gradle 프로젝트 루트가 틀리면 findReferences가 다른 파일의 사용처는 찾지 못하고 선언 위치만 반환할 수 있습니다. 서브디렉토리 프로젝트에서 원인을 구분하고 workspaceFolder로 교정하는 방법을 정리합니다.
-
버스 노선 공간 데이터에서 정류장 간 구간 형상 만들기 (Linear Referencing)
버스 노선의 선형과 정류장 좌표로 정류장 간 구간 형상을 만드는 과정을 설명합니다. Linear Referencing으로 정류장을 Measure로 바꾸고 두 Measure 사이를 추출합니다.
-
억울한 EXISTS, 정말 IN보다 느릴까?
EXISTS를 IN으로 바꾸면 빨라진다는 통념을 따져봅니다. 성능 개선과 원인 입증은 다른 문제라는 것, 그리고 동등한 서브쿼리 IN과 EXISTS가 현대 MySQL에서 같은 최적화 후보가 되는 것을 로컬 실측으로 확인합니다.
-
JPA에서 유니크한 관계에 유니크키를 걸었는데 Duplicate entry가 나는 이유: Hibernate flush 순서
컬렉션을 clear()로 비우고 새로 채우는 교체 패턴에 유니크키를 얹으면 Duplicate entry가 납니다. Hibernate가 삭제를 마지막에 실행하는 flush 순서를 공식 문서와 소스를 근거로 정리하고, 유니크키를 유지하면서 교체하는 방법을 다룹니다.
-
클로드는 프롬프트 캐싱을 어떻게 할까: Claude Code 사용량이 빨리 소진되는 이유
Claude Code는 매 요청마다 전체 컨텍스트를 다시 전송합니다. 서버는 요청의 앞부분이 이전과 정확히 일치할 때만 재계산을 생략합니다. 공식 문서를 근거로, 이 일치가 무너지는 조건과 그때의 비용을 정리합니다.
-
데이터베이스 정규화 (6): 보이스-코드 정규형(BCNF), 모든 결정자를 후보키로
보이스-코드 정규형(BCNF)을 다룹니다. 3NF가 남긴 빈틈, 모든 결정자가 후보키여야 한다는 조건, 후보키가 겹치는 구조에서 생기는 중복을 예시와 함께 정리합니다.
-
데이터베이스 정규화 (5): 제3정규형(3NF), 이행적 함수적 종속 제거
제3정규형(3NF)을 다룹니다. 이행적 함수적 종속의 의미, Codd의 1971년 원문 정의, 그리고 키가 아닌 속성을 거쳐 생기는 중복을 제거하는 방법을 예시와 함께 정리합니다.
-
JPA 테스트가 CI에서 OOM으로 죽은 이유: Spring 컨텍스트 캐시 키와 H2
@DataJpaTest마다 서로 다른 H2 DB 이름을 주면 Spring 컨텍스트 캐시가 무력화되어 CI에서 OutOfMemoryError가 납니다. 원인인 컨텍스트 캐시 키(MergedContextConfiguration)의 동작과 해결 방법을 공식 문서, 소스를 근거로 정리합니다.
-
데이터베이스 정규화 (4): 제2정규형(2NF), 함수적 종속과 부분 함수적 종속 제거
제2정규형(2NF)을 다룹니다. 2NF의 토대인 함수적 종속성을 완전 함수적 종속, 부분 함수적 종속으로 나누어 설명하고, 복합키에서 생기는 부분 함수적 종속을 어떻게 제거하는지 예시와 함께 정리합니다.
-
데이터베이스 정규화 (3): 제1정규형(1NF), 원자값과 반복 그룹
제1정규형(1NF)을 자세히 다룹니다. 원자값의 의미와 흔한 오해, 반복 그룹을 분리하는 방법, 그리고 1NF가 아직 보장하지 못하는 것까지 예시와 함께 정리합니다.
-
데이터베이스 정규화 (2): 이상현상과 함수적 종속성, 왜 정규화가 필요한가
삽입, 갱신, 삭제 이상현상을 예시로 설명하고 MariaDB에서 직접 재현해, 데이터베이스가 막아주는 이상현상과 조용히 지나가는 이상현상을 구분합니다. 세 단계 분류를 컬럼 세 개에 저장한 실제 계약 테이블에서 갱신 이상이 어떻게 해마다 복제됐는지도 함께 다룹니다.
-
데이터베이스 정규화 (1): 정규화 전에, 데이터 무결성과 키부터
정규화를 둘러싼 흔한 오해 세 가지에서 출발해, 정규형에 들어가기 전 토대가 되는 개념을 정리합니다. 데이터 무결성의 종류(개체, 참조, 도메인)와 키의 계층(슈퍼키, 후보키, 자연키, 대리키), 그리고 키가 제약조건으로 동작하는 방식을 설명합니다.
-
JPA N+1 문제와 세 가지 해결법 비교 (@EntityGraph / JPQL / QueryDSL)
JPA에서 N+1 문제를 해결하는 @EntityGraph, JPQL fetch join, QueryDSL을 검증 시점, 안전성, 적합한 상황 기준으로 비교합니다. 언제 무엇을 쓸지 정리했습니다.