Spring

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

yes_truly 2023. 10. 8. 04:33
728x90

 

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

 

1) 의존성 주입(Dependency Injection)

  • 의존하는 부분을 외부에서 주입하는 것

 

2) 관점 지향 프로그래밍(Aspect Oriented Programming)

  • 중심적 관심사 : 실현해야 하는 기능을 나타내는 프로그램
  • 횡단적 관심사 : 품질이나 유지보수 등의 관점에서 반드시 필요한 기능을 나타내는 프로그램
    • 예외처리
    • 로그정보 화면이나 파일 등으로 출력 처리
    • 데이터베이스의 트랜잭션 제어 등
  • 공통 처리 등의 횡단적 관심사를 추출하고 프로그램의 여러 곳에서 호출할 수 있게 설정해 개발자는 중심석 관심사에만 집중해 코드를 작성할 수 있게 함

 

2. DI 컨테이너 알아보기

 

1) DI 컨테이너

  • 인스턴스 생성과 같은 작업을 수행하는 역할을 함
    • 의존하는 부분 = 사용하는 객체에서 클래스에 사용되는 객체 클래스가 작성된 상태
    • 외부로부터 주입 = 사용하는 객체 클래스의 밖에서 사용되는 객체 인스턴스를 주입

2) 다섯가지 규칙
DI컨테이너에 인스턴스 생성을 맡기고 사용하는 객체 클래스를 수정할 필요 없게 만드는 규칙

  • 인터페이스를 이용해 의존성을 만듦
    • 의존하는 부분에 인터페이스를 이용
  • 인스턴스를 명시적으로 생성하지 않음
  • 어노테이션을 클래스에 부여
  • 스프링 프레임워크에서 인스턴스 생성
    • 인스턴스를 생성하려는 클래스에 인스턴스 생성 어노테이션을 부여
  • 인스턴스를 이용하고 싶은 곳에 어노테이션 부여
    • 스프링에 의해 생성된 인스턴스를 이용하는 클래스에 참조받는 필드를 선언하고 @Autowired 어노테이션 부여

 


 

3. 어노테이션 역할 알아보기

 

1) 어노테이션을 세 가지 항목으로 설명

  • 간단히 설명하면
    • 주석을 의미하는 영어 표현
    • '@xxx' 의 형태
    • 외부 소프트웨어에 필요한 처리 내용 전달
  • 외부 소프트에워에 필요한 처리 내용을 전달하는 어노테이션
    • @Override → 오버라이드 메서드의 시그니처를 체크 → 자바 컴파일러
    • @Author → 도움말 문서 생성 → JavaDoc
    • @Component → 인스턴스 생성 → 스프링 프레임워크
    • @NotEmpty → 입력란 체크 → Validator
    • @Test → 테스트 실행 → JUnit
  • 인스턴스를 생성하는 어노테이션은 사용하는 위치에 따라 가려 사용해야 함

 

2) 레이어별로 사용할 생성 어노테이션

  • 레이어 : 계층 구조로 되어있는 각 층
  • 레이어 나누는 방법 : 도메인 주도 설계
    • 어플리케이션 레이어 : 클라이언트와 데이터 입출력 제어
    • 도메인 레이어 : 애플리케이션의 중심이 되는 레이어, 업무 처리 수행
    • 인프라스트럭처 레이어 : 데이터베이스에 대한 데이터 영속성 등 담당
  • 레이어별 인스턴스 생성 어노테이션
    • @Controller : 애플리케이션 레이어의 컨트롤러에 부여
    • @Service : 도메인 레이어의 업무 처리에 부여
    • @Repository : 인프라 레이어의 데이터베이스 액세스 처리에 부여
    • @Component : 위 용도 이외의 인스턴스 생성 대상 클래스에 부여

3) 커스텀 어노테이션

 java.lang.Annotation 인터페이스 상송해 직접 어노테이션을 만들 수 있음

 


 

4. AOP의 기초 지식

 

1) AOP

  • 고유 용어
    • 어드바이스(Advice) : 횡단적 관심사의 구현(메소드), 로그 출력 및 트랜잭션 제어 등
    • 애스팩트(Aspect) : 어드바이스를 정리한 것(클래스)
    • 조인 포인트(JoinPoint) : 어드바이스를 중심적인 관심사에 적용하는 타이밍.
    • 포인트컷(PointCut) : 어드바이스를 삽입할 수 있는 위치
    • 인터셉터(Interceptor)
      처리의 제어를 인터셉트하기 위한 구조 또는 프로그램
      어드바이스, 횡단적 관심사를 타깃, 중심적 관심사에 삽입하는 것처럼 보이게 할 수 있음
    • 타깃(Target) : 어드바이스가 도입되는 대상
  • 어드바이스의 종류
    • Before Adivce(@Before) : 중심적 관심사가 실행되기 이전에 횡단적 관심사 실행
    • After Returning Advice(@AfterReturning) : 중심적 관심사가 정상적으로 종료된 후에 횡단적 관심사 실행
    • After Throwing Advice(@AfterThrowing) : 중심적 관심사로부터 예와가 던져진 후에 횡단적 관심사 실행
    • After Advice(@After) : 중심적 관심사의 실행 후에 횡단적 관심사 실행
    • Around Advice(@Around) : 중앙적 관심사 호출 전후에 횡단적 관심사 실행
      • 인수는 ProceedingJoinPoint 인터페이스 타입 지정
      • 어드바이스 중에서 위의 인터페이스의 proceed() 메소드 호출
      • 어드바이스 적용 대상의 메소드를 임의의 타이밍으로 호출할 수 있으므로 전후로 다양한 처리 가능
      • 반환값 돌려줄 필요가 있을 때는 Object타입으로 반환값 돌려줌

2) 포인트컷 식

  • 직접 어드바이스를 만들 때 어드바이스 삽입 대상을 조건으로 지정할 수 있는데, 지정하는 조건 방법으로 포인트컷 식 사용
  • execution 지시자
    • execute(반환값 패키지.클래스.메소드)
    • 와일드카드 이용해 적용 범위 지정 가능
      • *
        임의의 문자열을 나타내고 패키지를 나타낼 때는 임의의 패키지 한 계층을 나타냄
        메소드의 인수에서는 한 개으 인수를 나타내는 반환값으로 이용할 수 있음
      • ..
        패키지를 나타내는 경우 0개 이상의 패키지를 나타냄
        메소드의 인수를 표현하는 경우 0개 이상의 임의의 인수를 나타냄
      • +
        클래스 명 뒤에 기술해 클래스와 그 서브클래스 및 구현 클래스 모두를 나타냄

3) 스프링 프레임워크가 제공하는 AOP 기능

  • @Transactional
    • 트랜잭션 관리
    • 데이터베이스 액세스 처리 메소드가 정상종료하면 트랜잭션 커밋하고 예외 발생하면 롤백
728x90