[Spring Framework] 스프링 프레임워크의 핵심 기능 알아보기

헛헛한꿔녀니·2024년 2월 14일

북스터디

목록 보기
3/4

스프링 프레임워크의 핵심 기능

1-1. 의존성 주입

  • 의존성 주입 (Dependency Injection) 은 '의존하는 부분을 외부에서 주입하는 것' 을 말한다.

1-2. 관점 지향 프로그래밍

  • 관점 지향 프로그래밍 (Aspect Oriented Programming) 으로 AOP 에서는 프로그램이 아래 두 가지 요소로 구성된다.
    • 중심적 관심사 (Primary Concern) : 실현해야 할 기능을 나타내는 프로그램
    • 횡단적 관심사 (Crosscutting-Concerns) : 본질적인 기능은 아니지만 품질이나 유지보수 등의 관점에서 반드시 필요한 기능을 나타내는 프로그램
  • 간단히 설명하면 공통 처리 등의 '횡당적 관심사' 를 추출하고 프로그램의 여러 곳에서 호출할 수 있게 설정함으로써 개발자는 실현해야 할 기능인 '중심적 관심사' 에만 집중해서 작성하면 되는 구조

1-3. DI 컨테이너

  • 의존성 주입 (Dependency Injection) 의 실현을 돕는 프레임워크
  • 의존성 주입 : 의존하는 부분을 외부에서 주입하는 것
  • 클래스 의존 : 클래스끼리 강하게 결합되어 있어 유연성이 떨어진다. 즉, 메서드 수정 시 수정해야하는 부분이 많아진다.
  • 인터페이스 의존 : 인터페이스는 참조를 받는 유형으로 사용할 수 있어 변수의 이름을 수정하지 않아도 되고, 인터페이스가 선언된 메서드를 이용하면 클래스가 수정되어도 메서드명을 수정하지 않아도 된다.
  • 이러한 이점 때문에 인터페이스 의존을 사용하여 수정할 곳을 줄인다.

1-3-1. DI 컨테이너의 다섯 가지 규칙

  1. 인터페이스를 이용하여 의존성을 만든다.
  • 의존하는 부분에 인터페이스를 이용한다.
  1. 인스턴스를 명시적으로 생성하지 않는다.
  • 인스턴스 생성에 new 키워드를 사용하지 않는다.
  1. 어노테이션을 클래스에 부여한다.
  2. 스프링 프레임워크에서 인스턴스를 생성한다.
  • 인스턴스를 생성하려는 클래스에 인스턴스 생성 어노테이션 (@Component) 을 부여한다.
  1. 인스턴스를 이용하고 싶은 곳에 어노테이션을 부여한다.
  • 생성된 인스턴스를 이용하는 클래스에 참조를 받는 필드를 선언하고 @Autowired 어노테이션을 부여한다.

의존성 주입에 관한 내용을 요약하면 아래와 같다.

 - 스프링 프레임워크는 임의로 구현한 클래스를 인스턴스화하는 기능을 제공한다. -> DI 컨테이너
 - 스프링 프레임워크를 사용하는 어플리케이션은 인스턴스를 명시적으로 생성하지 않는다. (new 사용 X)
 - 정해진 어노테이션 (@Component) 을 클래스에 부여하는 것으로 스프링 프레임워크가 인스턴스를 생성한다.
 - 생성된 인스턴스를 사용하고 싶은 부분에서 필드를 준비하고 @Autowired 어노테이션을 부여하면 
  스프링 프레임워크가 인스턴스가 필요한 것으로 판단하고 인스턴스를 주입한다.
 - 인터페이스를 이용해서 의존성을 만들고 DI 를 사용하여 '사용되는 객체' 클래스를 변경하는 경우
 '사용하는 객체' 클래스의 수정 없이 변경할 수 있다.

2-1. 어노테이션

  • Annotation 은 주석을 의미하는 영어 표현이며, 외부 소프트웨어에 필요한 처리 내용을 전달한다.

레이어별로 사용할 인스턴스 생성 어노테이션

  • 어플리케이션을 만들 때는 레이어로 나누는 것이 좋다.
  • 아래는 '도메인 주도 설계 (Domain-Driven Design)' 의 레이어이다.
레이어개요
어플리케이션 레이어 (Application Layer)클라이언트와의 데이터 입출력을 제어하는 레이어
도메인 레이어 (Domain Layer)어플리케이션의 중심이 되는 레이어로서 업무 처리를 수행하는 레이어
인프라스트럭쳐 레이어 (Infrastructure Layer)데이터베이스에 대한 데이터 영속성 등을 담당하는 레이어
  • 인스턴스 생성 어노테이션은 레이어별로 구분된다.
    • @Controller : 어플리케이션 레이어의 컨트롤러에 부여
    • @Service : 도메인 레이어의 업무 처리에 부여
    • @Repository : 인프라 레이어의 데이터베이스 액세스 처리에 부여
    • @Component : 위 세 어노테이션의 용도 이외의 인스턴스 생성 대상 클래스에 부여, 하위 로직을 처리할 때 사용

2-2. AOP (Aspect Oriented Programming) : 관점 지향 프로그래밍

  • 스프링 프레임워크에서 제공하는 AOP 기능을 활용하여 '중심적 관심사' 와 '횡단적 관심사' 를 분리하여 프로그램을 쉽게 만들 수 있다.

AOP 고유 용어

  • Advice : 횡단적 관심사의 구현 (메서드). 로그 출력 및 트랜잭션 제어 등
  • Aspect : Advice를 정리한 것 (클래스).
  • JoinPoint : Advice를 중심적인 관심사에 적용하는 타이밍. 메서드 (생성자) 실행 전, 후 등 실행되는 타이밍
  • Pointcut : Advice를 삽입할 수 있는 위치. ex. 메서드 이름이 get 으로 시작할 때만 처리
  • Interceptor : 처리의 제어를 인터셉트하기 위한 구조 또는 프로그램. 이 메커니즘으로 Advice를 중심 관심사에 추가한 것처럼 보이게 한다.
  • Target : Advice가 도입되는 대상

AOP 의 구조

A 클래스가 B 클래스의 X 메서드를 호출하는 경우 인터셉터의 동작 방식

  • AOP를 사용하면 A 클래스에서 B 클래스의 X 메서드 (중심적 관심사) 를 호출하는 것처럼 보인다.
  • 하지만 내부적으로는 AOP 프락시 (스프링 프레임워크가 자동 생성) 가 처리를 가로채고 X 메서드 및 Advice의 호출을 제어한다.

  • Advice 의 다섯 가지 종류
Advice내용Annotation
Before Advice중심적 관심사가 실행되기 '이전'에 횡단적 관심사 실행@Before
After Returning Advice중심적 관심사가 '정상적으로 종료된 후'에 횡단적 관심사 실행@AfterReturning
After Throwing Advice중심적 관심사로부터 '예외가 던져진 후'로 횡단적 관심사 실행@AfterThrowing
After Advice중심적 관심사의 '실행 후'에 횡단적 관심사 실행@After
Around Advice중앙적 관심사 호출 전후에 횡단적 관심사 실행@Around

AOP의 주요 사항

 - AOP에서는 프로그램을 2개의 요소인 중심적 관심사와 횡단적 관심사로 구성되어 있다고 생각한다.
 - 중심적 관심사 : 구현해야 할 기능을 나타내는 비즈니스 로직
 - 횡단적 관심사 : 본질적인 기능은 아니지만, 품질이나 유지보수 등의 관점에서 꼭 필요한 기능
 - AOP에서는 횡단적 관심사를 분리함으로써 기존 코드를 수정하지 않아도 프로그램 중에 특정 기능 (공통 처리) 을 추가할 수 있다.
 - 스프링 프레임워크는 다양한 공통 기능을 AOP에서 제공한다.

0개의 댓글