스프링 어노테이션 정리

이진영·2023년 7월 19일
0

Spring

목록 보기
3/18
  • 스프링에서 관리되는 객체를 빈Bean이라고 한다
  • 컨텍스트Context : 스프링 프레임워크가 시작될 때 먼저 만드는 ‘사용할 메모리 영역’
  • 스프링은 관리가 필요한 객체(Bean)들을 어노테이션 등을 이용해서 객체를 갱성하고 관리하는 컨테이너나 팩토리 기능을 갖고 있다

@Data :
Lombok에서 가장 자주 사용되는 어노테이션
getter/setter, equals(), toString() 등의 메서드를 자동 생성
@ToString, @EqualsAndHashCode, @Getter/Setter, @RequiredArgsConstructor를 모두 결합한 형태로 한 번에 자주 사용되는 모든 메서드들을 생성할 수 있다는 장점이 있다(세부적인 설정이 필요없는 경우 @Data를 주로 이용한다)

@Controller :
method 속성을 추가할 수 있음, GET, POST, PUT, DELETE 방식이 있으며 @GetMethod이 경우 GET 방식에만 사용할 수 있다(기능에 대한 제한이 많은 편)
파라미터를 자동으로 수집하는데, 이 경우 DTO에 선언된 타입을 따라 자동으로 변환해준다

@Controller가 붙어있는 클래스는 @Data 어노테이션이 붙어있는 클래스의 파라미터를 자동으로 수집한다



@Component :
스프링에게 해당 클래스가 스프링에서 관리해야 하는 대상(=객체)임을 표시함

@Setter :
컴파일 시 자동으로 set—()을 생성

@ComponentScan :
XML로 설정하는 대신 사용, @Component가 존재하는 클래스들을 객체로 생성해서 빈으로 관리함
지정한 패키지를 스캔, 즉 @Component가 있는 클래스를 스프링이 읽어주도록 @ComponentScan을 통해 지정하는 것

@RunWith :
테스트 시 필요한 클래스를 지정(스프링은 SpringJUnit4ClassRunner 클래스가 대상이 된다)
스프링을 실행하는 역할을 할 것임을 표시하는 어노테이션

@ContextConfiguration :
지정된 클래스나 문자열을 이용해서 필요한 객체들을 스프링 내에 객체(스프링의 빈Bean)로 등록

@Log4j :
Lombok을 이용해서 로그를 기록하는 Logger를 변수로 생성
즉, 로그 객체를 생성

Lombok :
컴파일 시 흔하게 코드를 작성하는 기능들을 완성해주는 라이브러리

@Autowired :
해당 인스턴스 변수가 스프링으로부터 자동으로 주입해 달라는 표시=
스프링 내부에서 자신이 특정한 객체에 의존적이므로 자신에게 해당 타입의 빈을 주입해주라는 표시
개발자가 직접 객체들과의 관계를 관리하지 않고 자동으로 관리되도록 함

@Test :
JUnit에서 테스트 대상을 표시하는 어노테이션
junit에서 해당 메서드가 jUnit 상에서 단위 테스트 대상인지 알려줌

assertNotNull() :
변수가 null이 아니어야만 테스트가 성공한다는 것을 의미

@ContextConfiguration :
스프링이 실행되면서 어떤 설정 정보를 읽어 들여야 하는지를 명시
방법1 -
locations을 이용하여 문자열의 배열로 XML 설정 파일을 명시
방법2-
classes 속성으로 @Configuration이 적용된 클래스를 지정

@AllArgsConstructor :
인스턴스 변수로 선언된 모든 것을 파라미터로 받는 생성자를 작성함

@RequiredArgsConstructor :
@NonNull이나 final이 붙은 인스턴스 변수에 대한 생성자를 만들어냄

@RequestParam :
파라미터로 사용된 변수의 이름과 전달되는 파라미터의 이름이 다른 경우에 사용
동일한 이름의 파라미터가 여러 개 전달되는 경우 ArrayList<> 혹은 배열을 사용하여 처리한다

//ArrayList<>를 사용하는 경우
@GetMapping("/ids01")
	public String ids01(@RequestParam("ids") ArrayList<String> ids) {
	...
    return "ids01";
}

->/ids01?ids=111&ids=222&ids=333


//배열을 사용하는 경우
@GetMapping("/ids02")
	public String ids02(@RequestParam("ids") String[] ids) {
	...
    return "ids02";
}

->/ids02?ids=111&ids=222&ids=333

@InitBinder :
Controller에서 파라미터를 바인딩binding(수집)할 때, 2013-01-25와 같이 문자열로 전달되는 날짜 데이터를 java.util.Date 타입으로 변환하여 처리한다

@DateTimeFormat :
파라미터로 사용되는 인스턴스 변수에 바로 적용이 가능, 단
"yyyy/MM/dd" 형식을 지켜서 전달
해야한다(이때 @InitBinder은 필요하지 않다)

@ModelAttribute :
강제로 전달받은 파라미터를 Model에 담아서 전달하도록 할 때 필요한 어노테이션
즉, DTO에 없는 파라미터를 url로 전달하고자 할 때 @ModelAttribute("파라미터")와 같이 값을 지정하여 사용한다

@ResponseBody :
메서드의 리턴 타입을 VO나 DTO 타입 등 복합적인 데이터가 들어간 객체 타입으로 지정할 때, JSON 데이터를 만들어 내는 용도로 사용함(pom.xml에 jackson-databinde 라이브러리를 추가해야함)

@ControllerAdvice :
해당 객체가 스프링의 컨트롤러에서 발생하는 예외를 처리하는 존재임을 명시
공통적인 예외사항을 처리할 때 @ExceptionHandler와 함께 사용

@ExceptionHandler :
해당 메서드가 () 들어가는 예외 타입을 처리한다는 것을 의미, 속성으로 Exception 클래스 타입을 지정할 수 있으며 Exception.class를 지정하면 해당 메서드만을 이용해서 예외에 대한 처리가 진행됨

@ResponseStatus :
Network의 State Code를 변경해준다

@EnableWebMvc :
@Bean, Config 등을 알아서 세팅해준다

WebMvcConfigurer :
스프링 MVC와 관련된 설정을 메서드로 오버라이드 하는 형태를 이용할 때 사용한다

@SelectKey :
주로 PK 값을 미리(before) SQL을 통해서 처리해 두고 특정한 이름으로 결과를 보관하는 방식

<selectKey keyProperty="PK" order="BEFORE" resultType="파라미터 타입">
	쿼리문
</selectKey>

@Service :
계층 구조상 주로 비즈니스 영역을 담당하는 객체임을 표시하기 위해 사용, 작성된 어노테이션은 패키지를 읽어 들이는 동안 처리됨

@RequestMapping :
어노테이션 뒤로 ("/주소/*")를 지정하면 해당 주소로 시작되는 모든 처리를 @RequestMapping가 붙어있는 클래스가 하도록 지정

@WebAppConfiguration :
WebApplicationContext라는 존재를 이용하기 위한 어노테이션

@Before :
@Before 어노테이션이 적용된 메서드는 모든 테스트 전에 매번 실행됨

addFlashAttrivute() :
데이터를 단 한 번만 사용할 수 있게 보관함, 즉, 일회성으로만 데이터를 사용할 수 있음

@Bean :
XML 설정에서 <bean>과 동일한 역할을 한다. @Bean이 선언된 메서드의 실행 결과로 반환된 객체는 스프링의 객체(Bean)으로 등록된다.



『코드로 배우는 스프링 웹 프로젝트 개정판』 - 구멍가게 코딩단 지음

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

정말 좋은 정보 감사합니다!

답글 달기