Spring Annotation 정리 - DoDaek/freelec-springboot2-webservice GitHub Wiki
@RestController
- 컨트롤러는 JSON을 반환하는 컨트롤러로 만들어 줍니다.
- 예전에는
@ResponseBody
를 각 메소드마다 선언했던 것을 한번에 사용할 수 있게 해준다고 생각하면 됩니다.
@GetMapping
- HTTP Method인
Get
의 요청을 받을 수 있는 API를 만들어줍니다.
- 예전에는
@RequestMapping(method = RequestMethod.GET)
으로 사용되었습니다.
@RunWith(SpringRunner.class)
- 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킵니다.
- 위와 같으면
SpringRunner
라는 스프링 실행자를 사용합니다.
- 즉, 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 합니다.
@WebMvcTest
- 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션입니다.
- 선언할 경우,
@Controller
, @ControllerAdvice
등을 사용할 수 있습니다.
- 단,
@Service
, @Component
, @Repository
등은 사용할 수 없습니다.
- ex. 컨트롤러만 사용할 때 선언할 수 있습니다.
@Autowired
- 스프링이 관리하는 빈( Bean )을 주입 받습니다.
@RequiredArgsConstructor
- 선언된 모든
final
필드가 포함된 생성자를 생성해 줍니다.
final
이 없는 필드는 생성자에 포함되지 않습니다.
@Getter
- 선언된 모든 필드의
get
메소드를 생성해줍니다.
- 클래스 내 모든 필드의
Getter
메소드를 자동생성
@Entity
- 테이블과 링크될 클래스임을 나타냅니다.
- 기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍(_)으로 테이블 이름을 매칭합니다.
- ex. SalesManager.java -> sales_manager table
@Id
@GeneratedValue
- PK의 생성 규칙을 나타냅니다.
- 스프링 부트 2.0 에서는
GenerationType.IDENTITY
옵션을 추가해야만 auto_increment
가 됩니다.
- 스프링 부트 2.0 버전과 1.5 버전에 차이가 있으니 잘 찾아봅시다.
@Column
- 테이블의 칼럼을 나타내며 굳이 선언하지 않더라도 해당 클래스의 필드는 모든 칼럼이 됩니다.
- 사용하는 이유는, 기본값 외에 추가로 변경이 필요한 옵션이 있으면 사용합니다.
- 문자열의 경우
VARCHAR(255)
가 기본인데, 사이즈를 500으로 늘리고 싶거나( ex.title ), 타입을 TEXT
로 변경하고 싶거나( ex.content ) 등의 경우에 사용됩니다.
@Builder
- 해당 클래스의 빌더 패턴 클래스를 생성
- 생성자 상단에 선언 시 생선자에 포함된 필드만 빌더에 포함
@NoArgsConstructor
- 기본 생성자 자동 추가
Posts
클래스에서 public Posts() {}
와 같은 효과
@After
- JUnit에서 단위 테스트가 끝날 때마다 수행되는 메소드를 지정합니다.
- 보통은 배포 전 전체 테스트를 수행할 때 테스트간 데이터 침범을 막기 위해 사용합니다.
- 여러 테스트가 동시에 수행되면 테스트용 데이터베이스인 H2에 데이터가 그대로 남아 있어 다음 테스트 실행 시 테스트가 실패할 수 있습니다.
@MappedSuperclass
- JPA Entity 클래스들이
BaseTimeEntity
을 상속할 경우 필드들(createdDate
, modifiedDate
)도 칼럼으로 인식하도록 합니다.
@EntityListener(AuditingEntityListener.class)
BaseTimeEntity
클래스에 Auditing 기능을 포함시킵니다.
@CreatedDate
- Entity가 생성되어 저장될 때 시간이 자동 저장됩니다.
@LastModifiedDate
- 조회한 Entity의 값을 변경할 때 시간이 자동 저장됩니다.