생각정리/Spring (5) 썸네일형 리스트형 [JPA] 동시성 제어 테스트 코드 (H2) 낙관적 락JPA가 제공하는 낙관적 락은 버전을 이용해서 데이터를 구분하는데, 엔티티에 @version 필드를 만들어 커밋시점에 다를 경우 예외를 발생시켜서 충돌 시 재시도 처리를 해줄 수 있습니다.서비스재고 감소를 하고 커밋 때, 상품의 버전이 달라 충돌이 일어나면, 재시도 횟수를 설정해 두고 재시도 횟수 안에서 상품 처리 다시 해준다. 락 획득 시 원활한 재시도를 위해 잠깐의 텀을 주도록 한다.@Transactionalpublic Long order(Long memberId, Long itemId, int count) { // 엔티티 조회 Member member = memberRepository.findOne(memberId); // 배송 정보 생성 Delivery deliver.. [JPA] 데이터 조회 JPA, Spring Data JPA, QueryDSL을 동일한 조회 조건으로 사용해 보면서 차이점을 확인해 보면서 다양하게 숙달해 보기임시 데이터유저 게시글 양방향 매핑게시글 댓글 단방향 매핑게시글 카테고리 단방향 매핑댓글 유저 단방향 매핑유저 3명게시글 카테고리 2개유저당 게시글 5개게시글당 댓글 유저당 3개씩1. 유저가 작성한 게시글 조회마이페이지등에서 자신이 작성한 게시글들을 확인한다.1-1. 기본 조회 - 엔티티를 이용한 DTO 생성게시글 1회, 유저 1회, 카테고리 N회의 쿼리를 보낸다.// JPApublic List findUserPost(String userId) { return em.createQuery("select new study.querydsl.dto.PostResponseD.. JUnit5 예외 처리 테스트 강의 진행 중 JUnit 버전 간에 예외 처리 방식의 차이가 있다. JUnit4에서의 예외 처리 테스트 JUnit4에서는 Test 애너테이션에 expected 속성을 이용해서 해당 테스트가 지정한 예외처리 발생에 따라 테스트 유무를 알 수 있는 방법을 사용해 예외 처리 테스트를 진행한다. @Test(expected = IllegalStateException.class) public void 중복_회원_예외() throws Exception { // given Member member1 = new Member(); member1.setName("kim"); Member member2 = new Member(); member2.setName("kim"); // when memberService.join(me.. 스프링 의존성 주입 스프링 빈을 등록하는 2가지 방법 💡 컴포넌트 스캔의 범위는 SpringBootApplication이 있는 패키지의 하위 패키지안에서만 기본적으로 유효하고 이상으로는 별도의 설정이 필요하다. 컴포넌트 스캔과 자동 의존관계 설정 controller, service, repository 등 conponent 어노테이션을 가지고 있는 어노테이션을 사용한 등록 Autowired를 이용해 자동 의존관계 설정 (스프링 빈에 등록되지 않으면 사용할 수 없다.) 기본적으로 싱글톤 패턴으로 등록된다. (특수한 경우 별로 설정으로 싱글톤이 아니게 설정가능) @Repository public class MemoryMemberRepository implements MemberRepository { } 자바 코드로 직접 스프링.. Spring과 Spring boot의 차이 Spring Framework 순수 자바 객체(Plain Old Java Object)만을 사용하여 복잡성을 제거하고, 단순하고 가벼운 코드로 기업용 애플리케이션을 개발하기 위한 목적으로 개발된 프레임워크입니다. 개발자가 직접 설정 파일을 작성하여 스프링 컨테이너를 구성하고, 필요한 빈 객체를 등록하고, 빈 객체 간의 의존성을 설정해야 합니다. 제어 역전 (Inversion of Control) 메서드나 객체의 호출 작업을 개발자가 결정하는 게 아니라 프레임워크에서 제한하는 것으로 스프링 컨테이너에서 Bean 객체를 통해서 프로그램의 제어흐름을 가지고 있는 것으로 제어의 역전이라고 할 수 있습니다. 스프링은 객체의 생명 주기 및 의존성 관리를 담당하는 IoC 컨테이너를 제공합니다. 제어 역전의 핵심 목적.. 이전 1 다음