JPA 공부하다 보면 거의 반드시 듣게 되는 핵심 기능이 있다.👉 Dirty Checking그리고 처음 보면 대부분 이렇게 생각한다."UPDATE 쿼리 안 썼는데 왜 DB가 수정되지?"실제로 JPA에서는 이런 코드가 가능하다.member.setName("kim");근데:UPDATE SQL을 직접 호출하지 않았는데도 DB 값이 바뀐다.처음 보면 진짜 신기하다.근데 이게 바로:👉 Dirty Checking덕분이다.실무에서도 엄청 중요한 기능이다.왜냐면:✔ JPA 자동 UPDATE 핵심✔ 영속성 컨텍스트 핵심 기능✔ 트랜잭션 동작 이해 필수✔ 성능 최적화와 연결되기 때문이다.오늘은 Dirty Checking 원리를 초보자도 이해할 수 있게 쉽게 정리해보겠다.Dirty Checking 이란?👉 엔티티 변경..
JPA 공부하다 보면 거의 반드시 헷갈리는 개념이 있다.👉 flush👉 commit처음에는 둘 다 비슷해 보인다.왜냐면 둘 다:DB에 반영되는 느낌이 있기 때문이다.그래서 초보자들은 자주 이렇게 생각한다."flush 하면 저장 완료 아닌가?"근데 실제로는:✔ flush ≠ commit✔ 역할 완전히 다름✔ 동작 시점 다름✔ rollback 가능 여부 다름이다.이 차이를 제대로 이해해야:✔ JPA 동작 원리✔ 영속성 컨텍스트✔ Dirty Checking✔ 트랜잭션 관리를 제대로 이해할 수 있다.오늘은 flush vs commit 차이를 초보자도 이해할 수 있게 쉽게 정리해보겠다.가장 먼저 결론flush👉 SQL을 DB로 전송commit👉 최종 저장 확정핵심 차이flush = 반영 준비commit =..
JPA 공부를 시작하면 거의 반드시 듣게 되는 핵심 개념이 있다.👉 영속성 컨텍스트(Persistence Context)근데 처음 들으면 솔직히 엄청 어렵다.왜냐면 설명들이 보통 이렇게 나온다.엔티티를 영구 저장하는 환경처음 보는 사람 입장에서는:"그래서 정확히 뭐 하는 건데?"싶어진다.근데 영속성 컨텍스트를 이해하면:✔ JPA 동작 원리✔ Dirty Checking✔ 1차 캐시✔ 쓰기 지연 SQL 저장소✔ flush✔ transactional 동작이런 핵심 개념들이 전부 연결된다.실무에서도 JPA 성능 최적화와 직접 연결되는 엄청 중요한 개념이다.오늘은 영속성 컨텍스트를 초보자도 이해할 수 있게 쉽게 정리해보겠다.영속성 컨텍스트란?👉 엔티티(Entity)를 관리하는 JPA 내부 공간쉽게 말하면:"엔..
스프링(Spring) + 데이터베이스 공부하다 보면 거의 반드시 만나게 되는 어노테이션이 있다.👉 @Transactional처음에는 그냥 이렇게 사용한다.@Transactionalpublic void save() {}그리고 대부분 이렇게 생각한다."이거 붙이면 DB 저장이 안전해지는 건가?"맞다.근데 실무로 가면:✔ 언제 commit 되는지✔ rollback은 어떻게 되는지✔ checked exception은 왜 rollback 안 되는지✔ 프록시는 왜 등장하는지✔ self invocation 문제는 뭔지이런 내부 동작 원리를 반드시 이해해야 한다.오늘은 @Transactional을 초보자도 이해할 수 있게 완벽하게 쉽게 정리해보겠다.@Transactional 이란?👉 데이터베이스 작업을 하나의 트랜..