🖥️ 백엔드/JPA

🖥️ 백엔드/JPA

[JPA] ddl-auto 옵션

개요스프링 부트와 같은 프레임워크에서 Hibernate를 사용할 때, 데이터베이스 스키마를 어떻게 처리할지 설정하는 옵션종류설명noneHibernate가 DDL을 생성하거나 실행하지 않는다.사실상 없는 값이지만 관례상 none으로 사용한다.validateHibernate가 데이터베이스 스키마와 엔티티 매핑을 검증한다.데이터베이스 스키마가 엔티티 매핑과 일치하는지 확인하지만, 변경 사항을 적용하지는 않는다.updateHibernate가 엔티티 매핑을 기반으로 기존 데이터베이스 스키마를 업데이트한다.데이터베이스에 이미 있는 테이블의 데이터는 유지되며, 필요한 변경 사항만 적용된다.createHibernate가 애플리케이션을 시작할 때 기존 데이터베이스 스키마를 삭제하고 새로 생성한다.모든 기존 데이터는 삭제..

🖥️ 백엔드/JPA

[JPA] 비관적 락 간단 정리

비관적 락(Pessimistic Lock)비관적 락은 동시에 여러 트랜잭션이 같은 데이터를 수정할 때 발생할 수 있는 충돌을 방지하기 위해서 사용된다. 동시성 제어가 중요한 시나리오에서 데이터 무결성을 유지하는데 유용하다. 비관적 락은 두 가지 유형이 있다.PESSIMISTIC_READ: 다른 트랜잭션이 데이터를 읽을 수는 있지만, 수정할 수는 없다.PESSIMISTIC_WRITE: 다른 트랜잭션이 데이터를 읽거나 수정할 수 없다. @Lock(LockModeType.PESSIMISTIC_WRITE)비관적 쓰기 락을 사용하면 트랜잭션이 특정 엔티티를 수정하기 전에 해당 엔티티를 잠근다. 이를 통해 다른 트랜잭션이 해당 엔티티를 읽거나 수정하지 못하도록 한다. @Lock(LockModeType.PESSIMI..

🖥️ 백엔드/JPA

[JPA] 스프링 데이터 JPA의 Auditing: 엔티티의 생성, 수정 시각을 기록하고 싶을 때

1. Auditing? 게임 회사에서 근무할 때, 자주 했던 업무 중 하나가 게임 이용자 분들의 CS를 처리하는 일이였다. 가령, "A 아이템을 수령했는데, 인벤토리에 없어요ㅠㅠ"와 같은 문의가 들어오면 DB 테이블에서 A 아이템이 생성된 시각이나 수정된 시각 등을 확인해서, 로그를 살펴볼 시간을 대략적으로 추측하고 상세한 플레이 로그를 한 번 더 확인하는 식이다. 이렇듯 서비스를 운영할 때 데이터가 생성되고, 수정된 시각을 기록하고 트래킹하는 것은 중요하다. Audit은 '검사하다', '감사하다'는 의미를 가지고 있다. 스프링 데이터 JPA에서는 Auditing이라는 기능을 사용해서 엔티티가 생성되고, 변경되는 그 시점을 감지해 생성 시각, 수정 시각, 생성한 사람, 수정한 사람을 기록할 수 있다. 직..

🖥️ 백엔드/JPA

[JPA] JPQL ②

이전글 [JPA] JPQL ①📢 안내해당 글은김영한 님의 JPA 프로그래밍 [8장 프록시와 연관관계 관리, 10장 객체지향 쿼리 언어] 중 일부를 발췌하여 정리한 것입니다. JPQL(Java Persistence Query Language)JPQL은 객체지향 쿼리progfrog.tistory.com 페치 조인(Fetch Join)페치 조인은 SQL에서 이야기하는 조인의 종류는 아니고, JPQL에서 성능 최적화를 위해 제공하는 기능이다.연관된 엔티티나 컬렉션을 한 번에 같이 조회하는 기능인데, JOIN FETCH 명령어로 사용할 수 있다. 엔티티 페치 조인SELECT m FROM Member m JOIN FETCH m.team회원(m)과 팀(m.team)을 함께 조회한다.일반적인 JPQL 조인과는 다르게..

🖥️ 백엔드/JPA

[JPA] JPQL ①

📢 안내해당 글은김영한 님의 JPA 프로그래밍 [8장 프록시와 연관관계 관리, 10장 객체지향 쿼리 언어] 중 일부를 발췌하여 정리한 것입니다. JPQL(Java Persistence Query Language)JPQL은 객체지향 쿼리 언어이며, 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.JPQL은 결국 SQL로 변환된다. 기본 문법과 쿼리 APISELECT문SELECT m FROM Member AS m WHERE m.username = 'Hello'대소문자 구분엔티티와 속성은 대소문자를 구분한다.SELECT, FROM, AS, WHERE 같은 JPQL 키워드는 대소문자를 구분하지 않는다.엔티티 이름JPQL..

프로그⸝⸝◜࿀◝ ⸝⸝
'🖥️ 백엔드/JPA' 카테고리의 글 목록