프로그래밍/JPA
-
[JPA] N+1 문제프로그래밍/JPA 2022. 3. 2. 15:39
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. N+1이란 조회하고자 하는 데이터를 조회하고 조회된 엔티티에 연관 엔티티를 추가로 JPA가 조회하여 특정 엔티티들을 조회하기 위 부가적으로 연관 엔티티 조회 쿼리가 추가로 실행되는 것을 의미합니다. 예를 들어 멤버 엔티티가 팀 엔티티와 연관 관계가 있는 상황에서 멤버의 이름이 '김'으로 시작하는 멤버를 조회하기 위해 1개의 쿼리를 실행합니다. 이 결과로 10명의 멤버가 조회되고 멤버 엔티티에 연관된 엔티티의 팀 엔티티를 조회하기 위해 추가로 10개의 쿼리가 수행되는 것입니다. 2. 즉시 로딩 N+1 PK를 이용한 조회 위 테스트의 경우 Repository의 fin..
-
[JPA] Enum 사용프로그래밍/JPA 2022. 1. 14. 18:44
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. Enum이란 일정한 종류를 가지는 정보의 집합을 의미합니다. 예를 들어 상품의 종류로 책, CD, 연필 등 다양한 상품이 존재할 수 있습니다. 이때 책, CD, 연필 등은 일정한 종류 상품이라는 정보로 볼 수 있습니다. 그럼 이 상품 Enum에 책, CD, 연필 등 다양한 상품들을 상수 형태의 집합으로 만들어 관리할 수 있도록 합니다. 2. JPA에서 Enum 사용 먼저 Entity의 특정 속성으로 Enum을 사용하기 위해서는 @Enumerated라는 어노테이션을 사용해야 합니다. 이 어노테이션은 EnumType.String, EnumType.ORDINAL 2개의..
-
[JPA] 즉시로딩과 지연로딩 Eager And Lazy프로그래밍/JPA 2022. 1. 13. 01:06
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. 즉시 로딩과 지연 로딩 엔티티에서 연관관계를 가지는 엔티티가 있는 경우 이 연관된 엔티티를 어떤 시점에 조회를 할 것인지 결정하는 로딩 방법을 말합니다. 즉시 로딩 - 엔티티를 조회할 때 연관된 엔티티를 같이 조회하는 로딩 방법 ManyToOne으로 연관된 Team 엔티티를 즉시 로딩으로 설정하게 되면 Member 엔티티를 조회하는 시점에 연관된 Team 엔티티를 조회하는 로딩 방법입니다. 지연 로딩 - 엔티티를 조회할 때 연관된 엔티티를 같이 조회하는 것이 아닌 연관 엔티티의 사용 시점에 조회하는 로딩 방법 ManyToOne으로 연관된 Team 엔티티를 지연 로..
-
[JPA] Attribute Converter프로그래밍/JPA 2022. 1. 12. 00:32
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. Attribute Converter이란 명칭을 그래도 번역하면 속성 변환기 정도가 될 것 같습니다. 번역 그대로 Converter는 Entity와 DB사이에서 속성의 변환을 담당합니다. Converter가 지정되지 않은 속성의 경우 조회 시 DB의 데이터를 특정 속성의 값으로 읽어오며, 저장 또는 수정 시 Entity의 속성 값을 DB의 컬럼에 저장합니다. 반면 Converter가 지정된 속성의 경우는 조회 시 DB의 데이터를 읽어와 Converter의 특정 동작을 수행 후 결과를 Entity속성에 값을 입력하며, 저장 또는 수정 시 Entity의 속성 값을 Co..
-
[JPA] Dirty Checking(변경 감지)프로그래밍/JPA 2021. 12. 24. 03:36
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. JPA Dirty Checking JPA에는 수정과 관련된 메소드가 존재하지 않습니다. 그럼 JPA를 이용해서는 데이터를 수정할 수 없는 것일까요? 당연히 JPA도 DB 데이터를 수정할 수 있습니다. 다만 수정 메소드가 존재하지 않을 뿐입니다. JPA를 사용하여 데이터를 수정하려면 Entity를 조회하여 조회된 Entity 데이터를 변경만 하면 데이터 베이스에 자동으로 반영이 되도록 하는 기능을 바로 Dirty Checking이라고 합니다. 2. Dirty Checking 동작 방법 Entity 객체의 데이터만 변경하면 어떻게 DB에 수정된 데이터가 반영되는지 설..
-
[JPA] 예외 처리프로그래밍/JPA 2021. 11. 5. 00:19
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. JPA 표준 예외 JPA의 표준 예외들은 javax.persistence.PersistenceException의 자식 클래스이며 이 예외 클래스의 부모는 모두 RuntimeException이다. 따라서 JPA는 모두 Uncheck Exception이다. 2. JPA의 예외 종류 트랜잭션 롤백을 표시하는 예외 심각한 예외로 복구해서는 안되며 예외가 발생하면 트랜잭션을 강제로 커밋하여도 커밋되지 않고 RollbackException이 발생한다. 예외 설명 javax.persistence.EntityExstsException persist함수 호출 시 이미 같은 엔티티..
-
[JPA] 연관관계의 주인프로그래밍/JPA 2021. 10. 21. 18:08
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. 연관관계의 주인 이전 글에서 (회원 -> 팀) 단방향 매핑에서 (회원 -> 팀, 팀 -> 회원) 양방향 매핑을 위해 팀 엔티티의 MemberList에 OneToMany 어노테이션과 mappedBy 속성이 추가하였습니다. 양방향 연관관계는 DB의 경우 외래 키 하나를 가지고 양방향 연관관계를 맺습니다. 그러나 엔티티의 경우 두 엔티티에서 단방향 연관관계를 맺음으로 양뱡향 연관관계 처럼 연관관계를 맺습니다. 이때 엔티티의 양방향 연관관계 관점에서는 참조가 2개가 되고 DB의 관점에서 양방향 연관관계는 외래 키 1개가 됩니다. 이러한 엔티티와 DB의 차이 때문에 엔티티..
-
[JPA] 연관관계프로그래밍/JPA 2021. 10. 20. 17:29
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. 연관관계 JPA의 연관관계는 3가지 키워드가 있다 방향 예를 들어 회원과 팀의 관계에서 회원 -> 팀 또는 팀 -> 회원과 같은 방향을 단방향 관계라고 한다. 회원 -> 팀, 팀 -> 회원과 같은 방향을 양방향 관계라고 한다. 방향의 경우 객체관계에만 존재한다. 테이블의 겨우는 항상 양방향 관계이다. 다중성 다중성에는 [다대일, 일대다, 일대일, 다대다] 4가지 다중성이 있다. 회원과 팀의 관계에서 회원은 1개의 팀에만 속할 수 있는 경우는 회원(다) : 팀(일)인 다대일 관계가 된다. 팀과 회원의 관계에서 회원은 1개의 팀에만 속할 수 있는 경우는 팀(일) : ..