백엔드
-
Jpa Embedded백엔드 2023. 9. 6. 14:47
Jpa에서 converter를 이용해 DB에 저장하는 값과 객체에 저장하는 값을 다르게 하는 이유는 아무래도 가독성 높은 코드를 작성하기 위해서 일 것입니다. 이러한 것들을 가능하게 해주는 Entity의 Embedded 속성들을 살펴보도록 하겠습니다. 임베디드 타입으로 많이 선언하는 것은 Spring 프레임워크에서도 예시를 들어주고 있습니다. Example 1: @Embeddable public class EmploymentPeriod { @Temporal(DATE) java.util.Date startDate; @Temporal(DATE) java.util.Date endDate; ... } Example 2: @Embeddable public class PhoneNumber { protected St..
-
JPA @Query, Native Query, Converter백엔드 2023. 9. 5. 17:37
@Query @Query는 쿼리 메서드의 커스텀 버전입니다. 쿼리메서드만으로 거의 모든 조회 쿼리를 작성할 수 있지만, 2가지 경우에서 @Query가 중요한 역할을 할 수 있습니다. 1️⃣ 첫 번째는 쿼리 메서드의 가독성에 문제가 생길 경우입니다. 쿼리 메서드의 이름이 길어질 경우 사용이 어려워질 수 있습니다. public interface BookRepository extends JpaRepository { ... List findByCategoryIsNullAndNameEqualsAndCreatedAtGreaterThanEqualAndUpdatedAtGreaterThanEqual(String name, LocalDateTime createdAt, LocalDateTime updatedAt); } 위와..
-
JPA Cascade, OrphanRemoval백엔드 2023. 9. 4. 18:27
Cascade는 영속성 전이라고 합니다. 객체에서 다음 객체로 영속성을 보내준다는 의미입니다. Cascade는 연관관계가 있을 경우 설정할 수 있습니다. CascadeType public enum CascadeType { /** Cascade all operations */ ALL, /** Cascade persist operation */ PERSIST, /** Cascade merge operation */ MERGE, /** Cascade remove operation */ REMOVE, /** Cascade refresh operation */ REFRESH, /** * Cascade detach operation * * @since 2.0 * */ DETACH } Cascade란 Entity가 ..
-
Spring IOC, DI, AOP백엔드 2023. 8. 26. 11:06
Spring에 관해서 Spring 1.0 버전은 2004년 3월 출시되었습니다. 20년 정도의 세월 동안 자바 엔터프라이즈 어플리케이션 개발에서 정상의 위치를 차지하고 있습니다. 스프링 프레임워크의 구성은 20여가지로 구성되어 있습니다. 이러한 모듈들은 스프링의 핵심기능을 제공해주며, 필요한 모듈만 선택하여 사용 가능합니다. (스프링 프레임워크 모듈) 시대의 변화에 따라 마이크로서비스 아키텍처로 변환, 계속해서 진화하고 있습니다. 2000년대 초반 자바 EE 어플리케이션은 작성/테스트가 매우 어려웠으며, 한 번 테스트 하기가 번거로웠습니다. 이로 인해 느슨한 결합이 된 어플리케이션 개발이 힘든 상태였으며, 특히 데이터베이스와 같이 외부에 의존성을 두는 경우 단위 테스트가 불가능했습니다. 이러한 점들을 보..
-
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_..