romworld

Spring 22 - 트랜잭션, 예외처리 본문

Spring

Spring 22 - 트랜잭션, 예외처리

inderrom 2023. 2. 10. 17:46

트랜잭션이란?

 

*하나의 일처리를 하는 논리적 단위)
데이터베이스를 변경하기 위해 수행되어야할 논리적 단위. 여러개의 sql로 구성됨
원자성, 일관성, 고립성, 지속성
스프링에서 트랜잭션 관리는 ServiceImpl

 

<root-context.xml>

상단에 복붙

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

 

  • beans 태그 안에 코드 작성 
  • class 에 추가 org.springframework.jdbc.datasource.DataSourceTransactionManager
  
	  <!--
	  트랜잭션 : 데이터베이스를 변경하기 위해 수행되어야할 논리적 단위. 여러개의 sql로 구성됨
	 원자성, 일관성, 고립성(격리성),지속성(영속성)
	   -->
	   <!-- 트랜잭션 관리자의 자바빈 객체를 정의함 -->
	   <bean id="transactionManager" 
	   	class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	   		<property name="dataSource" ref="dataSource"></property>
	   </bean>
	   
	  <!-- 에너테이션 기반의 트랜잭션 제어를 활성화함  --> 
	  <tx:annotation-driven/>

 

 


(전에 만들었던

<CUsServiceImpl.java> 다중 insert 했던 매서드에서)

  • @TranSactional 처리를 꼭 해줘야한다.

====> 다중 insert를 할 경우에 꼭 @TranSaction 애너테이션을 사용한다.


예외처리

<web.xml>

web-app 태그 안에 작성
<!-- 예외 처리 : 프로그램이 처리되는 동안 특정한 문제가 일어났을 때 프로세스를 중단하고
		예외를 처리하는 것을 말함
		톰켓은 기본적으로 기본 오류 페이지를 표시해주는데 페이지에 서버의 내부 정보가
		일반인들에게 노출되어 보안 취약점을 노린 공격을 받을 수 있음.
		따라서 최대한 정의된 오류 페이지를 표시하여 취약점을 최소화하도록 해야 함
	 -->
	<!-- 상태 코드를 사용한 이동 대상 페이지 설정 
	400 : 클라이언트의 요청이 잘못된 구문으로 구성됨
	404 : 페이지가 없음
	500 : JSP에서 예외가 발생함
	-->
	<error-page>
		<error-code>400</error-code>
		<location>/error/error400</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/error/error404</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/error/error500</location>
	</error-page>

 

error 폴더에 jsp 파일을 만들자

 

<400.jsp>

outerHTML로 가져오기


<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div class="text-center">
	<div class="error mx-auto" data-text="400">400</div>
	<p class="lead text-gray-800 mb-5">Bad Request</p>
	<p class="text-gray-500 mb-0">요청이 잘못되었습니다.</p>
	<a href="/lprod/list">← 처음으로</a>
</div>

 

 

<404.jsp>

<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div class="text-center">
	<div class="error mx-auto" data-text="404">404</div>
	<p class="lead text-gray-800 mb-5">Page Not Found</p>
	<p class="text-gray-500 mb-0">페이지가 없습니다</p>
	<a href="/lprod/list">← 처음으로</a>
</div>

 

<500.jsp>

<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div class="text-center">
	<div class="error mx-auto" data-text="500">500</div>
	<p class="lead text-gray-800 mb-5">Server Error</p>
	<p class="text-gray-500 mb-0">서버 내부 오류가 발생했습니다.</p>
	<a href="/lprod/list">← 처음으로</a>
</div>

 

controller - ErrorController 

<ErrorController.java>

package kr.or.ddit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/error")
@Controller
public class ErrorController {
	//error/error400
	@GetMapping("/error400")
	public String error400() {
		//forwarding
		return "error/400";
	}
	
	//error/error404
	@GetMapping("/error404")
	public String error404() {
		//forwarding
		return "error/404";
	}
	
	//error/error500
	@GetMapping("/error500")
	public String error500() {
		//forwarding
		return "error/500";
	}
}

 

 

잘못된 주소로 요청하면 에러페이지가 나온다.

Comments