JPA

    Lock

    Lock

    Lock 이란? 고립성(Isolation)을 보장하기 위한 방법 데이터 항목에 상호 배타적으로 접근이 되도록 하는 것 Lock을 사용함으로 해당 Lock을 가지고 있는 Transaction(사용자, 요청)만이 해당 데이터에 접근을 할 수 있다 Lock 과 Transaction 그러면 Lock과 Transaction의 차이는 무엇이 있는지 알아보면 Transaction은 논리적 작업 단위를 이루는 연산들의 집합(All or Nothing - Atomicity 보장) 이고 Lock은 Transaction이 동일한 데이터 갱신 작업을 할 수 없도록 하도록 구현한 방법 중 하나이다 단순히 SELECT * FROM MEMBER; 와 같이 조회 만 하는 경우에는 일반적으로 데이터베이스 시스템은 Lock을 걸지 않는..

    JPA - 복합키

    JPA - 복합키

    이번 포스트에서는 복합키에 대해서 정리해볼려고 한다 이전에도 몇번 사용은 해봤지만 헛갈리는 부분도 있고 자주 사용하지 않았다보니 까먹는 부분이 있어 정리해 보고자 한다 Composite Key (복합키) 우선 복합키에 대해서 알아보자 다들 알다시피 DB (여기서 DB는 Oracle, MySQL과 같은 관계형 데이터베이스를 지칭한다) 에서는 주어진 개체 집합 내에서 개체들을 구별할 수 있는 방법이 있어야 한다 다르게 표현하면 한 개체 집합에서 모든 속성들의 값이 정확하게 같은 개체들이 존재하면 안된다는 말이다 이러한 것을 위해서 키의 개념이 필요하고 그 키 중에서는 Super key, Candidate Key, Primary key가 적용 가능하다 이 중에서 우리는 Primary key를 선정해서 개체를 ..

    졸작 프로젝트 마무리

    프로젝트를 마무리하면서 부족했던 부분을 정리하고자 한다 처음으로 스프링을 사용해서 처음 부터 끝까지 진행한 프로젝트이고 많은 어려움이 있었지만 완벽하다고는 하지 못하지만 완성을 해냈다 아쉬웠던 점 컨트롤러에서 Entity 노출 JPA를 사용하면서 몇몇 엔티티에 양방향 관계를 맺어 둔 것이 있다 개발을 첫 시작할때만 해도 우선 기능이 돌아가게끔 만들자라는 생각 뿐이었고 뷰에 반환 하는 값에 대해서는 전혀 생각을 하지 않고 있었다 이부분이 화두의 시작이었다 뷰에 반환하는 값에 양방향 관계를 맺은 값이 포함이 되었고 순환참조의 문제가 생기게 되었다 경험해보지 못한 오류상황이었고 꽤 긴시간 골머리를 앓았던 기억이 있다 그 당시에는 DTO를 만들어서 보낼 생각은 하지 않은채 결국 문제만 해결하기 위해 @JsonI..

    졸작 도메인 구성

    졸작 도메인 구성

    개요 졸작을 위해 만든 프로젝트를 정리 사용기술 Spring boot JPA thymeleaf MySQL H2(테스트 용도) 도메인 설계 기본 시간 사용자 정보 작성 위 ERD를 보면 알 수 있듯이 저장되는 거의 모든 엔티티에 시간정보와 사용자 정보를 기본으로 입력을 하도록 설정을 하였다 모든 엔티티에 직접 작성하여 넣을 수도 있지만 하나의 클래스로 도출하여 값만 상속을 받을 수 있도록 설계를 하였다 하지만 어느 엔티티는 시간정보만 다른 엔티티느 시간, 사용자 정보둘다 필요로 하기 때문에 위 문제는 아래와 같이 두개의 클래스로 나누어서 사용을 하였다 @Getter @MappedSuperclass public class TimeInfo { @Column(name = "CREATED_AT", updatabl..

    JPA- JPQL

    경로표현식 상태필드: 단순 값 저장 필드 (m.username), 추가 탐색 불가 단일값 연관필드: XXXToOne연관, 추가 탐색 가능(member.team.teamname), 묵시적 inner join발생 컬렉션 값 연관 필드: XXXToMany연관, 추가 탐색 불가, 묵시적 inner join 발생 직접 명시적 조인으로 사용 페치조인 JPQL에서 성능 최적화를 위해 제공되는 기능 연관된 엔티티나 컬렉션을 같이 조회하는 기능 fetch전략을 LAZY로 설정을 해두더라도 가지고 올때 한번에 조회를 한다 다대일 페치조인 jpql select m from Member m join fetch m.team sql로 변환시 select m.*, t.* from Member m inner join team t o..

    JPA-값타입

    JPA-값타입

    기본값 타입 자바 기본타입 - int, double Wrapper 클래스 - Integer, Long String 생명주기를 엔티티에 의존하고 절대로 공유하면 안된다--> 다른 객체에서 값을 변경했는데 같이 변경될 수 잇음 임베디드 타입 새로운 값 타입을 정의하여 사용하는 것이다 C, C++에서 구조체를 정의하여 사용하는 것과 비슷하다고 생각된다 @Embeddable public class Address { private String city; private String street; private String zipcode; } @Embedded private Address address; 위 코드와 같이 임베디드 타입은 선언부에 @Embeddable, 사용하는 곳에 @Embedded을 표시해 주어야 ..

    JPA-프록시

    프록시 실제 클래스를 상속받아서 만들어진 가짜 객체 객체를 DB에서 찾을 때와는 다르게 em.persist()가 아닌 em.getReference()를 이용해서 조회를 한다 메서드명에서 보는거와 같이 무언가(실제 객체)를 참조를 하고 있는 객체이다 프록시 객체는 getXXX()처럼 실제로 처음 사용이 될때 값이 초기화가 된다 이미 영속성 컨텍스트에 찾는 객체가 있으면 실제 엔티티 반환된다 초기화 과정 getXXX()처럼 실제로 사용 영속성 컨텍스트에 초기화 요청 DB조회 실제 Entity생성 실제 객체를 참조하고 있는 target.getXXX()실행 org.hibernate.Hibernate.initialize(프록시객체);을 이용하여 강제로 직접 초기화 할 수 있다 즉시로딩 지연로딩 설정 방법 @XXX..

    JPA시작

    JPA공부함에 있어서 내용은 인프런 김영한님 강의와 책을 참고하여 정리한 것입니다 (필기 및 공부정리용) https://www.inflearn.com/course/ORM-JPA-Basic# 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔 www.inflearn.com JPA공부 시작 이전에 JSP웹을 만드는 것을 공부하면서 DB접근에서 jdbc를 사용하여 개발을 하였는데 너무 반복적인 일만 하고 데이터베이스와 웹을 연결하는 역할 만을 하는 것을 느꼈고 귀찮음이 생겨 찾아보니 JPA를 통해..