JPA

Spring boot

[스프링 데이터 접근 활용 기술] JPA, Spring Data JPA, QueryDSL의 활용

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2 스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인 www.inflearn.com 김영한 님의 스프링 DB 2편을 기반으로 작성한 내용입니다. SQL Mapper jdbcTemplate, myBatis ORM JPA JPA, Spring Data JPA, Query dsl의 장,단점을 파악하고, 적절하게 각 기술들을 활용하는 방법에 대해 알아보자. JPA JdbcTemplate이..

Spring boot

[spring 데이터 접근 핵심 원리 4] transaction - 1

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard 스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 www.inflearn.com 김영한님의 위 강의를 바탕으로 작성하였습니다. 데이터를 저장할 때, 파일로 저장하지 않고 "데이터 베이스" 로 저장하는 이유 -> 대표적인 이유는 "트랜잭션" 때문이다. 이번 글에선 스프링을 통해 @Transactional 어노테이션으로 단순화 되었던 트랜잭션 로직이 내부에서 어떻게 ..

back-end study

[Optimization] 인덱싱(indexing)을 통한 성능 개선 분석

indexing이란? 인덱스를 설정하면 해당 컬럼들의 값을 해시 맵 형태로 메모리에 저장해두고 검색할 때 메모리에서 검색을 먼저 하고 해당하는 행을 찾아 반환하지만 인덱스 생성하는데에도 비용이 들고, 데이터 수정, 추가 시마다 업데이트가 필요하기에 데이터의 추가, 수정 삭제에 대한 처리 속도가 낮아진다. 그렇기에 인덱싱으로 "유의미한" 검색 성능 향상을 만들 수 없다면, 만들지 않는 것이 좋다. 그럼 언제 인덱싱이 효과적이지 못할까? 인덱싱이 효과적이지 않은 상황 - 작은 테이블: 작은 크기의 테이블에서는 인덱스가 적용되어도 큰 차이를 만들지 못할 수 있다. 이런 경우에는 인덱스를 적용하는 대신에 테이블을 자주 스캔하는 것이 더 효율적일 수 있다. - 자주 변경되는 테이블: 자주 데이터를 추가, 수정, ..

Spring boot

[JPA] Part 6 (객체지향 쿼리 언어 pt.2)

*김영한님의 JPA 기본편을 기반으로 작성하였습니다. jpql 경로 표현식 미리 보는 결론: "묵시적 join 사용하지말고 전부 명시하자!" ( 복잡한 db에서 묵시적 join이 발생 시, 인과관계 파악이 어려워진다. ) 상태 필드(state field): 경로 탐색의 끝, 탐색X ex) m.username. -> username이 마지막, 더 내려갈 수 없다. 단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색O select m.team from Member m; -> Member와 Team을 join 한 뒤, select(projection) 으로 team을 가져온다(묵시적 join 발생). 이와 같은 묵시적 join이 발생 되지 않게 주의하자. 컬렉션 값 연관 경로: 묵시적 내..

Spring boot

[JPA] Part 5 (객채지향 쿼리 언어 pt.1)

*김영한님의 JPA 기본편을 기반으로 작성하였습니다. JPA는 다양한 쿼리 방식을 지원한다. JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 보통Jpql, QueryDSl로 쿼리를 짜고, 매우 복잡한 극소수의 쿼리들은 SpringJdbcTemplate을 통해 Native SQL로 구현 JPQL이란? JPQL은 Java Persistence Query Language의 약자로, 객체를 관리하는 Java Persistence API(JPA)의 일부분 JPQL은 객체 지향적인 방식으로 데이터베이스를 조회하고 조작할 수 있도록 해준다. JPQL은 SQL과 매우 유사하게 생겼지만, 객체를 대상으로 쿼리를 작성..

Spring boot

[JPA] Part 4 (값 타입)

*김영한님의 JPA 기본편을 기반으로 작성하였습니다. JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예)회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 기본값 타입 자바 기본 타입(int, double) • 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입): 좌표값 등을 묶어서 값으로 쓰고 싶을 때, x,y좌표를 클래스로 묶어 값처럼 사용 컬렉션 값 타입(coll..

Spring boot

[JPA] Part 3 프록시와 연관관계

*김영한님의 JPA 기본 강의를 기반으로 작성하였습니다. 프록시: 실제 엔티티가 아닌 가짜 클래스. 실제 클래스를 상속받아 만들어진다. 껍데기는 똑같지만, id, name 등 기본정보만 보유하고 있다. 프록시 객체는 실제 객체의 참조를 보관하고, 프록시 객체 호출 시 프록시 객체는 실제 객체의 메소드 호출. ex) 프록시에서 A 메소드를 호출 -> 실제 객체의 A메소드 호출 member를 조회하는 상황에서 꼭 Team도 불려야 할까? (즉시 로딩) 필요할 때 불러 쓰자( 지연 로딩 ) member 생성시점에서는 member만 select하고, team은 select 하지 않는다. member.getTeam() 등으로 team이 필요한 시점에 DB에 쿼리를 넣어서 가져온다. 이걸 프록시로 처리할 수있다. ..

Spring boot

[JPA] Part2 (심화 매핑)

*김영한님의 JPA 기본 강의를 기반으로 작성하였습니다. [연관관계 매핑 기초] 객체와 RDB 사이에는 패러다임의 차이가 있다. 객체는 "참조"로 연관된 객체를 찾고, 테이블은 "외래 키를 통한 Join"으로 연관된 테이블을 찾는다. 이러한 차이를 기반으로 객체의 참조와 테이블의 연관관계( 외래 키)의 매핑에 대해 파악해야한다. 모델링 시 "객체" 를 중심으로 돌아가게 설계하는 것이 "객체 지향적 설계" 이고, 만약 RDB 테이블에 객체를 맞춰지게 데이터 중심으로 설계하게 되면, 그것을 객체지향적으로 올바르지 못한 설계이다. @JoinColumn은 DB 관점으로 보았을 때, 본인이 외래 키를 관리하며 상대 Table의 PK(Join할 때 사용)를 명시해주는 역할을 한다. mappedBy 역시 특정 관계와..

코앤미
'JPA' 태그의 글 목록