분류 전체보기
-
JPA Transaction백엔드 2023. 8. 25. 16:44
Transaction Transaction은 DB에서 다루는 개념입니다. DB에서는 Transaction이라는 단위로 여러가지 명령어들의 묶어서 사용하고 있습니다. Jpa에서 Transaction을 설정하기 위해서는 @Transactional 어노테이션을 설정해주면 됩니다. 예시) 어떤 상품에 대한 주문이 일어날 경우, Order 테이블과 Payment 테이블에 insert가 동시에 모두 일어나야 합니다. Order라는 테이블에 insert가 정상적으로 동작하고 Payment 테이블에 insert 도중 오류가 발생해 실패했다면, 주문은 정상 동작했지만 결제는 되지 않은 현상이 발생할 수 있습니다. 그래서 이러한 상황에서는 결제와 주문을 하나의 Transaction 안에서 해결하도록 하여 하나의 테이블에서..
-
영속성 컨텍스트, Entity Cache, Entity Lifecycle백엔드 2023. 8. 24. 17:20
영속성 컨텍스트 (persistent context) 프레임워크에서 컨테이너들이 관리하고 있는 내용들을 컨텍스트라고 합니다. 스프링의 빈들을 로딩하고 관리하는 일련의 작업들은 스프링 컨텍스트 위에서 활용되고 있습니다. 즉, persistent container가 관리하는 내용입니다. 영속화 - 사라지지 않고 지속적으로 접근할 수 있다는 의미입니다. Jpa 또한, Java Persistent Api입니다. 데이터를 영속화하는데 사용하는 컨테이너가 영속성 컨텍스트입니다. 영속성 컨텍스트의 가장 주체적인 역할을 하는 클래스는 Entity Manager라는 빈입니다. 현재까지 영속성 컨텍스트 설정에 대해 신경을 쓰지 않고도 Jpa 를 활용할 수 있었던 이유는, spring-data-jpa에 의해 spring b..
-
Jpa 연관관계 살펴보기 (N:N)백엔드 2023. 8. 23. 14:39
다대다 관계에 있는 Entity의 설정 과정을 살펴보도록 하겠습니다. 중간 테이블을 자동으로 생성하는 @ManyToMany 방식보다는 매핑 테이블을 별도로 만들어서 각각의 엔티티와 1:N N:1 관계를 맺도록 해보도록 하겠습니다. ERD 이전 시간에 살펴본 ERD에서 다대다 연결 관계를 가지고 있는 book과 author를 통해 살펴보도록 하겠습니다. 우선 book과 author 중간 매핑 테이블을 만들어줄 Entity를 선언해줍니다. BookAndAuthor @Entity @NoArgsConstructor @Data public class BookAndAuthor { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Ma..
-
JPA 연관관계 살펴보기 (1:1, 1:N, N:1)백엔드 2023. 8. 21. 23:18
현재까지 Entity 객체 설정 방법과 Entity에서 원하는 컬럼의 값을 조회해보거나 새로운 값을 넣는 방법에 대해 살펴보았습니다. 이번 포스팅에서는 연관관계에 있는 엔티티들을 어떻게 매핑시키는지에 대해 알아보도록 하겠습니다. ERD ERD(Entity Relation Diagram)는 다음과 같습니다. user - user_history : 1:N 관계 user - review : 1:N 관계 book - book_review_info : 1:1 관계 book - review : 1:N 관계 book - author : N:N 관계 위와 같이 4개의 연관 관계를 갖는 Entity가 존재합니다. 위 관계들을 실제 Entity에 설정해보도록 하겠습니다. 1:1 연관 관계 book과 book_review_..
-
Entity annotation, Listener백엔드 2023. 8. 19. 16:11
@Entity @Entity 어노테이션은 해당 객체가 JPA에서 관리하고 있는 Entity객체임을 선언합니다. 엔티티 객체에는 레코드를 유일하게 판별할 수 있는 PK값이 반드시 존재해야합니다. 해당 PK컬럼에 @Id 어노테이션을 통해 지정할 수 있습니다. @GeneratedValue PK값으로 사용되는 id의 경우 사용자가 직접 값을 넣어주는 것이 아닌 생성된 값을 사용하게 됩니다. @GenerateValue를 통해 자동 생성되는 값을 PK에 넣어 줄 수 있습니다. @Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface GeneratedValue { /** * (Optional) The primary key generation strategy * ..
-
JPA 쿼리메서드백엔드 2023. 8. 18. 23:45
이전 시간에 Java의 ORM 표준 스펙인 JPA을 활용할 수 있도록 해주는 JpaRepository의 내부 코드를 살펴보았습니다. 이번에는 좀 더 복잡한 쿼리들을 repository 내부에 정의하여 사용하는 방법에 대해 배워보도록 하겠습니다. 쿼리 메서드 선언 위치 JpaRepository를 상속받고 있는 repository interface 내부에 Spring Data Jpa에서 명시하고 있는 키워드를 이용해 쿼리메서드를 정의하고 사용할 수 있습니다. @Repository public interface UserRepository extends JpaRepository { // 선언 위치 } 리턴 타입 네이밍 규칙으로 만들어진 메서드들에 의해 반환되는 값들의 타입을 개발자가 정의할 수 있습니다. 쿼리 ..
-
JPA 살펴보기백엔드 2023. 8. 17. 23:40
프로젝트 구성에 앞서 Spring 프레임워크에서 백엔드에 접근하기 위해 JPA를 사용하게 되어서 JPA에 대해 정리를 해보려고 합니다. JPA에 대한 설명에 앞서 ORM에 대해 알아야 합니다. ORM이란 Object Relational Mapping으로 어플리케이션의 클래스와 RDB를 매핑시켜주는 것으로 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화시켜주는 기술입니다. 정의한 객체를 사용하는 것만으로도 자연스럽게 데이터를 연결해 사용할 수 있습니다. JPA는 Java Persistence Api의 약자로 Java의 ORM 표준 스펙으로 데이터베이스에 접근하기 위한 api 규격을 정의해 놓은 것입니다. orm이 전체적인 개념이라고 하면 jpa가 그 기능을 정의한 스펙이라고 볼 수 있습니다. JPA에..
-
Lombok 살펴보기언어/Java 2023. 8. 16. 09:48
현재의 자바 코딩에서 롬복은 필수적으로 사용되고 있습니다. 여러가지 필드 변수들을 통해 Getter, Setter를 구성하는 JPA 특성 상 꼭 필요한 라이브러리입니다. 그렇기 때문에 롬복에 대해 먼저 살펴보도록 하겠습니다. lombok 의존성 추가 dependencies { compileOnly("org.projectlombok:lombok") annotationProcessor("org.projectlombok:lombok") } @Getter, @Setter Class User { private String name; private String email; private String phoneNumber; private LocalDateTime createdAt; } 위와 같이 외부에서 접근할 수 ..