study/Spring

4_Spring(ResponseBody, Transactional)

스파이크12 2020. 2. 25. 10:17

@RequestParam의 required : 해당파라미터가 필수인지 여부를 지정

@ResponseBody란?

메소드에서 리턴되는 값을 View를 통해 출력하는 것이 아닌

리턴값을 HTTP Response Body에 담는 역할 

--> jsp로 화면이 이동되는 것이 아닌 기존 페이지로 데이터만 전달됨

@Transactional

Spirng Framework는 트랜잭션을 처리할 방법을 지원해줌(코드기반, 선언적)

선언적 트랜잭션 처리 방법

1) <tx:advice> -> AOP + tx를 이용한 XML 작성 방식

2) @Transactional 어노테이션을 이용한 방식

 (클래스, 인터페이스, 메소드에 작성 가능)

 * @ Transactional 사용 조건

 - 인터페이스를 구현한 클래스로 선언된 bean은

   메소드에 한해서 트랜잭션 처리가 적용됨

 - 트랜잭션 처리를 위한 Transaction Manager가 bean으로 등록되어있어야함

-> root-context.xml에서 등록

	<!-- 트랜잭션 처리를 위한 Transaction Manager 추가 -->
	<bean id="transactionManager"
		  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		
		<property name="dataSource" ref="dataSource"/>	  
    </bean>

@Transactional은 기본적으로 RuntimeException이 발생했을때만 rollback 처리를 함

하지만 DB 관련 Exception(ex. SqlException)은 대부분 CheckException 이므로

rollbackFor를 통해 롤백이 발생되는 예외를 지정 

rollbackFor = Exception.class

-> 예외 발생시 rollback해라

@Transactional(rollbackFor = Exception.class)

Checked Exception vs Unchecked Exception(runtimeException)