Annotation이란?
- 사전적으로는 주석이라는 의미
- 자바에서 Annotaion은 코드 사이에 주석처럼 쓰임 -> 특별한 의미, 기능을 수행하도록 하는 기술
=> 프로그램에게 추가적인 정보를 제공해주는 메타 데이터(데이터를 위한 데이터)라고 볼 수 있음
Annotation 용도?
- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
- 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공
- 실행(런타임) 시 특정 기능을 실행하도록 정보를 제공
Annotation 사용 순서
- 어노테이션 정의
- 클래스에 어노테이션 배치
- 코드가 실행되는 중 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
'프로그래밍 > spring boot' 카테고리의 다른 글
[스프링부트] 실전! 스프링 부트와 JPA 활용2 지연 로딩과 조회 성능 최적화 #1 간단한 주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화 (0) | 2023.11.25 |
---|---|
[스프링 입문] 스프링을 공부해야 하는 이유? (2) | 2023.11.25 |
[STS] STS4 설치 / 기본 설정 (0) | 2023.11.20 |
[스프링부트] 실전! 스프링 부트와 JPA 활용2 지연 로딩과 조회 성능 최적화 #1 간단한 주문 조회 V2: 엔티티를 DTO로 변환 (0) | 2023.11.17 |
[스프링부트] 실전! 스프링 부트와 JPA 활용2 지연 로딩과 조회 성능 최적화 #1 간단한 주문 조회 V1: 엔티티를 직접 노출 (0) | 2023.11.15 |