728x90

spring 33

회원등록 API v1, v2 차이

회원등록 API v1, v2 차이 비교 회원등록 V1: 요청 값으로 Member 엔티티를 직접 받습니다. 문제점 엔티티에 프레젠테이션 계층을 위한 로직이 추가됩니다. 엔티티에 API 검증을 위한 로직이 들어갑니다. (@NotEmpty 등등) 실무에서는 회원 엔티티를 위한 API가 다양하게 만들어지는데, 한 엔티티에 각각의 API를 위한 모든 요청 요구사항을 담기는 어렵습니다. 엔티티가 변경되면 API 스펙이 변합니다. 결론 - API 요청 스펙에 맞추어 별도의 DTO를 파라미터로 따로 생성하여 받는것이 좋습니다. @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member){..

JPA 2022.02.14

변경 감지(dirty check)와 병합(merge)

(JPA)변경 감지와 병합(merge) 엔티티를 수정하는 2가지 방법으로 변경 감지(dirty checking)와 병합(merge)이 있습니다. 변경 감지 기능 사용 영속성 컨텍스트에서 엔티티를 다시 조회한 후에 데이터를 수정하는 방법입니다. 트랜잭션 안에서 엔티티를 다시 조회, 변경할 값 선택 트랜잭션 커밋 시점에 변경 감지(Dirty Checking) 이 동작해서 데이터베이스에 UPDATE SQL 실행합니다. @Transactional void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티 Item findItem = em.find(Item.class, itemParam.getId()); //같은 엔티티를 조회한다. findItem.setP..

JPA 2022.02.14

JPAQueryFactory를 필드에서 제공하자(feat. 동시성 문제는 스프링이 해결)

(Java JPA) JPAQueryFactory를 필드로 제공할 때, 동시성 문제 (As-is) → 기존 JPAQueryFactory를 메소드 안에 생성한 버전 @SpringBootTest @Transactional public class QuerydslBasicTest { @PersistenceContext EntityManager em; @Test public void startQuerydsl() { JPAQueryFactory queryFactory = new JPAQueryFactory(em); //JPAQueryFactory를 메소드 안에 생성 QMember m = new QMember("m"); Member findMember = queryFactory .select(m) .from(m) .w..

JPA 2022.02.14
728x90