본문 바로가기
728x90

전체 글216

jpa 지연로딩 사용 주의점 (jpa 지연 로딩과 조회 성능 최적화) 주문 API를 만들며 만난 jpa 지연로딩 문제와 주의점. XToOne 성능 최적화에 대한 이야기이다. 우선 주문 API는 다음과 같은 구조다. (전부 XToOne 관계) order - member (ManyToOne) order - delivery (OneToOne) order - orderitem : XToMany @GetMapping("/orders") public List orders() { List all = orderRepository.findAllByString(new OrderSearch()); for (Order order : all) { order.getMember().getName(); order.getDelivery().getStatus(); List orderItems = orde.. 2022. 10. 13.
Setter없이 Entity update 값의 변화점을 예측하기 힘들어지게하는 Setter는 지양해야 한다. 이후 Setter에 의한 문제가 발생할 여지를 남겨두는 것은 좋지 않기 때문이다. 물론 '무조건' 쓰지 말아야 하는 것은 아니다. 단순히 필드 하나만 변경하는 경우라면 setter를 써도 된다. 그럼 Setter없이 어떻게 Entity를 update 할 수 있을까? update가 필요한 값만을 받는 메서드를 따로 생성해 그것을 명시적으로 사용하면 된다. @RestController ... @PostMapping("/update/{id}") public void updateCategory(@PathVariable("id") Long id, @RequestBody CategoryDto categoryDto) { categoryService... 2022. 10. 9.
[JAVA] Optional 클래스 Spring Data JPA를 사용하며 CrudRepository의 findById 메서드 리턴 타입인 Optional 클래스를 살펴보았다. Optional은 Java 8에 추가된 새로운 API이며 'null일 수도 있는 객체'를 감싸는 일종의 Wrapper 클래스로, 여러 if 로직 대신 언어 차원에서 null 문제를 해결할 수 있게 해준다. 한마디로 null 처리를 세련되게 다룰 수 있게 도와주는 녀석이다. Optional optional 이러한 optional 변수 내부에는 null이 아닌 T 객체가 있을 수도 있고 null이 있을 수도 있다. Optional 클래스는 여러 가지 API를 제공하여 null일 수도 있는 객체를 다룰 수 있도록 돕는다. null 처리를 세련되게 다룰 수 있다고 했는데,.. 2022. 10. 6.
도메인 모델 패턴, 트랜잭션 스크립트 패턴 (Domain Model Pattern, Transaction Script Pattern) 도메인 모델 패턴, 트랜잭션 스크립트 패턴 마틴 파울러가 재창한 두개의 개념으로, 비즈니스 로직을 처리하는 2가지 패턴을 말한다. 책임 소재가 Domain Level이냐 Script Level이냐의 차이에 따라 구분된다. 1. 도메인 모델 패턴 (Domain Model Pattern) 이란 Domain 부분에서 비즈니스 로직을 가지고 객체 지향의 특성을 적극 활용 하는 것을 도메인 모델 패턴이라 한다. 대부분의 비즈니스 로직이 엔티티 안에 구성되어있다. 서비스 계층은 엔티티에 필요한 역할을 위임하는 역할을 한다. 엔티티 안에 비즈니스 로직을 가지고 객체지향을 활용하는 기법이다. 도메인 모델? 도메인을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화 시킨 것. 즉, 특정 도메인을 개념.. 2022. 10. 3.
[JPA] No Property 메소드명 found 에러 해결방법 (No property 'xx' found for type 'x') No property 'xx' found for type 'x' Repository에 만들어둔 메소드명이 Entity에 존재하지 않기 때문에 사용할 수 없다는 에러. 메서드 명 종류가 꽤 많기 때문에 전체 리스트는 아래 링크를 참조해서 고치면 된다. https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords Spring Data JPA - Reference Documentation Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRep.. 2022. 10. 1.
[SQL] Primary Key, Unique 제약조건 DB에 not null unique 제약조건 걸어주면서 정리 Primary Key 테이블의 행을 구분하는 키워드로 사용하고, Not null + Unique index key가 자동으로 부여 된다.(index key : 책갈피와 유사한 역할, 검색속도 향상시킴) 반드시 데이터를 입력해야 하면서 값이 중복되면 안되는 필드에 사용한다. ex) ID, 사원번호(empno), 주민등록번호, 이메일 등 Unique 입력하지 않아도 되지만 중복된 값은 저장되지 못하게 하는 제약조건. null값('')은 허용하지만 동일한 값이 저장되는 것만은 허용하지 않는다. 2022. 10. 1.
[JPA] validMemberEmailDuplicate 문제점 다음 코드의 문제점 private void validMemberEmailDuplicate(String email) { if (memberRepository.existsByEmail(email)) throw new MemberEmailDuplicateException("이미 사용중인 이메일 입니다."); } 동일한 맴버 아이디가 중복 가입이 될 수 있다. was가 동시에 여러개 뜨는데(멀티스레드) 예를들어 "맴버A" 라는 사용자가 정말 동시에 DB insert를 하게 되면, 동시에 "맴버A"라는 회원이 두 명 가입된다. 이런 문제가 생길 때 최후의 방어를 위해 DB의 member email에 유니크 제약조건을 걸어야 한다. 2022. 9. 30.
[JPA] Spring Data JPA 반환 타입 Spring Data JPA Spring Data JPA는 스프링에서 JPA를 편리하게 사용할 수 있도록 지원하는 모듈이다. 데이터 접근 계층을 개발할 때 지루하게 반복되는 CRUD 문제를 세련된 방법으로 해결할 수 있게 해준다. CRUD 처리를 위한 공통 인터페이스를 제공해주고, 인터페이스만 작성하면 동적으로 구현체를 생성해서 주입해주기 때문에 인터페이스만 작성해도 개발을 완료할 수 있다. (설정과 구현에 대한 내용은 아래 링크 참고) https://blog.naver.com/ghdalswl77/222314410957 Spring Data JPA 1. Spring Data JPA Spring Data JPA는, JPA를 쓰기 편하게 만들어 놓은 모듈이다. 스프링 부... blog.naver.com 반환.. 2022. 9. 30.
[Spring Data JPA] extends JpaRepository VS @Repository 우선 extends JpaRepository는 Spring Data JPA라는 기술을 사용했다. 이에 대한 개념을 간단히 이해하고 둘을 비교해보자. Spring Data JPA Spring Data JPA는 스프링에서 JPA를 편리하게 사용할 수 있도록 지원하는 모듈. CRUD 처리를 위한 공통 인터페이스를 제공해주고, 인터페이스만 작성하면 동적으로 구현체를 생성해서 주입해주기 때문에 인터페이스만 작성해도 개발을 완료할 수 있다. 설정과 구현에 대한 내용은 아래 링크 참고) https://blog.naver.com/ghdalswl77/222314410957 Spring Data JPA 1. Spring Data JPA Spring Data JPA는, JPA를 쓰기 편하게 만들어 놓은 모듈이다. 스프링 부.. 2022. 9. 30.
728x90