Note-Taking / / 2024. 8. 9. 16:42

Spring Framework에서 테스트 어노테이션과 자바 기반 설정의 역할 정리

SpringFramework Test Depndency는 Main에서 사용되지 않고 Only Test용도에서만 호출되어서 사용이 됨.

 

@Configration : Java based Configuration Metadata

@ExtendWith(SpringExtenstion.class) : Jupiter Annotation에서 정의함.

-> 이 확장을 사용함으로써 JUnit5 테스트에서 Spring의 기능(Spring IoC Container)을 완전히 활용할 수 있다.

 

SpringExtension의 주요기능

-> 의존성 주입지원, Autowired(자동주입)

Autowired : String IoC Container에 의해서 해당 필드 UserDao에  UserDao 빈을 주입함.

-> Spring ApplicationContext = Spring IoC Container

-> context가 변경사항이 있다 가정하였을 때 *DirtiesContext*를 사용해야 한다.(어쩔 수 없이 변경을 할 때 사용을 해라.) : 클래스 레벨에서 사용해야 한다.

@interface = Annotation

 

String[] value() default {};

->*value라는 속성* : value를 locations

-> String[] value() default {};는 자바에서 주로 애노테이션을 정의할 때 사용되는 구문입니다. 이 구문은 애노테이션의 속성으로 value라는 이름의 배열을 정의하며, 기본값으로 빈 배열을 설정합니다. 이 구문은 애노테이션의 속성 중 하나로, 여러 문자열 값을 받을 수 있도록 설정합니다.

 

Class<?>[]

-> 뭔지는 모르겠지만 배열(엘리먼트가 클래스 와일드카드 / 어떤 엘리먼트 클래스 객체가 와도 상관없다.)

1. 제너릭 타입:

Class<?>는 제너릭 타입 Class의 와일드카드 형태로, 구체적인 타입을 명시하지 않고 다양한 타입의 클래스를 수용할 수 있습니다.

2. 배열 타입:

Class<?>[]는 여러 Class<?> 객체를 담을 수 있는 배열로, 다수의 클래스 타입 정보를 저장할 수 있습니다.

3. 애노테이션에서의 사용:

애노테이션의 속성으로 Class<?>[]를 사용하면 여러 클래스 타입을 애노테이션에 전달할 수 있습니다.

 

@interface DirtiesContext

->

테스트 중 컨텍스트 무효화: 테스트가 애플리케이션 컨텍스트에 변화를 일으킬 수 있는 경우, 예를 들어 데이터베이스를 수정하거나 다른 상태를 변경하는 경우, @DirtiesContext를 사용하여 테스트 후 컨텍스트를 무효화할 수 있습니다.

테스트의 독립성 보장: @DirtiesContext를 사용하면 각 테스트가 독립적으로 실행될 수 있도록 보장할 수 있습니다. 즉, 하나의 테스트가 애플리케이션 컨텍스트를 수정하더라도 다른 테스트에 영향을 미치지 않습니다.

 

Annotoation을 위한 정보를 가지는 Annotation을 MetaAnnotation이라고 함.

 

@Target

->

ElementType.TYPE: 클래스, 인터페이스, 열거형 또는 애노테이션 타입에 적용됩니다.

ElementType.FIELD: 필드에 적용됩니다.

ElementType.METHOD: 메서드에 적용됩니다.

ElementType.PARAMETER: 메서드 또는 생성자의 매개변수에 적용됩니다.

ElementType.CONSTRUCTOR: 생성자에 적용됩니다.

ElementType.LOCAL_VARIABLE: 지역 변수에 적용됩니다.

ElementType.ANNOTATION_TYPE: 애노테이션 타입에 적용됩니다.

ElementType.PACKAGE: 패키지 선언에 적용됩니다.

 

@AliasFor : Location을 위한 별명

-> @AliasFor는 Spring Framework에서 애노테이션의 속성을 별칭(alias)으로 지정하는 데 사용됩니다. 이 애노테이션은 주로 애노테이션 속성의 기본값을 설정하거나, 두 속성 간에 별칭을 지정하여 유연성을 제공하는 데 유용합니다. 이를 통해 애노테이션의 속성 간의 관계를 정의하고, 애노테이션 사용을 더 간결하게 할 수 있습니다.

 

오브젝트 = 인스턴스

 

자바 기반의 컨피규레이션 메타데이터 (Java-Based Configuration)

 

자바 기반의 컨피규레이션은 @Configuration 애너테이션이 붙은 자바 클래스를 사용하여 설정을 정의합니다. 이 방법은 XML 기반의 설정 파일 대신 자바 클래스를 사용하여 설정을 구성할 수 있도록 해줍니다.

 

특징:

 

1. 타입 안전성: 컴파일 타임에 타입 체크가 이루어지므로, 잘못된 설정에 대한 오류를 조기에 발견할 수 있습니다.

2. 자동 완성: IDE에서 자동 완성 기능을 제공하여 설정을 쉽게 작성할 수 있습니다.

3. 자바 코드의 이점: 자바 언어의 기능을 활용하여 복잡한 로직을 설정에 포함시킬 수 있습니다.

4. 모듈화: 설정을 모듈화하여 유지 보수성을 높일 수 있습니다.

 

어노테이션 기반의 컨피규레이션 (Annotation-Based Configuration)

 

어노테이션 기반의 컨피규레이션은 Spring 애플리케이션에서 사용되는 다양한 어노테이션을 통해 설정을 정의합니다. 이 방법은 애플리케이션의 클래스와 메서드에 직접 어노테이션을 붙여서 설정을 구성합니다.

 

특징:

 

1. 단순함: 설정을 클래스와 메서드에 직접 어노테이션으로 정의하므로 설정이 직관적입니다.

2. 자동 구성: @Component, @Service, @Repository, @Controller 등과 같은 어노테이션을 통해 Spring 컨테이너가 자동으로 빈을 구성하고 관리합니다.

3. 커스터마이징: 빈의 설정을 세부적으로 조정할 수 있는 다양한 어노테이션을 제공합니다.

4. 유연성: 어노테이션을 통해 다양한 설정을 손쉽게 조정할 수 있습니다.

 

리플랙션은 Excess Modifier를 무시해버린다.

인터페이스도 .class를 붙인다

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유