실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 강의 - 인프런
실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., 스프
www.inflearn.com
해당 강의는 Inflearn에 등록된 김영한님의 Spring Boot 강의입니다.
이번 시간에는 상품 도메인의 리포지토리,서비스(회원가입,조회) 작성하며 실제 JPA에서의 비즈니스 로직을 공부해보자
1. 상품 엔티티 개발
상품(item)은 회원,배송 엔티티에서 상속 받아 쓴다.
> 따라서 여기에 재고 수량에 대한 비즈니스 로직을 만들자.
비즈니스 로직: 재고수량 추가 및 삭제 (관리자가 상품에 대한 재고 관리시 사용)
> 이렇게 abstract 클래스에서 비즈니스 로직을 추가하여 구현하면 응집도를 더 높일 수 있다.
Item
객체에 다음과 같은 코드 추가
//★★★재고에 대한비즈니스 로직(setter와 비슷한 기능)★★★
//1.재고수량 증가
public void addStock(int quantity)
{
//재고수량에 증가하면 됨
this.stockQuantity+=quantity;
}
//2.재고수량 감소
public void removeStock(int quantity)
{
//남은 수량
int restStock=this.stockQuantity-quantity;
if(restStock < 0) {
//남은 수량이 음수이면 예외처리
throw new NotEnoughStockException("need more stock");
}
this.stockQuantity=restStock;
}
상품에는 재고수량 속성이 있다. 이를 이용하여 관리자가 재고수량 관련 기능 수행을 하도록 하자.
비즈니스 로직 분석
1. addStock()
메서드는 파라미터로 넘어온 수만큼 재고를 늘린다. 이 메서드는 재고가 증가하거나 상품 주문을 취소해서 재고를 다시 늘려야 할 때 사용한다.
2. removeStock()
메서드는 파라미터로 넘어온 수만큼 재고를 줄인다. 만약 재고가 부족하면 예외가 발생한다. 주로 상품을 주문할 때 사용한다.
재고수량 예외 처리
추가
package jpabook.jpashop.exception;
//음수 재고 수량 예외 처리 클래스
public class NotEnoughStockException extends RuntimeException{
//fn+ insert+ alt-> 메소드 오버라이드
public NotEnoughStockException() {
super();
}
public NotEnoughStockException(String message) {
super(message);
}
public NotEnoughStockException(String message, Throwable cause) {
super(message, cause);
}
public NotEnoughStockException(Throwable cause) {
super(cause);
}
protected NotEnoughStockException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
exception
이란 패키지를 만들어서 다음과 같이 RunTime Exception
을 상속 받은 다음에
fn
+ insert
+alt
: 메서드 오버라이드를 하여 위의 5가지 메서드를 그냥 오버라이드만 하자.
2. 상품 리포지토리 개발
상품 리포지토리
@Repository
@RequiredArgsConstructor
public class ItemRepository {
//★★스프링이 엔티티 매니저 생성 후 영속성 컨테스트(PersistenceContext)에 주입
private final EntityManager em;
//기능: 상품 등록, 상품 목록 조회, 상품 수정(이것은 도메인에 넣어놓았음...setter와 비슷하므로)
//상품 등록
public void save(Item item)
{
if(item.getId()==null)
{
//저장해논게 없으면 저장
em.persist(item);
}
else {
//★저장한게 있으면 병합해서 업데이트
em.merge(item);
}
}
//상품 단건 조회
public Item findOne(Long id){
return em.find(Item.class,id);
}
//상품 목록(전체) 조회
public List<Item> findItems(){
return em.createQuery("select i from Item as i",Item.class)
.getResultList();
}
}
여기서 save 메서드는 관리자가 상품 등록시 같은 상품인지 아닌지 확인하는 것이다. 즉, 상품의 고유 id를 통해서 같은 제품이 자사 제품으로 등록 되어 있으면 기존 아이템과 병합하여 업데이트를 한다.
(추후 JPA 활용편2에서 병합에 대한 설명이 있습니다.)
3. 상품 서비스 개발
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional(readOnly = true) //기본으로 읽기 전용 트랜잭션으로 두기
@RequiredArgsConstructor
public class ItemService {
private final ItemRepository itemRepository;
//비즈니스 로직 기능: 상품 등록,상품 단건,목록 조회
//1. 상품 등록
@Transactional
public void saveItem(Item item){
itemRepository.save(item);
}
//2, 상품 단건 조회
public Item findOne(Long itemId){
return itemRepository.findOne(itemId);
}
//3, 상품 목록 조회
public List<Item> findItems()
{
return itemRepository.findItems();
}
}
비즈니스 로직 기능: 상품 등록,상품 단건 조회 ,상품 목록 조회
'Spring Boot > Spring Boot JPA-활용편1 강의 정리' 카테고리의 다른 글
[SpringBoot-JPA 활용편1] 자바 ORM 표준 JPA 프로그래밍 - 활용편1: 7. 웹 계층 개발 (2) | 2024.02.27 |
---|---|
[SpringBoot-JPA 활용편1] 자바 ORM 표준 JPA 프로그래밍 - 활용편1: 6. 주문 도메인 개발 (1) | 2024.02.27 |
[SpringBoot-JPA 활용편1] 자바 ORM 표준 JPA 프로그래밍 - 활용편1: 4. 회원 도메인 개발 (1) | 2024.02.26 |
[SpringBoot-JPA 활용편1] 자바 ORM 표준 JPA 프로그래밍 - 활용편1: 3. 애플리케이션 구현 준비 (0) | 2024.02.26 |
[SpringBoot-JPA 활용편1] 자바 ORM 표준 JPA 프로그래밍 - 활용편1: 2. 도메인 분석 설계 (1) | 2024.02.26 |