스프링 Annotation(어노테이션) 정리

취업 후 학습|2023. 6. 28. 16:01
728x90

업무를 하면서 다양하고 많은 Annotation에 대한 이해가 부족해 정리하고자 작성하기로 했다.

 

Lombok Annotation


@Setter

Class의 모든 필드에 해당하는 Setter 메서드 생성

 

@Getter

Class의 모든 필드에 해당하는 Getter 메서드 생성

 

@ToString

Class의 모든 필드에 해당하는 ToString 메서드 생성

 

@NoArgsConstructor

Class의 기본 생성자 추가

 

@RequiredArgsConstructor

Final이나 @NonNull인 필드만 파라미터로 받는 생성자 추가

 

@AllArgsConstructor

Class의 모든 필드 값을 파라미터로 받는 생성자 추가

 

@EqualsAndHashCode

Equals와 HashCode 메서드를 오버라이딩 하는 어노테이션

 

@Data

@Setter, @Getter, @ToString, @NoArgsConstructor 등 Lombok에서 제공하는 필드와 관련된 모든 코드 추가 (모든 기능 사용 가능하므로 Risk 존재해서 사용하지 않는 게 좋음)

 

JPA Annotation


@Entity

실제 DB 테이블과 매핑될 Class

 

@Table(name = "")

실제 DB의 name에 해당하는 테이블과 매핑(생략할 경우 Class명과 테이블명 매핑)

 

@Id

해당 테이블의 PK 필드

 

@Column(name = "")

name에 해당하는 컬럼과 매핑(생략할 경우 필드명과 컬럼명 매핑)

 

Spring Annotation 


@Controller

해당 Class는 Controller란 것을 명시하고 Spring에서 Bean으로 등록 (Bean이란 Spring에서 관리하는 자바 객체)

 

@Service

해당 Class는 비즈니스 로직을 수행하는 Service란 것을 명시하고 Spring에서 Bean으로 등록

 

@Repository

해당 Class는 DAO인 것을 명시하고 Spring에서 Bean으로 등록 (Spring에서 지원하지 않는 Exception을 Spring Exception으로 전환)

 

@Component

해당 Class는 Component란 것을 명시하고 Spring에서 Bean으로 등록 (@Controller, @Service, @Repository의 상위 어노테이션이므로 3가지 전부 @Component으로 대체 가능)

 

@Bean

개발자가 제어 불가능한 외부 라이브러리 등을 Bean으로 등록

 

@ComponentScan

@Component, @Controller, @Service, @Repository 가 부여된 Class 들을 검색해서 Bean으로 등록

 

@RequestMapping(value = "")

URI의 요청이 value와 일치할 경우 해당 클래스나 메서드 실행

 

@RequestParam(value = "", required = false)

메서드 파라미터 앞에 쓰며 Http 요청의 파라미터 값(value)을 메서드 파라미터로 받음

required 옵션의 Default는 true이며 true일 경우 해당 파라미터가 없을 때 400 에러 발생

 

@RequestBody

메서드 파라미터 앞에 쓰며 Http 요청의 Body를 자바 객체로 변환해서 매핑된 메서드 파라미터로 전달

 

@RequestHeader(value = "")

메서드 파라미터 앞에 쓰며 Request의 Header값을 메서드의 파라미터로 받는 어노테이션

 

@ResponseBody

자바 객체를 Http 요청의 Body로 변환(content-type을 application/json으로 설정 필요)

 

@RestController

@Controller와 @ResponseBody를 합친 어노테이션

 

@ModelAttribute

View단에서 전달하는 파라미터를 메서드의 파라미터로 변환해 주는 어노테이션(태그의 name과 클래스의 멤버 변수명, Set 메서드명 일치)

 

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping

각 Get, Post, Put, Delete, Patch 요청에 대한 Annotation

 

@Valid

파라미터 객체 앞에 쓰며 유효한 객체인지 검사

 

@CookieValue(value = "", required = false)

쿠키의 value 값을 받아오며 required의 Default는 true

required = false를 사용하지 않은 상태에서 해당 쿠키값이 존재하지 않다면 500 에러를 발생시키고 사용하면 존재하지 않을 때 null로 받음

 

@Lazy

Class가 실제 사용될 때 Spring에서 Bean등록을 하게 되는 지연 로딩

 

@Autowired

Field, Setter, Constructor 3가지에 사용하며 Type에 따라 Bean을 주입

 

@Qualifier("id")

@Autowired와 같이 쓰며 같은 타입의 Bean 객체가 있을 경우 명시된 ID로 원하는 Bean을 주입하는 어노테이션

 

@PathVariable

메서드 파라미터 앞에 쓰며 URI에서 특정 값을 메서드 파라미터로 받아오는 어노테이션

특정 값은 URI에서 {}로 감싸고 파라미터 명과 같음

 

@Transactional

메서드 내부의 DB 트랜잭션 설정하는 어노테이션

 

@Scheduled(cron = "")

Cron 표현식에 의한 정해진 시간에 메서드를 실행시키는 어노테이션

 

@Test

Junit에서 테스트할 대상으로 지정

728x90

댓글()