Backend/Spring

이번 포스팅에서는 JPA 트랜잭션의 동시성을 제어하는 방법에 대해서 알아보겠다. 우선 작성한 상품 주문 로직에 대해서 살펴보겠다. 상품 주문 로직 작성 ▶ OrderService.java @Transactional public Long order(Long id, Long itemId, int count){ //엔티티 조회 Member member = memberRepository.findOne(id); Item item = itemRepository.findOne(itemId); //배송정보 생성 Delivery delivery = new Delivery(); delivery.setAddress(member.getA..

영속성 컨텍스트 JPA에서 영속성 컨텍스트는 엔티티를 관리하는 논리적인 개념 영속성 컨텍스트는 어플리케이션과 DB사이에서 객체를 보관하는 가상의 DB같은 역할을 한다 엔티티를 메모리에 저장하고, 엔티티의 생명주기를 관리하며, 엔티티와 데이터베이스 간의 작업을 캐시해서 처리하는 작업을 수행한다. 1. 엔티티의 생명주기 관리 새로운 엔티티를 생성할 때 EntityManager를 사용하여 영속성 컨텍스트에 저장 영속 상태의 엔티티는 영속성 컨텍스트에 의해 관리되며, 변경 사항이 있으면 자동으로 감지하여 데이터베이스에 반영된다. 엔티티를 삭제하면 영속성 컨텍스트에서 제거된다. 의도적으로 영속성 컨텍스트에서 엔티티를 비영속 상태로 만들 수 있음 2. 엔티티와 데이터베이스 간의 작업을 캐시 엔티티를 조회할 때, 영..

Repository Repository는 데이터베이스와의 상호 작용을 담당하는 모듈 계층이라고 하였다. Repository 구조 작성 @Repository @RequiredArgsConstructor public class ItemRepository { private final EntityManager em; } 어노테이션으로 Spring Boot에 Repository임을 명시해준다. 엔티티와 상호작용 하기 위해서 EntityManager를 의존성 주입받는다. Select @Repository @RequiredArgsConstructor public class ItemRepository { private final EntityManager em; public Item findOne(Long id){ re..

Repository Repository는 데이터베이스와의 상호 작용을 담당 Repository는 데이터베이스에 액세스하기 위한 메서드를 정의하고, 데이터를 검색, 저장, 업데이트 및 삭제하는데 사용 @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; public void save(Member member){ em.persist(member); } } @Repository 어노테이션은 Spring에서 Repository 계층의 빈으로 등록하기 위해 사용 EntityManager는 JPA에서 데이터베이스와 상호작용을 위해 사용되는 인터페이스. EntityManager는 영속성 컨텍..

엔티티 클래스 @Entity @Table(name = "orders") @Getter @Setter public class Order { } @Entity는 해당 클래스가 엔티티 클래스임을 Spring에 알려준다. @Table은 엔티티 클래스가 매핑될 테이블을 지정하며, 지정하지 않을 시 하이버네이트의 테이블명 생성 전략에 따라 자동으로 생성된다. @Getter와 @Setter은 Lombok에서 제공하는 어노테이션. @Setter의 경우에는 필요한 부분에서만 부분적으로 사용해야 한다. 변경 포인트가 많아져 예측이 어렵다. 이에 대해서는 후술하려고 한다. 테이블 컬럼 생성 @Entity @Table(name = "orders") //테이블 이름 변경 @Getter @Setter public class O..

H2 데이터베이스 개발이나 테스트 용으로 주로 사용되는 가벼운 DB, 데이터베이스 사용자 UI를 제공한다. H2 데이터베이스 다운로드 https://www.h2database.com H2 Database Engine (redirect) H2 Database Engine Welcome to H2, the free SQL database. The main feature of H2 are: It is free to use for everybody, source code is included Written in Java, but also available as native executable JDBC and (partial) ODBC API Embedded and client/server mo www.h2dat..

프로젝트 생성 프로젝트는 Java 기반의 Gradle 프로젝트 생성 버전은 2점대 버전 사용 예정 스프링 부트 3.0 이상을 사용하게 될 시에는 JDK 17버전 이상, Javax 패키지를 사용할 수 없으므로 패키지 이름을 Jakarta로 변경해야 한다고 함 Dependency에 사용할 패키지를 추가한 후 프로젝트를 생성하면 기본 보일러 플레이트가 제공된 스프링 프로젝트가 다운로드됨 프로젝트 구조 src : 프로젝트의 기능을 구현하는 코드들을 작성. main : 실제 코드들 test : 테스트 주도 개발을 위한 코드들 작성 gradle : xml을 통한 프로젝트 세팅 대신 Groovy 기반의 빌드를 위한 프레임워크. 빌드의 자동화를 지원해줌, Maven과 더불어 많이 사용됨 gradlew, gradlew...