DB 33

[QueryDSL] QueryDSL을 사용하는 이유

QueryDSL 💡QueryDSLhttp://querydsl.com/static/querydsl/3.6.3/reference/ko-KR/html_single/#d0e81 Querydsl - 레퍼런스 문서본 절에서는 SQL 모듈의 쿼라 타입 생성과 쿼리 기능을 설명한다. com.mysema.query.sql.Configuration 클래스를 이용해서 설정하며, Configuration 클래스는 생성자 인자로 Querydsl SQL Dialect를 취한다. 예를 들어querydsl.com 💡QueryDSL을 사용하는 이유Query를 문자가 아니라 Java 코드로 작성할 수 있게 도와준다.Java 코드로 Query를 작성하기 때문에 문법 오류를 컴파일 시점에 발견할 수 있다.문법이 SQL과 비슷하기 때문에..

[DB] Redis

RedisRedis는 “Remote Dictionary Server”의 줄임말로, 데이터를 메모리(RAM)에 저장하는 초고속 키-값 저장소입니다.일반적인 DB는 디스크에 데이터를 저장하기 때문에 읽고 쓰는 속도가 느릴 수 있지만, Redis는 메모리에 저장되기 때문에 속도가 엄청나게 빠릅니다. 그래서 흔히 “캐시(cache)” 용도로 많이 사용됩니다.구성데이터는 Key - Value 형태로 저장된다.→ user:1 = {"name": "Alice", "age": 20}Value는 다양한 자료형(데이터 구조)을 저장할 수 있다.String (문자 하나)List (순서 있는 목록)Set (중복 없는 목록)Sorted Set (점수 순 정렬된 목록 → 랭킹에 사용!)Hash (자바 Map이랑 비슷) 왜 Re..

DB 2025.04.17

[JPA] ddl-auto를 썼는데 컬럼이 삭제되지 않는 이유

문제 상황BaseTimeEntity라는 공통 상속 클래스에 id 필드가 존재Schedule이라는 엔티티 클래스에도 별도로 id 필드 존재 (이름이 다르게 설정됨)두 클래스 모두 @Id 필드 존재 → Hibernate가 각각을 다른 컬럼으로 인식이후 BaseTimeEntity의 id 필드를 제거했는데, DB에는 여전히 해당 컬럼이 존재하는 문제 발생왜 삭제가 안되지..?원인 분석🔎 Hibernate는 DDL "삭제"까지 책임지지 않는다Spring Boot에서는 보통 이렇게 ddl-auto를 설정합니다spring: jpa: hibernate: ddl-auto: update엔티티만 바꿔도 자동으로 테이블과 컬럼을 생성해준다💡 하지만, ddl-auto: update의 한계기능지원 여부새로운 ..

DB/JPA 2025.04.12

[JPA] 더티 체킹 (Dirty Checking)

더티 체킹 (Dirty Checking)JPA의 더티 체킹(Dirty Checking)이란 엔티티 객체의 변경 사항을 자동으로 감지하여 변경된 데이터만 DB에 반영하는 기능을 말합니다.이 덕분에 개발자가 update SQL을 직접 작성하지 않아도 JPA가 자동으로 변경을 감지하고 업데이트를 수행합니다.Spring Data JPA .save() 방식@Transactionalpublic void modifyClassInfo(Long classId, ClassRequest.ModifyRequestData requestData) { ClassEntity classEntity = classRepository.findById(classId).get(); // 엔티티 수정 classEntity..

DB/JPA 2025.03.13

[JPA] 기본키 생성 전략 (추가설명) (업데이트중...)

IDENTITY 전략1. 특징 - 영속성 컨텍스트에 저장되기 전에 데이터베이스에 INSERT를 실행해야 한다.JPA에서는 객체를 persist() 하면 영속성 컨텍스트(Entity Manager 내부의 1차 캐시)에 먼저 저장되지만, IDENTITY 전략을 사용하면 기본키(ID)를 생성하기 위해 즉시 데이터베이스에 INSERT 쿼리를 실행해야 한다는 제약이 있다.IDENTITY 전략은 데이터베이스가 기본키 생성을 담당하고, JPA가 직접 기본키를 생성할 수 없으므로, 엔티티를 저장하려면 먼저 데이터베이스에 INSERT를 실행해야만 기본키를 얻을 수 있다.ex. 2. 단점 - JPA의 1차 캐시 및 영속성 컨텍스트 기능을 제대로 활용하지 못할 수 있다.JPA는 엔티티를 영속성 컨텍스트(1차 캐시)에 저장한..

DB/JPA 2025.03.12

[JPA] 기본키 생성 전략

기본키(Primary Key)데이터베이스에서 기본키(Primary Key)는 각 테이블의 행을 고유하게 식별하는 값이다.기본키는 중복될 수 없으며, 한 테이블에서 단 하나만 존재해야 한다.JPA(Java Persistence API)에서 엔티티(Entity)의 데이터를 데이터베이스에 저장할 때도 기본키가 반드시 필요하다.JPA에서 기본키를 생성하는 방법JPA에서는 기본키를 자동으로 생성할 수 있도록 4가지 기본키 생성 전략을 제공한다.IDENTITYSEQUENCETABLEAUTOIDENTITY 전략1. 특징데이터베이스가 기본키 생성을 담당하는 방식이다.AUTO_INCREMENT 기능이 있는 MySQL, MariaDB 등에서 주로 사용된다.@GeneratedValue(strategy = Generation..

DB/JPA 2025.03.03

[JPA] BaseEntity

BaseEntitySpring Data JPA와 같은 ORM(Object-Relational Mapping) 프레임워크에서, @Entity로 선언된 클래스들은 데이터베이스의 테이블과 매핑됩니다.이때, 모든 엔티티에서 공통적으로 사용되는 속성과 로직을 BaseEntity에 정의하고, 다른 엔티티가 이를 상속받아 사용하는 방식이 일반적입니다.주로 객체 지향 프로그래밍에서 데이터베이스와 매핑되는 엔티티 클래스들을 작성할 때 공통 속성 및 로직을 포함하는 부모 클래스 역할을 합니다.예시 @Getter@EqualsAndHashCode(onlyExplicitlyIncluded = true)@MappedSuperclasspublic class BaseEntity { @Id @GeneratedValue(st..

DB/JPA 2025.02.28

DELETE vs TRUNCATE

DELETE 테이블에서 특정 조건에 맞는 데이터를 삭제하는 SQL 명령어데이터를 하나씩 삭제하며, 삭제된 데이터는 복구가 가능(트랜잭션을 통해 롤백 가능)DELETE FROM employeesWHERE department = 'HR';TRUNCATE 테이블에 있는 모든 데이터를 한 번에 삭제하는 SQL 명령어데이터의 구조(테이블 스키마)는 유지하지만, 삭제된 데이터는 복구가 불가능TRUNCATE TABLE employees;DELETE vs TRUNCATE 비교 항목DELETETRUNCATE데이터 삭제 범위조건에 따라 삭제 가능테이블 전체 데이터 삭제속도느림 (트랜잭션 로그 기록)빠름복구 가능 여부트랜잭션 롤백을 통해 복구 가능복구 불가트리거(trigger)트리거 호출트리거 호출되지 않음외래 키 사용 테..

DB/MySQL 2025.02.26

트랜젝션 (Transaction)

트랜젝션 (Transaction) 트랜잭션은 데이터베이스 작업의 논리적인 작업 단위를 말합니다. 테이블 내용을 변경하는 여러 개의 데이터 조작(INSERT, UPDATE, DELETE 등)이 하나의 트랜잭션으로 묶여 처리되며, 작업이 성공적으로 완료되거나 실패할 경우 데이터베이스의 상태를 일관되게 유지하도록 보장합니다.쉽게 말하자면 :트랜잭션은 여러 작업을 하나로 묶어 "전부 성공" 또는 "전부 실패"로 처리합니다.ex. 은행 송금에서 "출금"과 "입금"은 반드시 함께 성공하거나 함께 실패해야 합니다.특징 트랜잭션은 데이터 무결성을 보장하기 위해 다음 네 가지 속성(ACID)을 충족해야 합니다.1. 원자성 (Atomicity)정의 : 트랜잭션 내의 모든 작업은 하나의 단위로 실행되며, 모두 성공하거나 전..

DB/MySQL 2025.02.01

JDBC 의존성 (Dependency)

의존성 (Dependency) 의존성이란, 한 객체나 모듈이 다른 객체나 모듈에 의존하는 관계를 의미합니다.즉, 어떤 코드가 다른 코드(또는 라이브러리)가 없으면 동작할 수 없는 상태를 나타냅니다.JDBC 의존성 JDBC를 사용하는 애플리케이션은 데이터베이스와 연결하기 위해 JDBC 드라이버에 의존합니다.JDBC 드라이버는 애플리케이션과 특정 DBMS(MySQL, Oracle, PostgreSQL 등) 간의 통신을 담당합니다.JDBC 드라이버 없이 JDBC 코드가 작동할 수 없습니다.ex. MySQL 데이터베이스를 사용할 때는 mysql-connector-java 드라이버를 추가해야 합니다.예시 1.  MySQL JDBC 드라이버 의존성 (1) 의존성 추가 (Maven 사용)Maven 프로젝트에서 MyS..

DB/JDBC 2025.01.11