no image
Mock이란? - 4월9일
🔍 1. Mock이란?✅ Mock은 "가짜 객체"를 말해실제 의존 객체(여기선 ItemMapper)를 진짜로 실행하지 않고도,테스트하고 싶은 코드(MyBatisItemRepository)만 단위로 따로 떼서 테스트할 수 있도록 도와주는 가짜 객체야. package io.shi.dao.dao.mybatis;import io.shi.dao.global.entity.Items;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.DisplayName;import org.junit.jupiter.api.Test;import org.junit.jupiter.api.extension.E..
2025.04.10
no image
MyBatis란?
MyBatis는 SQL을 XML이나 어노테이션으로 분리해서 깔끔하게 관리할 수 있는 SQL Mapper 프레임워크야. JPA처럼 객체-테이블 매핑은 직접 안 해주지만, SQL을 내가 원하는 대로 컨트롤할 수 있다는 장점이 있어. ✅ MyBatis 기본 개념요소설명Mapper XMLSQL이 정의된 XML 파일Mapper InterfaceXML에서 정의한 SQL을 호출하는 인터페이스SqlSessionFactoryMyBatis 설정을 읽고 SqlSession을 만드는 팩토리SqlSession실제 SQL 실행을 담당하는 객체  🔧 1. 기본 설정하기 (build.gradle)dependencies { implementation 'org.mybatis.spring.boot:mybatis-spring-boo..
2025.04.09
no image
🌟 트랜잭션(Transaction) 이란?
JDBC를 사용해서 트랜잭션을 직접 다루는 예제고, Spring의 PlatformTransactionManager를 사용해서 명시적으로 트랜잭션을 시작하고 커밋 또는 롤백하는 흐름을 보여줘. 전체적으로 트랜잭션이란 무엇인지, 그리고 SimpleJdbcService, SimpleJdbcCrudTransactionRepository, 그리고 TransactionTests가 어떻게 서로 연결되는지 순서대로 자세하게 설명해보도록 하겠다!💡 트랜잭션이란?트랜잭션(Transaction)은 데이터베이스에서 하나의 작업 단위야. 예를 들어 사용자가 은행 계좌에서 돈을 이체할 때,A 계좌에서 돈을 빼고B 계좌에 돈을 넣는다이 두 작업이 모두 성공해야만 데이터베이스에 반영되고, 하나라도 실패하면 둘 다 롤백되어야 해. ..
2025.04.09
no image
JDBC를 이용한 간단한 CRUD 구현
JDBC(Java Database Connectivity)를 사용하여 데이터베이스 CRUD(Create, Read, Update, Delete) 작업을 수행하는 예제 🧩 1. SimpleCrudRepository 인터페이스public interface SimpleCrudRepository { Member save(Member member) throws SQLException; Optional findById(Integer id) throws SQLException; void update(Member member) throws SQLException; void remove(Integer id) throws SQLException;}✅ 설명 DB에 접근해 CRUD를 수행하는 기능을 인..
2025.04.08
no image
@GeneratedValue란?
📌 @GeneratedValue란?@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@GeneratedValue는 기본 키(PK) 값을 자동으로 생성해주는 어노테이션이야.주로 @Id와 함께 사용돼.DB마다 기본 키 생성 방식이 다르기 때문에, 전략(strategy) 을 지정할 수 있어.  🧩 사용 목적우리가 엔티티를 저장할 때마다 id를 일일이 지정하지 않아도, JPA가 알아서 적절한 값을 생성해서 넣어줘. → Insert할 때 PK를 자동으로 생성해주는 것! 🏷️ 주요 전략 4가지 (strategy)전략 이름설명사용되는 DBIDENTITYDB의 auto_increment 사용MySQL, MariaDBSEQUENCEDB의 s..
2025.04.07
no image
🌙JPA 매핑 어노테이션 가이드
JPA 매핑 어노테이션 가이드JPA(Java Persistence API)에서는 자바 객체와 데이터베이스를 효과적으로 매핑하기 위한 다양한 어노테이션을 제공합니다. 이 글에서는 주요 매핑 어노테이션들을 카테고리별로 정리해 보겠습니다. 1. 객체와 테이블 매핑어노테이션 설명@Entity클래스를 엔티티로 지정하여 JPA가 관리하도록 함@Table엔티티와 매핑할 테이블을 지정@SecondaryTable엔티티를 복수의 테이블에 매핑할 때 사용@SecondaryTables여러 개의 @SecondaryTable을 정의할 때 사용 @Entity@Table(name = "MEMBER", uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_..
2025.04.07
no image
커밋, 롤백, 트랜잭션, flush()과 커밋의 차이점
✅ 1. 커밋(COMMIT) / 롤백(ROLLBACK) 시점에 어떤 일이 일어나는지⚾️ 먼저 개념부터 짚자:커밋 (Commit): 트랜잭션 안에서 한 작업들을 DB에 영구 반영하겠다는 뜻롤백 (Rollback): 트랜잭션 안에서 한 작업들을 전부 취소하고 원래대로 되돌리겠다는 뜻  🔍 JPA에서 커밋이 일어날 때 무슨 일이 벌어지나?JPA는 EntityManager 내부의 1차 캐시(Persistence Context)에서 객체 상태를 추적하고 있다가, 트랜잭션이 끝날 때 flush()를 자동으로 호출해!→ 변경된 내용이 SQL로 변환되어 DB에 반영👉 예:@Transactionalpublic void updateTitle(Long id) { Post post = postRepository.fi..
2025.04.07
no image
변경 감지 (Dirty Checking)란?
✅ 변경 감지 (Dirty Checking)란?📌 JPA는 엔티티 객체의 "처음 상태"를 기억하고 있다가,트랜잭션이 끝나기 전에 그 객체가 변경되었는지를 확인해.만약 변경됐다면 → 자동으로 UPDATE SQL을 만들어서 DB에 반영해줘. 🎯 어떻게 작동하는지?트랜잭션 시작JPA가 DB에서 엔티티를 조회해서 영속성 컨텍스트에 저장개발자가 객체의 값을 setter 등으로 수정트랜잭션 커밋 시점에 → JPA가 처음 상태와 지금 상태를 비교바뀐 부분만 UPDATE SQL을 생성해서 실행!  🧠 예제 코드로 보기@Transactionalpublic void updatePostTitle(Long id, String newTitle) { Post post = entityManager.find(Post.cl..
2025.04.07
no image
✅ Write-Behind (쓰기 지연) 란?
✅ Write-Behind (쓰기 지연) 란?JPA의 핵심 기능 중 하나로, 엔티티 객체의 변경을 바로 DB에 반영하지 않고 트랜잭션이 커밋될 때 한 번에 반영하는 전략이야. 💡 왜 쓰기 지연을 사용할까?성능 최적화→ 객체를 여러 번 수정할 때마다 DB에 SQL을 날리면 성능이 떨어져.→ JPA는 SQL을 "모아서 한 번에" 보냄으로써 성능을 높여줘.트랜잭션 관리 효율→ 트랜잭션 도중 예외가 발생하면, 실제 DB에는 반영되지 않았기 때문에 롤백이 쉬움. 💡 예시로 이해해보자@Transactionalpublic void updateUser() { User user = em.find(User.class, 1L); user.setName("홍길동"); user.setEmail("gildon..
2025.04.07