51일차 시작....

조동현·2022년 9월 15일
0

[교육] Spring

목록 보기
7/7
post-thumbnail

📌 Exception Controller

  • Exception Controller
    - Spring Framework가 클라이언트의 요청을 처리하는 도중에 특정 type의 Exception이 발생했을 때, 직접 처리하여 응답하기 위한 컨트롤러

  • 사용 목적
    - 단순 500, 404번 오류 등이 화면에 뜨지 않고 개발자의 의도 하에서 특정 예외 페이지로 forword 하기 위함이다.

  • 어노테이션
    @ControllerAdvice : Exception Controller 클래스를 예외처리 용도 객체로 사용하기 위한 클래스의 어노테이션
    @ExceptionHandler(예외 종류) : 사용자 요청 처리 중 발생하는 특정 예외를 핸들링하여 가져오는 메소드의 어노테이션

  • 예외 종류
    - NotDeleteException.class
    - NotDeliveryException.class
    - DataAccessException.class : DB 관련 작업을 하다가 발생하는 모든 예외를 처리하는 컨트롤러

  • 사용 방법
    - throw new 원하는 Exception


📌 트랜젝션

  • Transactional
    - 하나의 작업을 수행하기 위해 여러 개의 세부 작업을 수행해야 한다면, 여기서 한 세부 작업이라도 실패한다면, 이전에 실행했던 세부 작업 내용들을 복원해야 할 때 사용하는 기능

  • Spring 트랜젝션 설정 방법
    1. pom.xml에 spring-tx dependency 추가
    2. servlet-context.xml에 transaction 설정 추가
    3. 트랜젝션을 관리할 서비스의 메소드에 @Transactional 어노테이션 붙이기

  • 사용 목적
    - DAO 작업을 여러 개 사용할 때, 사용할 모든 DAO 작업이 전부 수행되면 한번에 Commit 하기 위함이다.

  • 예시
    - 주제 : 상품 거래
    1. 상품의 가격 가져옴
    2. 상품의 가격 만큼 고객의 잔고 잔액을 차감시킴
    3. 재고 개수를 줄임
    - 2, 3번에서 DB 테이블에 CHECK(재고 or 잔액 >= 0) 설정이 존재한다면 0일 때, 오류가 발생할 수 있다.

  • 형식
@Transactional
@Override
public void buy(HttpServletRequest request, ModelAndView mView) {

	//구입자의 아이디
	String id=(String)request.getSession().getAttribute("id");
	//1. 파라미터로 전달되는 구입할 상품 번호
	int num=Integer.parseInt(request.getParameter("num"));
	//2. 상품의 가격을 얻어온다.
	int price=shopDao.getPrice(num);
	//3. 상품의 가격만큼 계좌 잔액을 줄인다.
	ShopDto dto=new ShopDto();
	dto.setId(id);
	dto.setPrice(price);
	shopDao.minusMoney(dto);
	//4. 가격의 10% 를 포인트로 적립한다.
	shopDao.plusPoint(dto);
	//5. 재고의 갯수를 1 줄인다.
	shopDao.minusCount(num);
	//6. 주문 테이블(배송) 에 정보를 추가 한다. 
	OrderDto dto2=new OrderDto();
	dto2.setId(id); //누가
	dto2.setCode(num); //어떤 상품을 
	//클라이언트가 입력한 배송 주소라고 가정 
	String addr="제주시 삼원빌딩";
	dto2.setAddr(addr);//어디로 배송할지

	//배송 불가 지역이 있다고 가정하자
	if(addr.contains("제주")) {
		throw new NotDeliveryException("제주는 배송 불가 지역 입니다.");
	}

	orderDao.addOrder(dto2);
}
profile
데이터 사이언티스트를 목표로 하는 개발자

0개의 댓글