AOP, 만드는 법

0

개념정리

목록 보기
26/33

객체지향

  • 객체지향 프로그래밍 목적 -> 재사용성 높이자!
  • 객체지향 프로그래밍 특징
  1. 상속
  2. 다형성
  3. 캡슐화
  • 중복되는 코드들을 부모클래스로 만드는 것 -> 상속

클래스란? 객체를 만드는 틀 or 하위클래스의 공통점을 모아두는 곳 (둘 역할 다 할수도있음)

  • 추상클래스 : 하위클래스의 공통점을 모아두는 곳 (new 생성자 이용불가)
  • final클래스 : 객체를 만드는 틀의 역할 (하위클래스 가질 수 없음)

AOP

  • 분명히 중복되는 코드가 있음에도 불구하고 상속받기엔 애매하다.
    • 상속: 수직적인 부모에 공통관계를 밀어넣는 것
      -> 공통적인 부분을 상속처럼 수직적으로 처리하지않고 수평적으로 관리하고 싶다.
  • 더 중요한 작업 : 핵심 로직 (로그인, 로그아웃 ,장바구니) / sout은 덜중요함: 부가 로직
  • 핵심로직의 또는 또는 전후 에 부가로직을 알아서 끼워넣기 하는 것 -> 관점지향프로그래밍 (Aspect Oriented Programming)
  • 끼워넣는 것, 엮는 것 : weaving(엮다), 부가로직을 필요로 하는 핵심로직에 엮는 것.
  • 부가로직을 제대로 만들어 넣고 끼워 넣는 것. 핵심로직을 묶어 놓은 것(부가로직이 들어갈 수 있는 부분) = 포인트 컷 이라 함.
  • 객체지향 프로그램의 단점 : 공통적인 부분은 부모에 몰아넣고 상속받아 사용하기 때문에 부모-자식을 따로 관리할 수 없는데, 관점지향 프로그래밍은 핵심로직 따로 부가로직 따로 별개로 관리하다가 필요할때만 위빙하는 것
  • AOP : controller의 예외처리, transaction 처리할때 많이 쓰임

AOP 만드는 법

  • 포인트컷에 부가로직을 어떻게 위빙할 것이다.(방법) = advice
  • controller에서 throws한 예외는 스프링 컨테이너가 받음. -> ExceptionHandler이 선언돼있는 메서드를 자동 호출해줄 것.
  • 위에 try -catch는 없애고 throws FindException으로 던져주고, throws가 발생하면 @ExceptionHandler(FindException.class) 가 실행됨
  • FindException 을 공통모듈이 아닌 패키지마다 각각 설정하고 싶다면, 각 해당 도메인 control안에 FindException을 만들고 위치도 확실하게 설정해주면 된다.
  • Exception 여러개 만들려면 위와 같이 만들면 되고, 각 throws들은 메서드 마다 맞춰서 던져주면 알아서 받아올 것임.
  • 부가로직이 고객가입 메서드에서도, 주문추가 메서드에서도 위빙돼서 공통되어 사용.
    -> 상속이 아닌 수평관계로 엮어주는 것이다~

또다른 AOP.. 트랜잭션

  • 트랜잭션 시작 (자동) -> 부가로직
  • DML 작업 (핵심로직) (ex, 주문추가, 수정, 삭제)
  • 트랜잭션 종료 (commit & rollback) -> 부가로직
    -> 부가로직을 핵심기능마다 전 & 후에 처리해줘야한다.
    -> 스프링에서 선언적 트랜잭셔널 처리하는 것을 권장한다.
    -> 소스코드에 직접 commit, rollback 쓰지 마라. (개발자는 핵심로직에만 집중하고 싶은데 이건 부담임)
    -> @Transactional (rollbackFor = AddException.class)
    -> 이 메서드를 호출하다가 addException이 발생하면 무조건 롤백하라는 뜻.
    -> 놓치지 말아야 할 게 있음. 자동 롤백되는 경우가 있음!! -> 트랜잭셔널용 메서드의 내부에서 Runtime Exception이 발생하면 자동롤백이 된다. 주의!

업로드중..

  • 트랜잭셔널 이용하기 위해서 아래코드를 위와 같이 myApplicationContext.xml에 추가
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx.xsd
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop.xsd
  • 아래 코드는 beans 안에 추가
	<tx:annotation-driven
		transaction-manager="transactionManager" />
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSourceHikari" />
	</bean>

업로드중..
↳ 장바구니에 추가되다가 말 것임 (롤백)

profile
백엔드를 공부하고 있습니다.

0개의 댓글