스프링 개발을 하다 보면 정말 많은 어노테이션을 만나게 된다.
물론 자주 쓰이는 어노테이션의 쓰임새는 다들 알고 있겠지만 가끔 헷갈리는 어노테이션이 있다.
때마다 찾지 않고 바로 볼 수 있도록 자주 쓰이는 어노테이션을 정리해서 끄적여보겠다.
※ 틀린 정보는 댓글에 피드백 해주세요!!
- 이번에 진행한 프로젝트에서 사용했던 어노테이션을 위주로 정리함 -
Spring 어노테이션
Spring에서 지원하는 어노테이션이다.
Spring
@Autowired: 스프링이 관리하는 빈(Bean)을 주입받는다.
@GetMapping: HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어줌
@RequestMapping: HTTP Method의 요청을 받을 수 있는 API를 만들어줌
ex) @Requestmapping(method = RequestMehod.GET) 등…
@RequestParam: 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션
@RestController: 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줌
예전에 @ResponseBody를 각 메서드마다 선언했던 것을 한 번에 사용할 수 있게 해 줌
@SpringBootApplication: 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정함
해당 어노테이션이 있는 위치부터 설정을 읽어가기 때문에 이 클래스는 항상 프로젝트의 최상단에 위치해야만 함
Spring Security(스프링 시큐리티)
@EnableWebSecurity: Spring Security 설정들을 활성화시켜줌
Spring Test & Junit
@After: Junit에서 단위 테스트가 끝날 때마다 수행되는 메서드를 지정
보통은 배포 전 전체 테스트를 수행할 때 테스트 간 데이터 침범을 막기 위해 사용함
여러 테스트가 동시에 수행되면 테스트용 데이터베이스에 데이터가 그대로 남아 있어 다음 테스트 실행 시 테스트가 실패할 수 있으므로 @After 어노테이션을 사용해서 테스트가 끝날 때 저장소의 데이터를 삭제함
@RunWith:
테스트를 진행할 때 Junit에 내장된 실행자 외에 다른 실행자를 실행시킴
ex) @RunWith(SpringRunner.class) -> SpringRunner라는 스프링 실행자를 사용함
즉, 스프링 부트 테스트와 Junit 사이에 연결자 역할을 함
@SpringBootTest: 통합 테스트를 제공하는 기본적인 스프링 부트 테스트 어노테이션
애플리케이션이 실행될 때의 설정을 임의로 바꾸어 테스트를 진행할 수 있으며 여러 단위 테스트를 하나의 통합된 테스트로 수행할 때 적합함
@WebMvcTest: 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션
선언할 경우 @Controller, @ControllerAdvice 등을 사용할 수 있다
단, @Service, @Component, @Repository 등은 사용할 수 없다
@WithMockUser: 자동으로 SecurityContext 오브젝트 및 Authentication 오브젝트가 생성돼 @WithMockUser 어노테이션의 속성에서 지정한 대로 UserDetails 오브젝트가 설정됨
ex) @WithMockUser(roles="USER")
JPA 어노테이션
@Column: 테이블의 칼럼을 나타내며 굳이 선언하지 않더라도 @Entity가 적용된 클래스의 필드는 모두 칼럼이 된다.
사용하는 이유는, 기본값 외에 추가로 변경이 필요한 옵션이 있으면 사용함
문자열의 경우 VARCHAR(255)가 기본값인데, 사이즈를 500으로 늘리고 싶거나(ex:title), 타입을 TEXT로 변경하고 싶거나(ex:content) 등의 경우에 사용됨
@CreatedDate: Entity가 생성되어 저장될 때 시간이 자동 저장됨
@EnableJpaAuditing: JPA Auditing을 활성화하기 위한 어노테이션
@Entity: 테이블과 링크될 클래스임을 나타냄
기본값으로 클래스의 카멜 케이스 이름을 언더스코어 네이밍(_)으로 테이블 이름을 매칭함
ex) SalesManager.java -> sales_manager table
@EntityListeners: @EntityListeners(AuditingEntityListener.class) -> 해당 클래스에 Auditing 기능을 포함시킴 (Auditing: 생성, 수정시간을 체크함)
@Enumerated: JPA로 데이터베이스로 저장할 때 Enum 값을 어떤 형태로 저장할지를 결정함
기본적으로는 int로 된 숫자가 저장됨
숫자로 저장되면 데이터베이스로 확인할 때 그 값이 무슨 코드를 의미하는지 알 수가 없음 그래서 아래의 방법을 사용
ex) @Enumerated(EnumType.STRING) -> 문자열(EnumType.STRING)로 저장될 수 있도록 선언해서 사용함
@GeneratedValue: PK의 생성 규칙을 나타냄
스프링 부트 2.0에서는 GenerationType.IDENTITY 옵션을 추가해야만 auto_increment가 됨
스프링 부트 2.0 버전과 1.5 버전의 차이는 이곳을 참고
@Id: 해당 테이블의 PK 필드를 나타냄
@LastModifiedDate: 조회한 Entity의 값을 변경할 때 시간이 자동 저장됨
@MappedSuperclass: JPA Entity 클래스들이 BaseTimeEntity을 상속할 경우 필드들(createdDate, modifiedDate)도 칼럼으로 인식하도록 함
JPA Entity 클래스가 해당 클래스를 상속할 경우 필드들도 칼럼으로 인식하도록 함
@Query: SpringDataJpa에서 제공하지 않는 메서드를 쿼리로 작성할 때 사용함
ex) @Query("SELECT * FROM EXAMPLE")
@RequiredArgsConstructor: 선언된 모든 final 필드가 포함된 생성자를 생성해줌
final이 없는 필드는 생성자에 포함되지 않음
LomBok(롬복) 어노테이션
@Builder: 해당 클래스의 빌더 패턴 클래스를 생성
생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함
@Getter: 클래스 내 모든 필드의 Getter 메서드를 자동 생성
@NoArgsConstructor: 기본 생성자 자동 추가
public 클래스명() {}와 같은 효과
해당 어노테이션의 사용으로 @Autowired를 대신함
댓글