본문 바로가기

DB3

SQL Mapper(MyBatis) vs ORM(JPA) 백엔드 개발을 하다 보면 데이터베이스와의 연결이 필수적이다. 이때 데이터베이스와 상호작용하는 방식에는 대표적으로 SQL Mapper와 ORM(Object-Relational Mapping) 두 가지 접근법이 있다. SQL Mapper에서도 대표적인 프레임워크는 MyBatis가 있다. ORM 중에서도 Java 진영에서는 JPA(Java Persistence API)가 널리 사용된다. 현재 백엔드에서 Java & Spring을 사용한다면 대부분 JPA를 많이 사용하는 것 같다. 진행하고 있는 프로젝트에서도 주로 JPA를 사용했다. 과연 SQL Mapper와 ORM의 차이가 무엇이며 JPA(ORM)를 실무에서 많이 사용하는 이유를 알아보고자 한다.SQL MapperSQL Mapper는 개발자가 직접 SQL을 .. 2025. 3. 16.
트랜잭션(Transaction)과 ACID 특성 트랜잭션이란?트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위를 의미한다. 여러 개의 데이터 조작 연산(삽입, 삭제, 갱신 등)이 모여 하나의 트랜잭션을 구성하며, 트랜잭션이 완료되지 않으면 데이터베이스 상태가 변경되지 않는다.트랜잭션의 필요성데이터 정합성 보장: 연산 도중 장애가 발생하면 데이터 불일치가 발생할 수 있다.동시성 제어: 다수의 사용자가 동시에 데이터를 조작할 경우, 일관성을 유지해야 한다.데이터 복구 가능: 장애 발생 시, 이전 상태로 복구할 수 있다.트랜잭션 활용 사례온라인 쇼핑몰 결제 시스템: 결제 과정 중 장애가 발생하면 모든 작업이 롤백됨은행 계좌 이체: 한 계좌에서 출금하고 다른 계좌에 입금하는 과정이 하나의 트랜잭션으로 묶여야 함항공권 예약 시스템: .. 2025. 3. 7.
[JPA] 동시성 제어 - 낙관적 락(Optimistic Lock), 비관적 락(Pessimistic Lock) 낙관적 락 예외..?Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.postdm.backend.domain.member.domain.entity.Member#1] 프로젝트에서 테스트 코드를 작성하던 중, ObjectOptimisticLockingFailureException (낙관적 락 예외)가 발생했다.위에 오류 메시지를 보면 동시에 여러 개의 트랜잭션이 같은 엔터티(Member)를 변경하려고 할 때 낙관적 락 예외가 발생했다. 이는 JPA (Hibernate)에서 Spring Data JPA를 사용해서 엔터티의 버전이 변경되었거나, DB에서 해당 데이터를 찾지 못할 경우 발생한.. 2025. 2. 28.