[Spring Framework] 20강 - 트랜잭션과 로깅

seb Incode·2022년 4월 26일
0

Spring Framework

목록 보기
20/22
post-thumbnail

학습 내용

  • 스프링 선언적 트랜잭션 종류
  • 스프링 로깅 방식

학습 목표

  • 스프링에서의 트랜잭션을 처리하는 방식을 이해하고 구현한다.
  • 스프링에서의 로깅 방식과 SLF4J와 LogBack을 이용하여 로깅을 구현한다.

스프링 트랜잭션

  • 선언적 트랜잭션 - 스프링은 선언적 트랜잭션 방식을 사용
    - 어노테이션을 이용한 선언적 방식
    • AOP를 이용한 선언적 방식
  • 프로그램에 의한 트랜잭션 처리 (권장되지 않음)
  • 스프링에서 트랜잭션 처리 모범사례
    - 선언적 방식에 의한 트랜잭션 처리
    • 트랜잭션은 주로 서비스 메소드를 대상으로 함

트랜잭션 구현 방법은 3가지가 있습니다. 1) 어노테이션 사용, 2) AOP 사용, 3) 프로그램 코드에 트랜잭션 처리 입니다.
3) 방식은 권장되지 않지만 상황에 따라 필요한 경우는 있습니다.
전체 애플리케이션에서 이 세 가지 방식을 적절히 섞어서 구현하시면 됩니다.

스프링에서는 주로 선언적으로 트랜잭션 처리를 하며, 서비스 Layer 메소드들을 대상으로 합니다.

스프링 트랜잭션 :: @Transactional

어노테이션에 의한 트랜잭션

  • @root-context.xml에 Transaction Manager Bean을 설정
  • < tx:annotation-driven ../> 설정
  • 트랜잭션이 필요한 클래스나 메소드에 @Transactional 어노테이션 추가
  • 주로 서비스 클래스의 메소드에 적용

어노테이션에 의한 트랜잭션을 사용하려면 1)root-context.xml에 Transaction Manager Bean을 등록하고, 2) < tx:annotation-driven ../>을 설정해야 합니다.
그 후, 3) 트랜잭션 처리가 필요한 메소드들에 @Transactional 어노테이션을 붙여주면 됩니다.

스프링 트랜잭션 :: AOP를 이용한 트랜잭션

  • 트랜잭션 매니저 설정
<!-- Transaction Manager -->
<bean id="transactionManager"
       class="org.springframework.jdbc.Datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean>
  • 트랜잭션 어드바이스 설정
<tx:advice id="txAdvice" transaction-manager="transactionManager">
  <tx:attributes>
    <tx:method name="get*" read-only="true" />
    <tx:method name="delete*" />
  </tx:attributes>
</tx:advice>
  • AOP 설정
<aop:config>
  <aop:pointcut id="transactionPointcut"
                expression="execution(* kr.co.acompp.hello.service.*.*(..))" />
  <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut" />
</aop:config>

AOP를 사용한 트랜잭션 처리 방법의 경우, 메소드마다 어노테이션을 붙여줄 필요없이, 위처럼 세 번의 설정 등록만 해주면 됩니다.

트랜잭션 설명이 끝났습니다.

이제 로그에 대한 설명입니다.

SLF4J와 Logback을 이용한 로그 남기기

JAVA 진영에 존재하는 많은 로깅툴

  • commns-logging
  • log4j
  • java util logging
  • logback

이전에는 log4j와 commons-logging이 주로 사용되었음, 심지어 Spring도 commons-logging을 사용해 로그를 남기고 있음

하지만 SLF4J가 나온 이후 수많은 오픈소스 프로젝트가 SLF4J을 선택하고 있고, 그 비중이 점점 커져가고 있음

여러 오픈소스 프로젝트를 사용하다 보면 Logging Tool이 혼재되어 충돌이 되는 경우가 빈번한데, 이럴 경우 Logging Tool을 통일시켜줘야 함

이 중 가장 최근에 나오고 가장 많이 사용되고 있는 SLF4J, Logback으로 통일함

SLF4J, LogBack Dependency 추가

<exclusions>
  <exclusion>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
  </exclusion>
</exclusions>
  • 위 코드 pom.xml 코어 spring dependency 태그 안에 추가
  • slf4j, jcl-over-slf4j, logback-classic dependency 추가

LogBack 설정

logback.xml 생성 후, 설정

LogBack Log Level

0개의 댓글