spring의 특징

sangeun·2020년 2월 10일
0

스프링 공부

목록 보기
1/5

Spring의 장점

  • 유연성
    - aop, di를 통해 기능을 조립하는 것이 가능하다.
    • psa
  • 실용적인 javaEE 사용과 빠른 스펙의 반영
  • pojo기반의 개발을 많이 하여 테스트에 용이하다.
  • 어노테이션을 사용하여 편리한 개발이 가능

AOP

AOP(Aspect Oriented Programming)는 관점 지향 프로그래밍이다. 코드에서 반복되어 사용하는 부분을 부분적으로 나누어서 모듈화하는 것을 말한다.
간단히 말하면 코드에 흩어져 있는 횡단 관심사들을 aspect로 모듈화 한 것이다.

예) 로깅을 하는 aspect

package com.example.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LogAspect {
    Logger logger = LoggerFactory.getLogger(LogAspect.class);

    @Around("execution(* com.example.aop.*.*(..))")
    public Object logging(ProceedingJoinPoint pjp) throws Throwable {
        logger.info("start - " + pjp.getSignature().getDeclaringTypeName() + " / " + pjp.getSignature().getName());
        Object result = pjp.proceed();
        logger.info("finished - " + pjp.getSignature().getDeclaringTypeName() + " / " + pjp.getSignature().getName());

        return result;
    }
}

실제로 실행해 보았을 때, Aspect를 적용할 컴포넌트가 존재하지 않을 경우 에러가 발생한다.

@Aspect만으로는 빈으로 등록되지 않으므로 빈으로 등록하기 위한 Component가 필요하다.

관련된 어노테이션

@EnableAspectJAutoProxy: @Aspect를 적용한 컴포넌트들을 사용할 수 있도록 설정하는 역할
@Aspect: aspect로 정의하여 AspectJAutoProxy가 사용할 수 있도록 한다.
@Around: 메소드 실행 전후 공통 로직을 적용할 때
@Before: 메소드 실행 전 공통 로직을 적용할 때
@After: 메소드 실행 후 공통 로직을 적용할 때
@Component: bean을 생성하는 역할

excution

Aop가 적용될 위치를 정할 때 사용하는 pointCut의 일종이다. Advice(무엇을 할 지 정의한 부분, 여기서는 로깅)를 적용할 메서드를 등록할 때 많이 쓰인다.
표현식은 이와 같다.

execution([수식어] 리턴타입 [클래스이름].이름(파라미터)

수식어 : public, private 등 수식어를 명시합니다. (생략 가능)
리턴타입 : 리턴 타입을 명시합니다.
클래스이름 및 이름 : 클래스이름과 메서드 이름을 명시합니다. (클래스 이름은 풀 패키지명으로 명시해야합니다. 생략도 가능)
파라미터 : 메서드의 파라미터를 명시합니다.
" * " : 모든 값을 표현합니다.
" .. " : 0개 이상을 의미합니다.

내부 작동방식

Dynamic proxy로 동작한다.
dynamic proxy가 프록시 패턴인지 데코레이터 패턴인지에 대해서는 생각해볼 가치가 있는데, 데코레이터 패턴에 가깝다고 볼 수 있다.

http://toby.epril.com/?p=841

출처: https://engkimbs.tistory.com/746 [새로비]
https://jeong-pro.tistory.com/171
https://icarus8050.tistory.com/8

PSA

PSA란
환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하려는 추상화 구조 를 뜻한다.

Java EJB가 환경에 너무 의존적이기 때문에 조금만 변화하여도 코드를 변경해야 했고, 테스트도 어려운 단점이 있었다. 따라서 이와 반대되는 POJO라는 명칭을 사용하게 되었고,

DI

profile
꾸준히

0개의 댓글