목록Spring/JPA (25)
쌩로그
목록 포스팅 개요 본론 2-1. 문제 인식 배경  2-2. 문제 발생의 원인 2-3. 문제 발생을 일으키게 된 이유 요약 1. 포스팅 개요 해당 포스팅은 제목과 같이 JPA Entity에서 외래 키와 참조를 맺는 @JoinColumn 애너테이션에 대한 오개념을 바로잡기 위한 포스팅이다. 2. 본론 2-1. 문제 인식 배경 현재 회사에서 진행 중인 프로젝트는 여러 사용자가 하나의 데이터에 접근해서 수정할 수도 있고, 삭제할 수도 있다. 즉, A 사용자가 생성하고 B 사용자가 수정했다가 C 사용자가 삭제할 수도 있는 구조다. (사내 서비스라 요구사항이 이렇다.) 따라서 학습차원에서 했던 프로젝트처럼 어떤 게시물에 대해서 작성자만 접근할 수 있는 구조가 아니라서 생성날짜 및 수정날짜보단 누가 데이터를 ..
목록 포스팅 개요 본론 2-1. 프로젝트 환경설정 2-2. 예제 도메인 모델 2-3. 기본 문법 2-4. 중급 문법 2-5. 실무 활용 - 순수 JPA와 Querydsl 2-6. 실무 활용 - 스프링 데이터 JPA와 Querydsl 2-7. 스프링 데이터 JPA가 제공하는 Querydsl 기능 요약 JPA로드맵을 끝내며. 1. 포스팅 개요 참고로 필자는 부트 3.2를 기준으로 강의를 듣는다. 2. 본론 2-1. 프로젝트 환경설정 build.gradle은 다음과 같다. plugins { id 'java' id 'org.springframework.boot' version '3.2.2' id 'io.spring.dependency-management'..
목록 포스팅 개요 본론 2-1. 트랜잭션과 락 2-2. 2차 캐시 요약 끝으로 1. 포스팅 개요 자바 ORM 표준 JPA 프로그래밍의 16장 트랜잭션과 락, 2차 캐시를 학습하며 정리한 포스팅이다. 참고로 해당 책의 마지막 포스팅일 수도 있다. 현재 Querydsl을 같이 수강 중인데, 책에서 해당 강의에 대해 보충할 내용이 없다면 마지막일 수 있다. (드뎌 끝난다...!!!) 어서 살펴보자. 2. 본론 이 챕터에서 다루는 내용은 다음과 같다. 트랜잭션과 락 : JPA가 제공하는 트랜잭션과 락 기능을 다룬다. 2차 캐시 : JPA가 제공하는 애플리케이션 범위의 캐시를 다룬다. 2-1. 트랜잭션과 락 트랜잭션 기초와 JPA가 제공하는 낙관적 락과 비관적 락에 대해 알아보자. 트랜잭션과 격리 수준. 트랜잭션..
목록 포스팅 개요 본론 2-1. 리스너 2-2. 엔티티 그래프 요약 1. 포스팅 개요 자바 ORM 표준 JPA 프로그래밍의 14. 컬렉션과 부가 기능를 학습하며 정리한 포스팅이다. 해당 포스팅은 이전 포스팅에서 다루지 않았던 리스너와 엔티티 그래프에 대해서 살펴본다. 참고로 이전 포스팅에서는 컬렉션과 @Converter에 대해 알아보았었다. 2. 본론 2-1. 리스너 모든 엔티티를 대상으로 언제 어떤 사용자가 삭제를 요청했는지 모두 로그로 남겨야 하는 요구사항이 있다고 가정하자. 이때 애플리케이션 삭제 로직을 하나씩 찾아서 로그를 남기는 것은 너무 비효율적이다. JPA 리스너 기능을 사용하면 엔티티의 생명주기에 따른 이벤트를 처리할 수 있다. 이벤트 종류 이벤트의 종류와 발생 시점은 다음과 같다. Pos..
목록 포스팅 개요 본론 2-1. 스프링 데이터 JPA 소개(12장 1절) 2-2. 공통 인터페이스 소개(12장 3절) 2-3. 쿼리 메소드 기능(12장 4절) 2-4. Web 확장(12장 7절) 요약 1. 포스팅 개요 자바 ORM 표준 JPA 프로그래밍의 12장 스프링 데이터 JPA를 학습하며 정리한 포스팅이다. 참고로 이전에 스프링 데이터 JPA 강의 포스팅을 했던 것과 정말 많이 겹친다. 따라서 해당 포스팅에서 설명이 부족했던 부분을 좀 더 채우는 느낌의 포스팅이다. 해당 포스팅 이후 14장 일부, 16장 내용이 정리되어 포스팅 될 예정이다. (정리라곤 하지만, 한 문장 한 문장이 주옥이라... 그냥 받아쓰기가 되고 있는 것이 현실이다.) 2. 본론 대부분의 데이터 접근 계층(Data Access L..
목록 포스팅 개요 본론 2-1. 공통 인터페이스 기능 2-2. 쿼리 메소드 기능 2-3. 확장 기능 2-4. 스프링 데이터 JPA 분석 2-5. 나머지 기능들 요약 1. 포스팅 개요 인프런에서 영한님의 실전! 스프링 데이터 JPA를 학습하고 정리한 포스팅이다. 실전! 스프링 데이터 JPA도 실전 활용 2편 강의처럼 책과 겹치는 부분이 딱 떨어지도록 구성되어있는 것이 아니라 겹치는 부분도 있고, 연관된 부분도 있다. 책에는 12장, 14장의 리스너와 엔티티 그래프, 16장 부분이다. 따라서 먼저는 강의 내용을 포스팅 하고, 이후 책 내용을 포스팅한다. 이번 포스팅은 스프링 데이터 JPA의 강의 내용이고, 다음 포스팅에서 책의 12, 14, 16 챕터에 대해 다뤄보고자 한다. 2. 본론 2-1. 공통 인터페..
목록 포스팅 개요 본론 2-1. 예외처리 2-2. 엔티티 비교 2-3. 프록시 심화 주제 2-4. 성능 최적화 요약 1. 포스팅 개요 자바 ORM 표준 JPA 프로그래밍의 15. 고급 주제와 성능 최적화를 학습하며 정리한 포스팅이다. 참고로 필자는 스프링 부트 3.xx 버전으로 코드를 사용하는데, 2.x 와 3.x의 차이는 javax 패키지가 jakarta로 변경된 점 외에는 별로 바뀐게 없다. 따라서 패키지 이름을 사용한다면 jakarta로 쓸 것이다. 2. 본론 다룰 내용은 다음과 같다. 예외 처리 : JPA를 사용할 때 발생하는 다양한 예외와 예외에 따른 주의점을 설명한다. 엔티티 비교 : 엔티티를 비교할 때 주의점과 해결 방법을 설명한다. 프록시 심화 주제 : 프록시로 인해 발생하는 다양한 문제점..
목록 포스팅 개요 본론 2-1. 컬렉션 2-2. @Converter 요약 1. 포스팅 개요 자바 ORM 표준 JPA 프로그래밍의 14. 컬렉션과 부가 기능를 학습하며 정리한 포스팅이다. 이번 포스팅에 4개의 주제가 있는데, 리스너와 엔티티 그래프에 대해서는 인프런에서 스프링 데이터 JPA 강의에 대해 정리 & 포스팅 한 이후 포스팅할 예정이다. 2. 본론 다룰 내용은 목차에서 보았듯이 다음과 같다. 컬렉션 : 다양한 컬렉션과 특징을 설명한다. 컨버터 : 엔티티의 데이터를 변환해서 데이터베이스에 저장한다. 2-1. 컬렉션 JPA는 자바에서 기본으로 제공하는 Collection, List, Set, Map 컬렉션은 지원하고 다음 경우에 이 컬렉션을 사용할 수 있다. @OneToMany, @ManyToMany..
목록 포스팅 개요 본론 2-1. OSIV 2-2. 너무 엄격한 계층 요약 1. 포스팅 개요 자바 ORM 표준 JPA 프로그래밍의 13장 웹 애플리케이션과 영속성 관리를 학습하며 정리한 2번째 포스팅이다. 이번 포스팅에서 OSIV에 대해 알아본다. 참고로 이 포스팅애서 OSIV에 대해서 간단히 소개했었지만, 책에서 더 자세히 나온다. 참고로 이 글에서 이어쓰는 글이다. 2. 본론 2-1. OSIV OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어둔다는 뜻이다. 영속성 컨텍스트가 살아있으면 엔티티는 영속 상태로 유지된다. 따라서 뷰에서도 지연 로딩을 사용할 수 있다. 참고 OSIV는 하이버네이트에서 사용하는 용어다. JPA에서는 OEVI(Open EntityManager In ..
목록 포스팅 개요 본론 2-1. 트랜잭션 범위의 영속성 컨텍스트 2-2. 준영속 상태와 지연 로딩 요약 1. 포스팅 개요 자바 ORM 표준 JPA 프로그래밍의 13장 웹 애플리케이션과 영속성 관리를 학습하며 정리한 첫 번째 포스팅이다. (내용이 길어져서 두 번에 걸쳐 포스팅할 예정이다.) 해당 장을 통해 컨테이너 환경에서 JPA가 동작하는 내부 동작 방식을 이해하고, 컨테이너 환경에서 웹 애플리케이션을 개발할 때 발생할 수 있는 다양한 문제점과 해결 방안을 알아본다. 2. 본론 참고로 해당 챕터에서는 yml설정을 다음과 같이 바꿔놔야 한다. spring: jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql:..