[Spring] JPA 연관관계 매핑 확실하게 알아보기❗
·
Java Study/Frameworks
❔연관관계 매핑데이터베이스에서 엔티티 간 관계를 정의하고, 이를 ORM(JPA) 을 통해 객체지향적으로 표현하는 것을 의미 💠연관관계 매핑이 중요한 이유현대적인 애플리케이션에서는 여러 개의 엔티티들이 서로 연관되어 있으며, 이 관계를 올바르게 설정하는 것이 중요하다.데이터 정합성(Consistency) 유지중복 데이터 최소화 및 정규화비즈니스 로직의 직관적인 표현 가능객체 간의 관계를 코드에서 직접 표현 ➡️ 가독성과 유지보수성 향상SQL JOIN을 활용한 최적화된 데이터 조회 가능Spring Boot와 JPA를 사용하면 객체 간의 관계를 기반으로 데이터베이스 테이블 간의 관계를 매핑할 수 있다. ⚠️ JPA 연관관계 매핑 시 고려해야 할 점🔸단방향 vs 양방향구분설명단방향- 한 엔티티에서만 다른 엔..
[Spring Data JPA_일정 관리 앱 Develop] 필수 & 도전 기능 구현 기록 🖋️
·
Dev Projects
개요CH 3 일정 관리 앱 Develop 필수/도전 기능을 구현하면서 고민했던 부분과 트러블 슈팅 과정에 대해 작성해보겠습니다. 📌 필수/도전 기능 가이드더보기필수 기능Lv 1. 일정 CRUDJPA를 이용해 CRUD를 구현했습니다.이전에 Spring JDBC로 일정 관리 앱을 구현했던 것과 비교했을 때, JPA를 활용하니 더 편리했습니다.차이점Spring JDBCSpring Data JPASQL 작성 여부직접 SQL 작성SQL 작성 불필요CRUD 메서드 구현직접 작성sava, findById 등 기본 제공조회 결과RowMapper로 결과 매핑엔티티 매핑 자동 처리 JPA Auditing을 활용한 작성일, 수정일 자동 관리`@EnableJpaAuditing`을 Application 클래스에 추가해서 JP..
[Spring] @Transactional을 어디에 붙여야 할까🤔❔
·
Java Study/Frameworks
Spring JPA로 일정 관리 앱을 만들어보면서, @Transactionla을 붙이는 기준을 공부해봤다. @Transactional`@Transactional`은 데이터베이스의 일관성을 보장하기 위해 사용된다.쓰기(INSERT, UPDATE, DELETE) 연산에는 필수적이지만, 읽기(SELECT) 연산에서도 성능 최적화를 위해 고려할 수 있다. 1. @Transactional(readOnly = true)는 GET 메서드에 왜 필요할까?JPA의 영속성 컨텍스트는 기본적으로 변경 감지(Dirty Checking)를 수행한다.단순 조회(SELECT) 메서드는 변경이 필요 없으므로 readOnly = true를 사용하면 성능이 향상된다.➡️ Spring이 "읽기 전용 트랜잭션"을 적용하면, 영속성 컨텍스트..
[Spring] spring.jpa.hibernate.ddl-auto 설정과 각 옵션
·
Java Study/Frameworks
Spring Boot에서 JPA와 Hibernate를 사용할 때, `spring.jpa.hibernate.ddl-auto` 설정은 애플리케이션이 실행될 때 데이터베이스 스키마를 어떻게 관리할지 결정하는 역할을 한다. 1. spring.jpa.hibernate.ddl-auto=create애플리케이션이 시작될 때 기존 테이블을 삭제하고(DROP), 다시 생성(CREATE)함애플리케이션 실행 시마다 모든 데이터가 초기화됨실무에서는 사용하면 안 됨 (테스트 환경에서만 유용) 📌 실행 과정기존 테이블을 DROP TABLE로 삭제CREATE TABLE로 새롭게 테이블을 생성애플리케이션이 종료될 때까지 새로운 데이터를 저장할 수 있음애플리케이션을 다시 실행하면 모든 데이터가 삭제됨 2. ddl-auto의 옵션옵션설..
[Spring] JPA 영속성 컨텍스트와 JOIN 활용
·
Java Study/Frameworks
영속성 컨텍스트의 주요 기능JPA의 영속성 컨텍스트는 엔티티를 관리하는 논리적 저장소로서, 성능 최적화 및 데이터 일관성을 유지하는 중요한 역할을 한다. 이를 잘 활용하면 불필요한 쿼리를 줄이고 성능을 향상시킬 수 있다. 1차 캐시엔티티 조회 시, 먼저 영속성 컨텍스트의 1차 캐시에서 데이터를 찾고, 없을 경우에만 DB에서 조회한다.같은 트랜잭션 내에서는 동일한 엔티티를 DB 조회 없이 1차 캐시에서 재사용할 수 있어 성능 최적화가 가능하다. 쓰기 지연`EntityManager.persist()`를 호출해도 즉시 DB에 반영되지 않고, 트랜잭션이 끝날 때 `flush()`가 발생하며 한 번에 실행된다.INSERT, UPDATE, DELETE 같은 SQL이 쓰기 지연 저장소에 모였다가 트랜잭션이 끝나면 한..
[Spring] JPA에서 꼭 알아야 할 개념: 영속성
·
Java Study/Frameworks
JPA를 사용하면서 반드시 알아야 하는 개념 중 하나가 영속성(Persistence) 이다. 영속성 컨텍스트는 JPA가 제공하는 핵심 개념이며, 엔티티의 생명주기와 깊이 연관된다.이 글에서는 JPA의 영속성 개념과 엔티티의 생명주기에 대해 정리해본다. 1. 영속성이란?📌영속성(Persistence) = 지속되는 것프로그램에서 데이터를 메모리(RAM)에 저장하면, 프로그램이 종료되면 데이터가 사라진다. 하지만, 중요한 데이터는 프로그램이 종료되더라도 유지되어야 한다. 이러한 데이터 지속성(Persistence)을 보장하기 위해 DB나 파일에 저장하는 것이 필요하다. 즉, DB에 저장된 데이터는 프로그램이 종료되어도 유지되므로 "영속적"이라고 할 수 있다. JPA에서의 영속성JPA에서는 영속성 컨텍스트(P..
[Spring] Spring Data JPA에서 @Repository를 사용하지 않는 이유
·
Java Study/Frameworks
spring data jpa로 프로젝트를 구현할때, Repository 클래스에 Repository 어노테이션을 사용하지 않는 이유가 궁금해져서 알아보았다.spring jdbc로 구현할 때는 @Repository를 썼었는데, JPA에서는 Repository 클래스에 @Repository를 사용하지 않아도 되는 이유가 뭘까? Spring JDBC vs Spring Data JPA Spring JDBCSpring Data JPA레포지터리`JdbcTemplate`을 이용하여 직접 SQL 작성`JpaRepository` 또는 `CrudRepository`를 상속하여 자동으로 구현@Repository 필요 여부명시적으로 `@Repository`를 선언해야 스프링 빈(Bean)으로 등록됨Spring이 자동으로 빈(..