Back-End/Java

[Spring] Annotation 정의와 정리

CJun 2021. 7. 5. 22:31
반응형
Annotation (@) 란?
사전적 의미로는 주석이라는 뜻이다. 그리고 Java에서는 Annotation은 특별한 의미와 기능을 수행하도록 만드는 기술이다. 그래서 한마디로 Annotation은 프로그램에게 추가적인 정보를 제공해주어 메타데이터라고 보면 되겠습니다.

Annotation 용도

컴파일러에게 에러에 대한 정보를 제공한다.
빌드 및 코드를 자동으로 생성할 수 있게 끔 정보를 제공한다.
실행시에 특정 기능 부분을 실행할 수 있도록 정보를 제공한다.

 Annotation 사용 순서

 

1. 어노테이션을 먼저 정의해야한다.

2. 원하는 클래스에 어노테이션을 배치해둔다.

3. 코드가 실행되는 중에 Reflection을 이용해 추가 정보를 획득 후 기능을 실시한다.

 

 Annotation 종류

 

1. @ComponentsScan

- @Component, @Service, @Repository, @Configuration, @Controller 등이

붙은 Bean을 찾아서 Context에 bean등록을 해준다.

 

※ 그런데 왜 Spring에서 @Component로 통일하여 작성하지 않는가?

그 이유는 메소드에서 발생할 수 있는 unchecked exception을

스프링의 DataAccessException으로 처리가 가능하기 때문이다.

 

2. @Component

- 자신이 직접 작성한 클래스를 Bean으로 등록을 위해 사용한다.

 

3. @Autowired

- 속성 및 생성자 등에 사용하고 Type에 따라 알아서 Bean을 주입해 준다.

 

4. @RestController

- 메서드의 반환 결과를 JSON 형태로 반환해주고

Controller 중 View로 응답하지 않는 Controller를 의미한다.

 

5. @Repository

- DataBase에 접근하고 method를 가지고있는 DAO 클래스에 쓰인다.

 

6. @Service

- 비즈니스 로직을 수행하는 클래스를 나타내는 용도이다.

 

7. @Configuration

- @Configuration 적용 후에 @Bean을 해당 클래스의 method에 적용하면

@Autowired로 Bean을 부를 수 있다.

 

8. @Value

- properties에서 값을 가져와 적용할 때 사용이 된다.

 

9. @SpringBootApplication

- @Configuration, @EnableAutoConfiguration, @ComponentScan을 3가지로 합친것이다.

 

10. @RequestMapping

- 요청 URL을 어떤 method가 처리할지 정한다.

 

11. GetMapping

- @RequestMapping과 같으며

@PostMapping, @PutMapping, @PatchMapping, @DeleteMapping 도 있다.

 

12. @CrossOrigin

- CORS 보안상의 문제로 브라우저에서 리소스를 현재 origin에서 다른 곳으로 AJAX 요청을 방지하는 것이다.

 

13. @RequestBody

- 요청이 온 데이터(JSON 및 XML 등)을 바로 클래스 또는 model로 매핑을 해준다.

 

14. @RequestHeader

- Request의 header값을 가져올 수 있어서 메소드의 파라미터에 사용이 많이 된다.

 

15. @RequestParam

- request의 parameter에서 가져오고 method의 파라미터에 사용이 된다.

 

16. @ResponseBody

- HttpMessageConverter를 이용해 JSON 또는 xml로 요청에 응답할 수 있게 해준다.

 

17. @Transactional

- 데이터베이스 로직이 전부 성공하거나 하나라도 실패한다면 다시 롤백할 수 있게 해준다.

 

18. @Cacheable

- 최초에 호출하게 된다면 캐시에 적재하고 다음부터는 동일한 호출이 있다면 캐시에서

 결과를 가져와 return해주어 호출 횟수를 줄여준다.

 


Lombok Annotation

 

1. NoArgsConstructor

- 기본 생성자를 자동으로 만들어준다.

 

2. RequiredArgsConstructor

- final 및 @NonNull인 필드값만 파라미터로 받는 생성자를 추가한다.

 

3. @Getter

- 모든 필드의 Getter method를 자동으로 생성해준다.

 

4. @Setter

- 모든 필드의 Setter method를 자동으로 생성해준다.

 

5. @EqualsAndHashCode

- equals와 hashCode method를 오버라이딩 해준다. 

 

6. @ToString

- 모든 필드의 toString method를 자동으로 생성해준다.

 

7. @Builder

- 어느 필드에 값을 채워야할지 명확하게 정해주어 생성 시점에 값을 넣어준다.

 

7. @Data- 앞서말한 @Getter @Setter @EqualsAndHashCode @AllArgsConstructor을 포함한다.하지만 모든 기능 허용으로 위험이 존재하여 실제로 사용을 많이 하지 않는다.

 


JPA Annotation

 

1. @Entity

- DB의 테이블과 매칭될 클래스임을 명시한다.

한마디로는 테이블과 링크될 클래스이다.

 

2. @Id

- 해당 table의 PK 필드를 나타내준다.

 

3. @Table

- Entity Class에 매핑되는 테이블 정보를 알려준다.

ex) @Table(name ="Board")

 

4. @GeneratedValue

- PK의 생성 규칙을 나타내준다.

 

5. @Column

- 테이블의 컬럼을 나타내고 선언하지 않아도 해당 클래스의 필드는 모두 컬럼이된다.

ex) @Column(name = "username")

주로 문자열의 사이즈를 늘리고 싶거나 타입을 바꿀때 사용이 된다.

반응형