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

SR Lee·2023년 6월 5일
0

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

1. Dependency Injection (DI)

  1. 의존성이란? Inheritance (Class & Interface) 클래스보다 인터페이스를 선호하는 이유 → 수정이 더 용이하다. 그리고, 스프링을 사용하면 더욱 용이해진다. (수정해야 하는 코드가 줄어들어서)
  2. 스프링에서의 DI, 5가지 규칙
    1. 인터페이스를 이용해서 의존성을 만든다 (not Class)
    2. 인스턴스를 명시적으로 생성하지 않는다 (new 키워드 미사용)
    3. 어노테이션을 클래스에 부여한다
    4. 스프링 프레임워크에서 인스턴스를 생성한다 (인스턴스를 생성하려는 클래스에 어노테이션 부여; 인터페이스에는 어노테이션 불필요)(ex)) @Component, @Override, @Autowired)
      1. (프로그래머가) 인스턴스를 생성할 클래스에 @Component 설정
      2. (스프링 프레임워크는) 시작할 때 패키지를 스캔 = component scan
      3. (스프링 프레임워크는) 어노테이션이 있는 클래스를 추출 & 추출한 클래스의 인스턴스 생성
    5. 인스턴스를 이용하고 싶은 곳에 어노테이션을 부여한다 (스프링 프레임워크에 의해 생성된 인스턴스를 이용하는 클래스에 참조를 받는 필드를 선얺고 필드에 @Autowired 어노테이션 부여
  3. Gradle Project Download해서 DI 프로그램 만들기 (패키지로 묶어주는 것 remember!)
    1. Interface
    2. Class (implement Interface & override method)
      1. @Component
      2. @Override
    3. Main Class
      1. @SpringBootApplication
      2. @Autowired
        1. New 키워드 미사용; 즉; 인스턴스 생성할 때:
          1. Greet greet instead of Greet greet = new Greet();
  4. Annotation (어노테이션): 외부 소프트웨어에 필요한 처리 내용을 전달하는 주석 (e.g. @Component)
    1. 사용하는 위치(레이어)에 따른, 인스턴스를 생성하는 어노테이션
      1. 레이어별 인스턴스 생성 어노테이션 설명 (주요 처리)
        1. application layer; @Controller :클라이언트와의 데이터 입출력 제어
        2. domain layer; @Servce :업무 처리
        3. infrastructure layer; @Repository :데이터베이스에 대한 데이터 영속성(Persistence Context) 담당
      2. 주요 처리 아닌 인스턴스 생성 어노테이션 설명 (보조 처리): @Component
    2. 커스텀 어노테이션
      1. java.lang.Annotation 인터페이스 상속 필요
      2. 메타 어노테이션: 커스텀 어노테이션에 정의를 추가하는 어노테이션 (@Target, @Retention, @Documented, @Inherited)

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

  1. 중심적 관심사 primary concern: 실현해야 할 기능을 나타내는 프로그램
  2. 횡단적/부수적 관심사 crosscutting concerns: 본질적인 기능은 아니지만, 품질이나 유지보수 등의 관점에서 반드시 필요한 기능을 나타내는 프로그램 (예: 예외 처리, 로그 정보 화면이나 파일 등으로 출력 처리, 데이터베이스의 트랜잭션 제어 등)

→ 코드를 중심적/횡단전 관심사로 분리를 함으로서, 기존 코드를 수정하지 않아도 프로그램 중에 특정 기능 (공통 처리)을 추가할 수 있다는 장점이 있다.

  1. AOP의 고유 용어 (Advice, Aspect, Target, JoinPoint, Pointcut, Interceptor)

  1. 어드바이스의 5가지 종류; ‘언제’ 실행되냐에 따라 종류가 나뉜다
    1. @Before→중심적 관심사가 실행되기 ‘이전’에 횡단전 관심사를 실행
    2. @AfterReturning→중심적 관심사가 정상적으로 종료된 후에 횡단적 관심사를 실행
    3. @AfterThrowing→중심적 관심사로부터 예외가 던져진 후로 횡단적 관심사를 실행
    4. @After→중심적 관심사의 실행 후에 횡잔적 관심사를 실행 (정상 종료나 예외 종료 드으이 결과와 상관없이 실행)
    5. @Around→중앙적 관심사 호출 전후에 횡단적 관심사를 실행
  2. 포인트컷 식: 직접 어드바이스를 만드는 경우 어드바이스 상입 대상 (패키지, 클래스, 매소드 등)을 조건으로 지정하는 방법. 와읻ㄹ드카드, execution 지시자를 사용하면 유연하게 적용 범위 지정이 가능하다.
    1. execution 지시자: execute(반환값 패키지.클래스.메서드(인수))
      • execution( com.example.service.DemoService.(..))→DemoService 클래스의 메서드에 어드바이스를 적용합니다, 등.
    2. 와일드카드 (*(애스터리스크), .. (점 두 개), +(플러스))
  3. 스프링 프레임워크가 제공하는 AOP 기능 (@Transactional)

3. Spring Initializr

:스프링 부트에서 프로젝트를 시작할 때 통합 개발 환경 (IDE)에 의존하지 않는 프로젝틀르 만드는 방법. (IDE란? 코딩을 편히 할 수 있는 기능 (코드 자동 완성, 코드 분석, 리팩터링 등)이 탑재된 환경.)

profile
studying backend

0개의 댓글