본문 바로가기

전체 글87

JPA - 프록시와 연관관계(즉시로딩, 지연로딩, N + 1 문제) 들어가기 JPA는 데이터 베이스에 있는 객체를 가져올 때 우선 영속성 컨텍스트에 가져오게 된다. 그렇다면 그 객체와 연관된 객체를 가져올 때 어떻게 가져오는가? 경우는 두 가지가 있다. 첫 번째는 그 연관된 객체도 미리 영속성 컨텍스트에 올려놓는 것이다. 이 방식을 즉시 로딩이라 한다. 두 번째는 그 연관된 객체를 사용하는 시점에 가져오는 것이다. 이 방식을 지연 로딩이라 한다. 이 글에서는 이러한 두 가지 로딩 방식에 대해서 '프록시 객체'와 함께 설명할 것이다. 영속성 컨텍스트에 대한 내용이 많이 나오는데, 이에 대한 것은 https://khdscor.tistory.com/110를 참고하길 바란다. 본론 지연 로딩을 이용하기 위해선 실제 객체 대신에 데이터 베이스 조회를 지연할 수 있는 가짜 객체가 .. 2021. 7. 19.
JPA 객체 매핑- 연관 관계 1. 겍체와 테이블의 연관관계 방식 객체 연관관계로 따지면 Member 객체는 Member.team 필드로 Team 객체와 참조(주소)로 단방향 연관관계를 맺으며 member는 team필드로 Team을 알 수 있지만 Team은 Member을 알 수 없다. 테이블로 따지면 양방향 연관관계이다(단반향이 없다). MEMBER 테이블의 TEAM_ID 외래 키를 통해 TEAM과 MEMBER은 서로 조인 할 수 있기 때문이다. 2. 연관 관계 매핑JPA를 사용해서 객체방식과 테이블 방식을 매핑한다. Member 객체에 아래처럼 작성한다. @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; Member.team 과 MEMBER.TEAM_ID 를 매핑하는 것이 연관관.. 2021. 7. 8.
JAVA 스트림(Stream) 팀 프로젝트를 하면서 list를 다룰 때 종종 쓰던 것이 있는데 그것이 Stream이었다. 이 글은 다른 블로그의 내용을 참고로 내가 찾기 쉽고 보기 편하게 핵심적인 설명 및 예시만 을 정리한 글이다. 아래는 참고한 블로그 이다. 내가 적은 거보다 훨씬 잘 설명해주고 있으니 확인해보기 바란다. https://futurecreator.github.io/2018/08/26/java-8-streams/ Java 스트림 Stream (1) 총정리 이번 포스트에서는 Java 8의 스트림(Stream)을 살펴봅니다. 총 두 개의 포스트로, 기본적인 내용을 총정리하는 이번 포스트와 좀 더 고급 내용을 다루는 다음 포스트로 나뉘어져 있습니다. Java 스트 futurecreator.github.io 스트림을 사용하는 .. 2021. 7. 1.
JPA H2 데이터베이스 및 서버 실행시 자동 Insert 1. application.properties 에 아래 코드를 삽입한다. spring.h2.console.enabled=true spring.h2.console.path=/h2-console spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.hibernate.ddl-auto=create spring.jpa.properties.hibernate.format_sql=tru.. 2021. 6. 29.
JPA 간략 정리해봄 객체지향언어인 자바에서는 객체를, 데이터를 다루는 관계형 데이터베이스에서는 테이블을 다룬다. 필요한 정보를 가져오고 싶을 때는 테이블 형태의 데이터를 객체의 형태로 집어넣어야 하고 정보를 집어넣을 때는 객체 형태의 데이터를 테이블 형태로 집어넣어야한다. 수정, 삭제 또한 객체와 테이블사이의 변환이 필요하다. (즉, CRUD기능) 예를 들면, 상속관계, 연관관계 등에서 객체와 관계형데이터베이스는 표현 방식이 다르기에 일일이 각 상황에 맞게 표현을 해주어야 한다. JDBC를 이용해서 직접 sql을 짤 때 하나의 함수를 짜는데도 많은 시간이 소요된다. 여러 함수를 짜려면 더 많은 시간이 소요될 것이다. 이를 위한 것이 ORM(ObjectRelationalMapping) 프레임워크이다. ORM 프레임워크는 객체.. 2021. 6. 29.
JPQL 개념과 스프링 데이터 JPA 쿼리메서드 이용 JPA를 사용하여 프로젝트를 구현할 때 스프링 데이터 JPA를 이용하고 repository 인터페이스를 작성하여 CRUD기능을 사용하였을 것이다. 우리는 JPA를 사용하기 위해 Repository를 만들고 CRUD기능을 수행할 수 있다. 하지만 간단한 형식의 엔티티만을 가져올 뿐이지 특정 범위, 특정 경우, 특정 순서 등 복잡한 경우에 적용하기는 힘들다. 이러한 경우는 자세한 sql문을 이용해서 해결할 수 있다. ORM은 엔티티 객체를 대상으로 개발하므로 검색을 위한 sql문도 엔티티 객체를 대상으로 해야 하기에 JPQL을 사용한다. 스프링 데이터 JPA에서는 복잡한 쿼리를 쿼리 메서드를 이용하여 JPQL을 직접 짜는 것이다. 이 글에서는 JPQL에 대해서는 간단한 설명과 파라미터 바인딩에 대해서만 설명.. 2021. 6. 27.