프로그래밍/spring boot

[Annotations] Spring Boot Annotation 정리

aSpring 2023. 11. 23. 17:34
728x90
728x90

Annotation이란?

  • 사전적으로는 주석이라는 의미
  • 자바에서 Annotaion은 코드 사이에 주석처럼 쓰임 -> 특별한 의미, 기능을 수행하도록 하는 기술

     => 프로그램에게 추가적인 정보를 제공해주는 메타 데이터(데이터를 위한 데이터)라고 볼 수 있음

 

 

Annotation 용도?

  • 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
  • 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공
  • 실행(런타임) 시 특정 기능을 실행하도록 정보를 제공

 

Annotation 사용 순서

  1. 어노테이션 정의
  2. 클래스에 어노테이션 배치
  3. 코드가 실행되는 중 Reflection을 이용해 추가 정보를 획득 -> 기능을 실시

 

Reflection?

- 프로그램이 실행 중에 자신의 구조와 동작을 검사하고, 조사하고, 수정하는 것

- 프로그래머가 데이터를 보여주고, 다른 포맷의 데이터를 처리하고, 통신을 위해 직렬화(serialization)를 수행하고, bundling을 하기 위해 일반 소프트웨어 라이브러리를 만들도록 도와줌

- Java와 같은 객체 지향 프로그래밍 언어에서 Reflection을 사용하면 컴파일 타임에 인터페이스, 필드, 메소드의 이름을 알지 못해도 실행 중에 클래스, 인터페이스, 필드 및 메소드에 접근할 수 있으며 새로운 객체의 인스턴스화 및 메소드 호출을 허용함

 

 

Annotation 종류

@SpringBootApplication

- Spring boot application으로 설정

- @Configuration, @EnableAutoConfiguration, @ComponentScan 3가지를 하나의 Annotation으로 합친 것

 

@Controller

- View를 제공하는 controller로 설정, view(화면) return이 주목적

- API와 viewe를 동시에 사용하는 경우에 사용

- API 서비스로 사용하는 경우는 @ResponseBody를 사용하여 객체를 반환

 

@RestController

- REST API를 제공하는 controller로 설정(View로 응답하지 않는 Controller)

- method의 반환 결과를 JSON 형태로 반환

- data(json, xml 등) return이 주 목적

- 해당 Annotation이 적혀있는 Controller의 method는 HttpResponse로 바로 응답이 가능

- @ResponseBody 역할을 자동적으로 해주는 Annotation

-> @RestController = @Controller + @ResponseBody

 

@RestControllerAdvice

- @ControllerAdvice + @ResponseBody

 

@RequestMapping

- URL 주소를 맵핑

- 요청 URL을 어떤 method가 처리할지 mapping해주는 Annotation

- 요청 받는 형식을 정의하지 않는다면, 자동적으로 GET으로 설정됨

 

@GetMapping

- Http GetMethod URL 주소 맵핑

 

@PostMapping

- Http PostMethod URL 주소 맵핑

 

@PutMapping

- Http PutMethod URL 주소 맵핑

 

@DeleteMapping

- Http DeleteMethod URL 주소 맵핑

 

@RequestParam

- URL Query Parameter 맵핑

 

@RequestBody

- Http Body를 Parsing 맵핑

- 요청이 온 데이터(JSON이나 XML형식)를 바로 Class나 model로 매핑하기 위한 Annotation

- POST, PUT, PATCH로 요청 받을 때, 요청에서 넘어온 body 값들을 java 타입으로 파싱 해줌

 

@Valid

- POJO Java class의 검증

  ㄴ Plain Old Java Object

- 유효성 검증이 필요한 객체임을 지정

 

@Configuration

- 1개 이상의 bean을 등록 할 때 설정

- @Configuration을 클래스에 적용하고 @Bean을 해당 Class의 method에 적용하면 @Autowired로 Bean을 부를 수 있음

 

@Component

- 1개의 Class 단위로 등록 할 때 사용

- 개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 Annotation -> Spring은 해당 Annotation을 보고 Spring의 Bean으로 등록함

 

@Bean

- 1개의 외부 library로부터 생성한 객체를 등록 시 사용

- 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만드려고 할 때 사용

 

@Autowired

- DI(Dependency Injection, 의존성 주입)를 위한 곳에 사용

- 속성(field), setter method, constructor(생성자)에서 사용하며 Type에 따라 알아서 Bean을 주입해 줌

- 스프링이 자동적으로 값을 할당

 

@Qualifier

- @Autowired 사용시 bean이 2개 이상일때 명시적 사용

 

@Resource

- @Autowired + @Qualifier의 개념으로 이해

 

@Service

- Service Class에서 쓰이고, 비즈니스 로직을 수행하는 Class라는 것을 나타내는 용도

 

@Repository

- DAO class에서 쓰이며, DB에 접근하는 method를 가지고 있는 class에 쓰임

 

 @ExceptionHandler(ExceptionClassName.class)

- 해당 클래스의 예외를 캐치하여 처리

 

@ControllerAdvice

- Class 위에 ControllerAdvice를 붙이고 어떤 예외를 잡아낼 것인지는 각 메소드 상단에 @ExceptionHandler(예외클래스명.class)를 붙여서 기술함

 

@Transactional

- 데이터베이스 트랜잭션을 설정하고 싶은 method에 Annotation을 적용하면 method 내부에서 일어나는 데이터베이스 로직이 전부 성공하게 되거나 데이터베이스 접근 중 하나라도 실패하면 다시 rollback할 수 있게 해주는 Annotation

 

참고

https://velog.io/@gillog/Spring-Annotation-%EC%A0%95%EB%A6%AC

https://velog.io/@kai6666/Spring-Spring-AOP-%EA%B0%9C%EB%85%90

https://rebornbb.tistory.com/entry/SpringBoot-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-Annotation-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EC%A0%95%EB%A6%AC#%40Component-1

 

728x90
728x90