ORM(Object-Relational Mapping) 개요
·
Spring
1️⃣ ORM의 기본 원리객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블 사이의 불일치를 해소하여,개발자가 객체를 다루는 것처럼 데이터베이스에 접근할 수 있도록 하는 기술입니다. 객체와 테이블의 매핑객체 지향 프로그래밍에서 사용하는 클래스는 데이터베이스의 테이블과 매핑됩니다.예를 들어, 객체인 User 클래스는 데이터베이스인 users 테이블에 대응됩니다.클래스의 속성(필드)는 테이블의 컬럼에 대응됩니다.각 객체의 인스턴스 변수가 테이블의 각 행(row)에 저장되는 데이터 필드입니다. CRUD 작업의 추상화ORM은 기본적인 CRUD작업을 객체의 메소드 호출로 처리할 수 있도록 해줍니다.개발자가 SQL쿼리를 직접 작성하지 않고,ORM 프레임워크가 객체의 상태 변화를 감지하여 적절한 SQL ..
영속성 컨텍스트, JPA 기반 엔티티 관리 핵심 원리
·
Spring
오늘날 많은 애플리케이션이 복잡한 비즈니스 로직과 대용량 데이터를 다루면서,데이터의 일관성과 효율적인 엔티티 관리가 매우 중요해졌습니다. 이런 상황에서 JPA는 객체와 관계형 데이터베이스 간의 매핑을 쉽게 해주어 개발 생산성을 높여줍니다.특히 영속성 컨텍스트는 단순한 캐시 이상의 역할을 합니다. 영속성 컨텍스트는 단일 트랜잭션 내에서 엔티티를 관리하고,변경 사항을 감지하여 데이터 동기화를 자동으로 처리합니다. 이 글에서는 영속성 컨텍스트의 주요 기능과 동작 원리를 설명 드리겠습니다.      📌 영속성 컨텍스트의 개념과 역할영속성 컨텍스트는 JPA가 제공하는 메모리 기반 저장소로,어플리케이션 내에서 엔티티를 효과적으로 관리하는 역할을 합니다. 데이터베이스와 상호작용하기 전에 엔티티 객체를 메모리에 보관..
[Spring] Hibernate @Where로 인한 논리 삭제 데이터 조회 문제 트러블 슈팅
·
Spring
문제 상황 논리 삭제된 데이터가 조회되지 않음 Spring Boot와 JPA를 사용해 논리 삭제(Soft Delete) 기능을 구현하던 중 예상치 못한 이슈가 발생했습니다.`isDeleted = true` 조건으로 논리 삭제된 데이터를 조회하려 했으나, Hibernate의 `@Where` 애노테이션이 모든 조회 쿼리에 `isDeleted = false` 조건을 강제 적용하면서원하는 데이터를 가져오지 못하는 상황이 발생했습니다. SQL 로그 확인 결과SELECT * FROM user u WHERE u.is_deleted = false;쿼리를 `isDeleted = true` 조건으로 작성했음에도 `is_deleted = false` 조건이 추가되어 논리 삭제된 사용자를 조회할 수 없었습니다.    문제 원..
[Spring] JPA로 일정 시간 후 데이터 삭제 구현하기
·
Spring
데이터를 삭제할 때, 즉시 데이터베이스에서 제거하는 방식(DELETE)은 간단하지만, 데이터 복구가 어렵고, 감사(audit) 및 트랜잭션 이력을 유지할 수 없다는 단점이 있다.  이에 따라, 많은 애플리케이션에서는 논리 삭제(Soft Delete)를 적용하고, 일정 시간이 지난 후 배치 작업을 통해 데이터베이스에서 실제로 삭제하는 방법을 사용한다. 이번 글에서는 JPA를 활용하여 논리 삭제 후 배치 작업으로 데이터를 완전 삭제하는 구현 방법을 설명한다. 논리 삭제 (Soft Delete) 란?데이터 베이스에서 데이터를 즉시 제거하지 않고, 삭제된 상태를 나태는 플래그(컬럼)을 추가한다.위 방식을 이용한다면, 데이터를 유지하면서 삭제된 것처럼 처리할 수 있다.     1️⃣ 논리 삭제 구현 (@SQLDe..
[Spring] BaseEntity와 생성일 및 수정일 자동화
·
Spring
Spring Boot를 사용한 웹 애플리케이션 개발에서 데이터베이스 엔티티(Entity)는 핵심적인 역할을 합니다. 각 엔티티에는 일반적으로 생성일(createdAt)과 수정일(updatedAt)이 필요하며, 이를 수동으로 관리하는 것은 번거롭고 실수할 가능성이 있습니다. 이를 해결하기 위해 BaseEntity라는 공통 클래스를 적용하고,Spring Data JPA의 Auditing기능을 활용하면 이러한 필드를 자동으로 관리할 수 있습니다. 이번 글에서는 BaseEntity가 무엇인지, 어떻게 활용할 수 있는지, 그리고 생성일과 수정일을 자동으로 관리하는 방법을 알아보겠습니다.      BaseEntity란 무엇인가?BaseEntity는 여러 엔티티에서 공통적으로 사용되는 속성을 정의하는 추상 클래스(A..