yeon's blog

[Spring] Annotation? 본문

Spring/Spring 개념

[Spring] Annotation?

yeonii 2023. 11. 30. 20:09

 

1. Annotation

  • 사전적 의미로 주석이라는 뜻
  • 자바에서는 특별한 의미, 기능을 수행하도록 하는 기술
  • 클래스가 어떤 역할인지 정하기도 하고, Bean을 주입하기도 하며, 자동으로 getter, setter를 생성하기도 함


2. Annotation 종류

@Component

개발자가 생성한 class를 Spring의 Bean으로 등록할 때 사용하는 Annotation

 

@ComponentScan

@Component, @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을 찾아 Context에 bean을 등록해주는 Annotation

 

@Bean

개발자가 제어가 불가능한 외부 라이브러리와 같은 것들을 Bean으로 만들 때 사용하는 Annotation

 

@Controller

클래스가 Controller 역할을 하는 것을 명시하는 Annotation으로, view(화면) return이 목적

 

@RestController

View로 응답하지 않는 Controller를 의미하는 Annotation으로, data(json, xml 등) return이 목적
-> Json 형태로 반환
-> @ResponseBody 역할을 자동적으로 해주는 Annotation

 

@Service

클래스가 Service 역할을 하는 것을 명시하는 Annotation
-> 비즈니스 로직을 수행하는 클래스

 

@Repository

클래스가 Repository 역할을 하는 것을 명시하는 Annotation
-> DAO 클래스 같이 Database에 접근하는 메소드를 가지고 있는 클래스에 쓰임

 

@PostConstruct / @PreConstruc

의존하는 객체를 생성한 이후 초기화 작업을 위해 객체 생성 전/후에 실행해야 할 메소를 앞에 붙이는 Annotation

 

@RequestMapping

@RequestMapping(value = " ") 형태로 작성하며, 요청이 들어온 URL과 Annotation value 값이 일치하면 해당 클래스나 메소드가 실행됨

 

@RequestParam

URL에 전달되는 파라미터를 메소드의 인자와 매치시켜, 파라미터를 받아서 처리할 수 있는 Annotation
-> Json 형식의 Body를 MessageConverter를 통해 Java 객체로 변환시킴

 

@RequestBody

Body에 전달되는 데이터를 메소드의 인자와 매칭시켜, 데이터를 받아서 처리할 수 있는 Annotation
-> 클라이언트가 보내는 Http 요청 본문을 Java 오브젝트로 변환시킴

 

@ModelAttribute

클라이언트가 전송하는 HTTP parameter, Body 내용을 Setter 함수를 통해 1:1로 객체에 데이터를 연결(binding)해주는 Annotation
-> multipart/form-data 형태 요구
-> json을 받아 처리할 수 없음

 

@ResponseBody

메소드에서 리턴되는 값이 View로 출력되지 않고 HTTP Response Body에 직접 쓰여지게 하는 Annotation
-> return 시 json, xml과 같은 데이터를 리턴함

 

@PathVariavle

method parameter 앞에 사용하여, 해당 URL에서 {특정값}을 변수로 받아오는 Annotation
-> REST API에서 값을 호출할 때 주로 많이 사용

 

@Transactional

데이터베이스 트랜잭션을 설정하고 싶은 메소드에 적용하여, 메소드 내부에서 일어나는 데이터베이스 로직이 전부 성공하게 되거나, 데이터베이스 접근중 하나라도 실패하면 다시 롤백할 수 있게 해주는 Annotation
-> 모든 처리가 정상적으로 됐을 때만 DB에 커밋하며, 그렇지 않은 경우엔 커밋하지 않는 것.
-> DB데이터를 등록/수정/삭제하는 Service 메소드는 @Transaction을 필수적으로 가져감

  • @Transaction(readOnly=true): 읽기 전용
  • @Transaction(rollbackFor=Exception.class): 해당 Exception이 생기면 롤백
  • @Transaction(noRollbackFor=Exception.class): 해당 Exception이 생겨도 롤백하지 X
  • @Transaction(timeout=10): 10초안에 해당 로직을 수행하지 못하면 롤백

 

@Valid

유효성 검증이 필요한 객체임을 지정하는 Annotation

 



3. Lombok Annotation 종류

Lombok: 코드를 줄여 가독성을 높일 수 있는 Annotation

 

@Getter

Class 모든 필드의 Getter method를 생성해주는 Annotation

 

@Setter

Class 모든 필드의 Setter method를 생성해주는 Annotation

 

@AllArgsConstructor

Class 모든 필드 값을 파라미터로 받는 생성자를 추가해주는 Annotation

 

@ NoArgsConstructor

Class 기본 생성자를 자동으로 추가해주는 Annotation
-> 기본 생성자의 접근 권한을 proteced로 제한

 

@RequiredArgsConstructor

final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 추가해주는 Annotation

 

@ToString

Class 모든 필드의 toString method를 생성해주는 Annotation

 

@Data

@Getter, @Setter, @EqualsAndHashCode, @AllArgsConstructor를 포함한 Lombok에서 제공하는 필드와 관련된 모든 코드를 생성하는 Annotation
-> 전체적인 모든 기능 허용을 나타내므로 위험함
-> 실제로 사용하지 않는 것이 좋음

 



4. JPA Annotation 종류

JPA를 사용하면, DB 데이터에 작업할 경우 실제 쿼리를 사용하지 않도 Entity 클래스의 수정을 통해 작업할 수 있다.

 

@Entity

실제 DB의 테이블과 매칭될 클래스임을 명시하는 Annotation

 

@Table

Entity 클래스에 매핑할 테이블 정보를 알려주는 Annotation

 

@ID

해당 테이블의 PK 필드를 나타내는 Annotation

 

@GeneratedValue

PK의 생성 규칙을 나타내는 Annotation
-> 가능한 Entity의 PK는 Long 타입의 Auto_increment로 설정

 

 

* 자주 쓰는 Annotation들을 계속해서 이 글에 추가할 예정입니다.


References

https://melonicedlatte.com/2021/07/18/182600.html


https://velog.io/@ruinak_4127/Annotation%EC%9D%B4%EB%9E%80

'Spring > Spring 개념' 카테고리의 다른 글

[Spring] Spring Security 처리 과정  (0) 2023.12.12
[Spring] Spring Security 개념  (0) 2023.12.12
[Spring] 프로그램 구조 설계  (0) 2023.12.12
[Spring] 스프링 컨테이너  (0) 2023.11.30
[Spring] Spring? Spring Boot?  (2) 2023.11.30