Category 114

Spring Data JPA Bulk Update & Entity Graph

지난 포스팅에서는 Spring Data JPA를 사용해서 페이징 처리를 손쉽게 구현했어요. 오늘은 벌크 업데이트와 엔티티 그래프에 대해 알아보려 합니다. 개요 Bulk Update는 클라이언트의 요구 조건에 맞는 데이터들을 한번에 변경하는 것을 의미합니다. JPA에서는 변경 감지(더티 체킹)를 해서 데이터를 업데이트하기 때문에, 한 번에 수정하기 위한 쿼리가 필요하고 그 쿼리를 벌크 수정이라고 불러요. Entity Graph는 연관된 엔티티들을 SQL 한번에 조회하는 방법입니다. 사실상 fetch join의 간편 버전이라고 할 수 있어요. 그럼 한번 살펴볼까요? Bulk Update📗 Bulk update의 방법으로는 순수 JPA를 사용하는 방법과 Spring Data JPA의 @Query를 사용하는 방..

JPA 2022.10.14

Spring Data JPA 페이징 처리

지난 포스팅에서는 Spring Data JPA를 이용해 쿼리 메서드를 처리하는 방법에 대해 알아보았습니다. 오늘은 페이징 처리에 관해 이야기해보려 해요. 대게 실무에서는 페이징 처리를 거의 필수적으로 사용하는데, 복잡한 코드들이 Spring Data JPA에서는 얼마나 간편하게 해결할 수 있는지 살펴볼게요😄 개요 페이징 처리를 한번이라도 직접 구현해보셨다면 생각보다 복잡한 것을 아실 텐데요. 예를 들어, 단순히 1페이지에 10개씩 데이터만 가져오는 것이 아닌 조건에 맞는 데이터의 총 개수와 마지막 페이지가 몇 인지, 다음 페이지가 있는지에 대한 유무 등 클라이언트의 요구 조건에 맞게 구현해야 합니다. 저도 처음 회사 입사했을 때 JPA를 사용하지 않았기 때문에 손수 이전에 계셨던 선배님들이 짜놓았던 페이..

JPA 2022.10.14

Spring Data JPA 쿼리 메서드

지난 포스팅에서는 Spring Data JPA를 이용해서 JPA를 편리하게 사용하는 방법에 대해 알아봤었어요. 하지만 JpaRepository의 기능만으로는 실무의 모든 기능들을 구현할 수 없기 때문에, 로직에 맞는 함수를 정의해야 할 때가 있어요. 오늘은 그 방법인 쿼리 메서드에 대해 알아보려 합니다 개요 예제 도메인 모델과 모델에 맞는 Entity, Repository는 지난 포스팅에서 작성했어요. 이어서 진행하기 때문에, 이번 포스팅만 보시면 이해하기 어려우실 수 있습니다😅 포스팅에서는 간단한 예제만 다룹니다. 조금 더 정확한 메서드들과 사용 방법은 해당 래퍼런스에서 확인해주세요! Spring Data JPA - Reference Documentation Example 109. Using @Tran..

JPA 2022.10.13

Spring Data JPA와 기존 JPA의 차이점 및 사용법

JPA를 사용하면 무수히 많은 CRUD의 반복, 객체와 데이터베이스 매핑 관계의 반복 등 지루한 코드들에서 탈출할 수 있고 또 다른 장점들도 많이 존재합니다. 혹여나 기존 JPA를 모르신다면 해당 링크를 참고해주세요. 이 포스팅은 JPA를 좀 더 쉽게 사용할 수 있는 Spring Data JPA의 사용법을 초점으로 작성하였습니다. 개요 사실 Spring Data JPA와 순수 JPA의 차이점이라는 제목이 어울리는지는 잘 모르겠네요. Spring Data JPA는 JPA를 좀 더 쉽게 사용할 수 있게 도와주는 라이브러리라고 생각하시면 될 것 같아요. 하지만, 순수 JPA를 정확히 모르는 상황에서 Spring Data JPA를 사용하시는 것은 좋지 않습니다. Spring Data JPA에서는 많은 함수를 제..

JPA 2022.10.13

자바 ORM 표준 JPA 프로그래밍 - 엔티티 매핑

JPA를 사용하는 데 가장 중요한 일은 엔티티와 테이블을 정확히 매핑하는 것이다. 따라서 매핑 어노테이션을 정확히 숙지하고 사용해야 한다. JPA는 다양한 매핑 어노테이션을 지원하는데 크게 4가지로 분류한다. 오늘은 이 4가지 부류의 매핑에 대해서 알아보려 한다. 개요 매핑 어노테이션은 크게 객체와 테이블 매핑, 기본 키 매핑, 필드와 칼럼 매핑, 연관관계 매핑으로 나눌 수 있다. 물론 XML을 사용하여 매핑할 수 있지만, 어노테이션을 사용하는 방법이 좀 더 쉽고 직관적이다. 객체와 테이블 매핑 : @Entity, @Table 기본 키 매핑 : @Id 필드와 컬럼 매핑 : @Column 연관관계 매핑 : @ManyToOne, @JoinColumn 수많은 어노테이션이 있지만 기본적으로 사용하는 어노테이션만..

Book Review 2022.10.08

네트워크 관리사 2급 실기 단기간(3.5일) 합격 후기

저번 필기 합격 포스팅에 이어서 실기 합격 공부법을 포스팅하려 합니다. 네트워크 관리사 2급은 한국정보통신자격협회(ICQA)가 운영하는 국가공인 민간자격증 입니다. 저는 학점은행제 학위를 위해서 준비를 했고, 저의 공부법이 모든 분들께 다 맞지 않을 수 있으니 공부법은 참고만 해주세요! 시험 정보📚 실기 같은 경우에는 케이블 제작, 윈도우, 라우터 총 3개의 파트로 나뉩니다. Windows Server, Linux, TCP/IP, 신경향 및 보안, 케이블 제작으로 나뉩니다. 케이블 제작 : 1문제 x 6.5점 = 6.5점 Window Server : 8문제 x 5.5점 = 44점 Linux : 2문제 x 5.5점 = 11점 TCP/IP : 3문제 x 5.5점 = 16.5점 신경향 및 보안 : 1문제 x ..

자격증 2022.10.05

자바 ORM 표준 JPA 프로그래밍 - JPA란?

객체를 SQL로 변환하는 단순한 일부터, 객체의 상속 구조를 테이블에 저장하는 복잡할 일까지 개발자는 객체와 데이터베이스 사이에서 무수한 매핑 코드와 SQL을 작성해야 했다. 자바 진영에서는 이런 문제를 해결하기 위해 JPA라는 표준 기술을 제공한다. 개요 서두에 이어 조금 더 깊게 들어가 보자. 지난날 우리는 무수히 많은 CRUD의 반복, 객체와 데이터베이스 매핑관계의 반복 등 지루한 코드를 계속해서 작성하였다. 이러한 문제로 인해 자바 ORM 표준 JPA가 탄생하였고, JPA를 사용하여 SQL 작성 없이 객체를 데이터베이스에 직접 저장할 수 있게 하고, 객체와 관계형 데이터베이스의 차이도 중간에서 해결하게 만들었다. 궁극적으로 JPA를 사용해서 얻은 가장 큰 성과는 애플리케이션을 SQL이 아닌 객체 ..

Book Review 2022.09.24

SpringBoot JPA 쇼핑몰 주문 검색

SpringBoot와 JPA, Thymeleaf를 사용하여 간단한 쇼핑몰을 구현하려 합니다. 프로젝트 생성이나 Gradle 빌드는 깃허브 BincoShop을 참고해주세요! 포스팅은 도메인&테이블 설계 -> 엔티티 개발 -> 회원 서비스 -> 상품 서비스 -> 주문 서비스 순으로 진행됩니다. 포스팅의 잘못된 부분은 언제든 댓글로 남겨주시면 수정하겠습니다😀 개요 BincoShop 마지막 기능인 주문 검색 기능 개발 포스팅을 하려 합니다. 사진과 같이 회원명이나 주문 상태(ORDER, CANCEL)로 검색할 수 있게 구현할 예정입니다. OrderSearch📙 @Getter @Setter public class OrderSearch { private String memberName; private OrderSt..

JPA 2022.09.19

SpringBoot JPA 쇼핑몰 주문 서비스 II

SpringBoot와 JPA, Thymeleaf를 사용하여 간단한 쇼핑몰을 구현하려 합니다. 프로젝트 생성이나 Gradle 빌드는 깃허브 BincoShop을 참고해주세요! 포스팅은 도메인&테이블 설계 -> 엔티티 개발 -> 회원 서비스 -> 상품 서비스 -> 주문 서비스 순으로 진행됩니다. 포스팅의 잘못된 부분은 언제든 댓글로 남겨주시면 수정하겠습니다😀 개요 주문 로직은 사용자가 회원, 상품, 수량을 선택하고 주문 시에 로직이 진행됩니다. 그럼 Service 단에서 비즈니스 로직을 어떻게 처리하는지 알아볼까요? Service📘 @Service @Transactional @RequiredArgsConstructor public class OrderService { private final OrderRepo..

JPA 2022.09.15

SpringBoot JPA 쇼핑몰 주문 서비스 I

SpringBoot와 JPA, Thymeleaf를 사용하여 간단한 쇼핑몰을 구현하려 합니다. 프로젝트 생성이나 Gradle 빌드는 깃허브 BincoShop을 참고해주세요! 포스팅은 도메인&테이블 설계 -> 엔티티 개발 -> 회원 서비스 -> 상품 서비스 -> 주문 서비스 순으로 진행됩니다. 포스팅의 잘못된 부분은 언제든 댓글로 남겨주시면 수정하겠습니다😀 Order Entity📘 public void setMember(Member member) { this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrde..

JPA 2022.09.15