본문 바로가기

전체 글23

기수성 실행계획 인덱스 데이터베이스 인덱스를 설계할 때 가장 자주 등장하지만 막상 설명하기는 애매한 개념이 있다. 바로 기수성이다. 기수성은 컬럼이 얼마나 다양한 값을 가지는지를 나타내는 지표이며, 실행계획 수립 과정에서 매우 중요한 기준으로 사용된다.이 글에서는 이론적인 설명을 넘어 동일한 구조의 테이블에 기수성만 다른 데이터를 삽입한 뒤 실제 MySQL 실행계획이 어떻게 달라지는지 직접 확인해본다.기수성 데이터 준비와 실험 환경실험을 위해 두 개의 테이블을 준비했다. 두 테이블 모두 컬럼 구조는 동일하며 city, country 두 개의 컬럼만 존재한다. 그리고 country 컬럼에 단일 인덱스를 생성했다.각 테이블에는 10,000건의 데이터가 삽입되어 있으며 city 컬럼은 두 테이블 모두 동일하다. city1부터 cit.. 2026. 2. 11.
Reflections JPA DDL 검증 데이터베이스 형상 관리를 위해 Flyway나 Liquibase 같은 검증된 도구를 사용하는 것이 일반적이다. 하지만 모든 상황에서 반드시 무거운 도구가 필요한 것은 아니다. 현재 프로젝트의 구조가 단순하고 검증 대상이 명확하다면 직접 구현하는 선택지도 충분히 의미가 있다.이 글에서는 DDL.sql과 JPA Entity를 비교해 형상 불일치를 검증하는 작은 도구를 직접 구현한 과정을 정리한다. 핵심은 SQL 파싱보다는 리플렉션을 활용해 JPA Entity 메타 정보를 어떻게 수집하고 검증에 활용할 수 있는지에 있다.Reflections 기반 JPA 엔티티 스캔자바 표준 리플렉션 API인 java.lang.reflect만으로도 클래스와 필드 정보를 가져올 수는 있다. 하지만 클래스 패스를 순회하고, 특정 어.. 2026. 2. 11.
TestContainers 테스트 환경 구축 테스트를 작성하다 보면 단순한 단위 테스트를 넘어 실제 서버나 데이터베이스와 유사한 환경에서 테스트를 수행해야 하는 경우가 자주 발생한다. 예를 들어 데이터베이스 연동 테스트의 경우 로컬 DB를 직접 연결하거나 H2 인메모리 데이터베이스, 혹은 docker-compose를 활용하는 방법을 고려하게 된다. 각각의 방식은 장단점이 분명하며 테스트 환경과 운영 환경 간의 차이가 문제로 이어지는 경우도 적지 않다.이러한 문제를 해결하기 위한 대안으로 TestContainers는 테스트 실행 시점에 실제 컨테이너 기반의 인프라를 자동으로 구성하고, 테스트 종료와 함께 정리해 주는 방식으로 테스트 신뢰성과 재현성을 동시에 확보할 수 있도록 돕는다.TestContainers 개요TestContainers는 Docke.. 2026. 2. 11.
Spring Test Context 재사용 전략 스프링 기반 애플리케이션에서 테스트를 작성하다 보면 테스트 실행 중 컨텍스트가 반복적으로 로드되는 상황을 종종 마주하게 된다. 기본적으로 스프링 테스트 프레임워크는 동일한 설정을 사용하는 테스트에 대해 컨텍스트를 재사용하도록 설계되어 있다. 그러나 설정 매개변수가 조금이라도 달라지면 새로운 컨텍스트를 다시 로드하게 되며, 이 과정은 시간과 메모리 측면에서 상당한 비용을 발생시킨다.Spring Test Context 캐싱Spring Test Context는 컨텍스트를 구성하는 매개변수 조합을 기준으로 캐시 여부를 판단한다. 이 조합에는 로드되는 설정 클래스, 프로파일, 활성화된 빈 정의, 테스트 어노테이션의 종류 등이 포함된다. 즉, 테스트 코드에서 사용하는 설정이 완전히 동일해야만 하나의 컨텍스트를 재사.. 2026. 2. 10.
Fixture Monkey 테스트 설정 전략 테스트 코드를 작성하다 보면 항상 반복되는 고민이 하나 있다. “이 테스트에 사용할 객체를 어떻게 만들 것인가”이다. 무작위 값이 필요한 테스트는 많지만, 그때마다 객체를 직접 생성하는 것은 생각보다 많은 비용을 요구한다. 이러한 문제를 해결하기 위해 Fixture Monkey를 전역 설정으로 구성하고, 테스트 코드에서 일관되게 사용하는 전략을 정리해본다.Fixture Monkey 테스트 설정무작위 데이터를 사용하는 테스트는 한두 개의 테스트 클래스에만 국한되지 않는다. 값 객체 테스트, 도메인 테스트, 정책 테스트 등 여러 테스트 전반에서 동일한 생성 규칙이 반복된다. 따라서 Fixture Monkey를 테스트 전역에서 재사용 가능한 형태로 구성하는 것이 좋다.아래 설정 클래스는 Fixture Monk.. 2026. 2. 10.
Fixture Monkey 테스트 자동화 테스트 코드를 작성하다 보면 가장 먼저 마주치는 피로 요소 중 하나가 테스트 데이터 생성이다. 필드가 많아질수록 생성자는 길어지고, 빌더 패턴을 사용하더라도 테스트의 핵심과는 무관한 코드가 늘어난다. 이러한 반복 작업을 줄이기 위해 등장한 도구가 Fixture Monkey다.Fixture Monkey 개요Fixture Monkey는 테스트에서 사용할 객체를 무작위이면서도 유효한 값으로 자동 생성해주는 라이브러리다. 단순히 랜덤 값을 채워주는 수준이 아니라, 객체 구조를 분석하고 필드 타입에 맞는 값을 생성하며, 사용자가 원하는 조건을 추가로 적용할 수 있다.테스트 코드에서 중요한 것은 객체를 어떻게 만들었는지가 아니라 그 객체로 무엇을 검증하느냐다. 하지만 현실에서는 객체 생성 코드가 테스트 본문보다 길.. 2026. 2. 9.