2016년 11월 14일 월요일

79day / Final Project / Transaction


드디어 시작된 Final project
Final Project를 위한 팀 & 팀원들이 모두 결정 되었다.
일단 부족한 실력으로 Final Project를 시작하게 되어 걱정이긴 하지만
좋은 팀원들을 만났으니 좋은 작품 뽑아낼 수 있도록 달려야겠다!!

일단 Final을 시작하긴했지만 부족한 부분을 오전에 수업하고
오후에는 Project를 위한 공부와 회의를 하기로 했다.
아직 당장 Project에 들어가기 어려운 실력이라 그런건 알겠지만
아쉬운 부분이 아닐수는 없다😭
6개월반이면 좀 괜찮았을런지..

Transaction / Tiles Framework / 정규화에 대해 살펴보았지만
Tiles Framework와 정규화는 앞으로 더 공부를 하기로 했으니
오늘은 일단 Transaction만 리뷰해야겠다.
http://www.injavawetrust.com

스프링에서의 Transaction
스프링 프레임워크는 프로그래밍 방식 및 선언식 트랜잭션 관리를 모두 지원한다.
프로그래밍 방식 트랜잭션 관리의 경우 스프링의 트랜잭션 관리 추상화를 사용해
명시적으로 트랜잭션을 시작, 종료, 커밋한다.
선언식 트랜잭션 관리의 경우 단일 트랜잭션 내에서 실행할 메서드에
스프링의 @Transactional 어노테이션을 지정한다.


강사님이 자주 설명하시는 예시
회원가입시 회원에게 포인트를 부여한다!
결국 DB에는 회원정보 + 포인트정보가 반영된다.
하지만 예외상황으로 인하여 회원정보는 누락이 되고 포인트만 DB에 반영
우리는 이런 상황을 대비하여 Transaction처리하여 Roll-back처리
포인트만 DB에 반영되었던 부분을 취소할 수 있다!

사용방법
ex) xml 설정
# MyBatis 연동 설정 
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation"
        value="classpath:mybatis/config/SqlSessionConfig.xml"/>
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg ref="sqlSessionFactory"/>
</bean>
# 트랜잭션 설정 
<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
cs

ex) Class 적용
    * Transaction annotaion import *
import org.springframework.transaction.annotation.Transactional;
@Service
public class MemberServiceImpl implements MemberService {
    @Resource
    private MemberDAO memberDAO;
    @Resource
    private PointDAO pointDAO;
    @Override
    public MemberVO findMemberById(String id) {
        return memberDAO.findMemberById(id);
    @Transactional <- Transaction 적용
    @Override
    public void register(MemberVO memberVO, PointVO pointVO) {
        memberDAO.register(memberVO);
    * 고의로 에러를 발생시키는 코드를 삽입한다. *
        pointVO.setId("");
        pointDAO.register(pointVO);
    }
}
cs

이제 Final Project도 시작했고 앞으로의 포스팅을
어떻게 해야되나...고민을 많이 했다.
하지만! 제대로 된 시작은 아니기때문에 Project 포스팅에 대한 초첨은
좀 뒤로 미루고 배우는 것 위주로 적어야겠다.

0 개의 댓글:

댓글 쓰기