본문 바로가기

전체 글

(86)
연관관계 매핑 종류 / 방향 객체지향에서는 여러 객체에 나누어 객체 간 협력을 하며 기능≫ 객체들을 서로 연결할 수 있도록 객체 간 참조 사용!≫ 객체지향과 DB 간의 차이 발생객체지향 : 객체 간 참조를 사용해 객체들을 연결DB : 테이블의 외래키를 사용해 정규화 연관관계 매핑JPA에서 성능을 결정하는 중요한 요소연관관계 설정을 통해 객체 '참조'와 테이블의 FK를 매핑시켜 사용방향성(Direction), 다중성(Multiplicity) ≫ 두 가지 기준 존재 방향성 (Direction)방향설명단방향두 엔티티 관계에서 한쪽 엔티티만 참조양방향두 엔티티 관계에서 양쪽 엔티티가 서로 참조: A → B, B → A  예)1. 게시글 객체가 참조 변수를 통해 댓글 객체만 참조하면 ≫ 단방향 2. 댓글 객체도 게시글 객체를 참조 변수를 통..
JPA Auditing / Base Entity Audit엔티티와 관련된 이벤트를 추적하고 기록Audit (감사) : '감독하고 검사함'Entity 버전 관리와 관련된 이벤트를 추적하고 기록하는 것이벤트 : Entity의 Create, Update, Delete와 같은 작업 Audit 구현하기Spring Data JPA는 @EntityListeners 어노테이션을 사용해 자체 JPA 엔티티 리스너 클래스인 AuditingEntityListener를 제공@EnableJpaAuditing과 @EntityListeners(AuditingEntityListener.class) 설정≫ 이벤트 리스너가 Content에 대한 정보를 Auditing할 수 있게 됨 SpringBootApplication(PostApplication.java 파일)에 @EnableJp..
Lombok Lombok반복되는 코드를 줄이기 위한 Java LibraryJava 라이브러리로 getter, setter, 생성자 등 반복적으로 쓰이는 코드들을 어노테이션 만으로 쉽게 설정 가능하게 함Lombok을 사용하기 위해서는 Gradle Dependency에 추가해야 함 Lombok 프로젝트에 적용하기Gradle 설정 파일 (build.gradle)에 추가원하는 class 위에 Lombok 어노테이션을 붙이면 자동으로 컴파일 시 생성됨예) getter 메소드 (public Long getId{})를 @getter로 대체 가능@Getter : 필드 모두에 Getter를 생성@Setter : 필드 모두에 Setter를 생성@NoArgsConstructor : Argument가 없는 생성자 코드 생성 많이 쓰이는 ..
@Query 어노테이션 Query Method 방법메소드명으로 쿼리 생성@Query 사용JPQL(Java Persistence Query Language)을 사용하여 Query를 생성 JPQL (Java Persistence Query Language)객체지향 쿼리, DB 테이블이 아닌 엔티티 객체를 조회JPA 일부에 정의되어 있으며, DB 종류(Oracle, MySQL, PostgreSQL, ...)에 영향을 받지 않고 작성할 수 있는 장점이 있음 위치기반 (indexed) 쿼리 파라미터?1 ≫ 첫 번째 파라미터인 emailAddress의 값이 전달됨만약 파라미터가 (String emailAddress, String name) 식이었다면?1은 emailAddress / ?2는 name을 전달하게 됨 명명된 (named) 쿼리..
페이징 / 정렬 처리 PaginationDataset을 더 작고 관리하기 쉬운 Chunk로 나누는 기술server가 client의 요청에 전체 dataset을 응답하는 것이 아닌, 나눠진 dataset을 응답지금 보고 있는 페이지에 표시할 데이터만 데이터베이스에서 가져오게 됨 Pagination이 필요한 이유성능전체 데이터 대신 필요한 데이터만 빠르게 응답할 수 있음수십만 개의 데이터를 한 번에 응답한다면 → 리소스는 많이 사용, 클라이언트에서의 응답은 느림더 나은 UX사용자에게는 반응이 빠른 인터페이스 제공초기 결과를 빠르게 볼 수 있고 추가 데이터를 요청할 수 있게 됨 PagingAndSortingRepository전체 문서들을 개별 페이지로 나누는 Pagination과 정렬하는 Sorting을 사용할 수 있게 됨데이터 ..
Spring Data JPA 이용하기 1. 데이터베이스 연동하기 (JPA)환경 설정 build.gradle 파일에 Spring Data JPA 라이브러리 추가implementation 'org.springframework.boot:spring-boot-starter-data-jpa'runtimeOnly 'mysql:mysql-connector-java'resources/application.properties 파일에 데이터베이스 접속 정보와 JPA 설정 추가spring.datasource.url=jdbc:mysql://localhost:3306/boardspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.username=usernamespring.data..
영속성 컨텍스트 영속성 컨텍스트엔티티를 영구 저장하는 환경애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 역할 수행엔티티 매니저 (Entity Manager)를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리서비스에는 하나의 엔티티 매니저 팩토리 (Entity Manager Factory)가 존재하며 엔티티 매니저 팩토리에서 데이터베이스에 접근하는 트랜잭션이 생길 때마다 엔티티 매니저를 생성하여 영속성 컨텍스트에 접근 엔티티 생명주기비영속 (New/Transient)엔티티 객체를 생성했지만 아직 영속성 컨텍스트에 저장하지 않은 상태영속 (Managed)엔티티 매니저를 통해서 엔티티가 영속성 컨텍스트에 저장된 상태영속성 컨텍스트에 의해 관리되는 상태준영속 ..
JPA / Hibernate / Spring Data JPA JPAJava Persistence Api자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스인터페이스이기 때문에 Hibernate나 EclipseLink 등으로 JPA를 구현! 하이버네이트 (Hibernate)JPA 인터페이스 명세를 구현한 구현체 중 하나하이버네이트가 가장 널리 사용되고 있는 구현체EclipseLink나 OpenJPA 등 다른 구현체를 선택해서도 사용 가능 Spring Data JPASpring에서 JPA를 편리하게 사용할 수 있게 지원하는 라이브러리CRUD 인터페이스 제공repository 개발 시 인터페이스만 작성하면 실행 시점에 객체를 동적으로 생성해서 주입데이터 접근 계층 개발 시 인터페이스만 작성하면 됨!Hibernate에서 자주 사용되는 기능을 보다 ..