면접에서 @SpringBootApplication에 대해서 질문을 받았는데 분명 스프링부트 프로젝트에서 항상 사용하는데 제대로 답변하지 못한 충격으로 Spring에서 사용하는 어노테이션들을 볼때마다 정리 할려고 만든 글입니다.
제대로 설명 못하는 것들을 전부 적어두고 정리해 나아갈려고합니다 .ㅎ
미정리 목록
// Lombok
@Slf4j - 로그를 남기기 위해 Logger 변수를 선언을 따로 하지않게 해주는 어노테이션
@Getter - 클래스나 필드 위에 적용하면 getter 메서드를 생성
@Setter - 클래스나 필드 위에 적용하면 setter 메서드를 생성
@NoArgsConstructor - 파라미터가 없는 기본 생성자 생성
@RequiredArgsConstructor - final, @NonNull 필드 값만 파라미터로 받은 생성자 생성
@AllArgsConstructor - 모든 필드 값을 파라미터로 받는 생성자 생성
@ToString - Object 객체의 ToString 메서드를 객체에 맞게 오버라이딩 + exclude 속성을 통해서 특정 필드값 제외 가능
@EqualsAndHashCode - Object 객체의 equals, hashCode 객체에 맞게 오버라이딩
@Data - @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode를 한번에 적용하는 어노테이션
@Builder - 객체에 대한 빌터 패턴을 자동 생성, 클래스 위보다 생성자 위에 설정하는 것이 올바름
@NonNull - 메서드의 특정 파라미터에 적용시 null-check 코드 자동 생성
@SpringbootApplication - 스프링 부트의 애플리케이션 클래스라는 것을 의미,
내부적으로 SpringBootConfiguration, EnableAutoConfiguration, ComponentScan 을 가지고 있음
@SpringBootConfiguration - 클래스가 응용 프로그램 구성을 제공함을 나타냄
@Configuration - 클래스가 응용 프로그램 구성을 제공함을 나타냄, @SpringBootConfiguration의 일부
@EnableAutoConfiguration - 사전에 정의한 라이브러리들을 Bean으로 등록해 주는 어노테이션,
사전에 정의한 라이브러리들 모두가 등록되는 것은 아니고 특정 Condition(조건)이 만족될 경우에 Bean으로 등록
@OnBeanCondition : 특정 Bean이 사전에 생성되어있지 않을 경우에 조건이 만족됩니다.
@ConditionalOnBean : 특정 Bean이 이미 생성되어있을 경우에 조건이 만족됩니다.
@ConditionalOnClass : Classpath에 특정 class가 존재할 경우에 조건이 만족됩니다.
@ ComponentScan - 컴포넌트 스캔 설정 어노테이션,
@component 어노테이션 및 @Service, @Repository, @Controller 등의 어노테이션을 스캔하여
Bean으로 등록해주는 어노테이션
스캔 범위를 지정해줄 수 있다.
@Component - Spring에서 관리되는 객체임을 표시하기 위해 사용하는 가장 기본적인 어노테이션
SCAN, DI을 사용하기 위해서 사용
@Controller -
@Service
@Repository
@RestController - 기본 @Controller에 @RequestBody가 적용됨,
REST 컨트롤러, 스프링 내부에서 view가 아닌 converter가 사용됨
@RequestBody
@RequestParam - 요청 파라미터를 메서드 파라미터에 넣기 위해서 사용하는 어노테이션
@PathVariable - URL에 명시된 변수({})를 받아오기 위한 어노테이션
@ModelAttribute - Model 객체에 속성값을 주입하거나 바인딩할 때 사용되는 어노테이션,
커맨드 객체에 대한 자동 바인딩 관련하여 사용
@Transactional - 선언적 트랜잭션으로 특정 메서드를 하나의 트랜잭션으로 묶어서 사용,
속성을 통해서 격리수준, 전파 설정이 가능
@Value - roperties에서 값을 가져와 적용할 때 사용
@Autowired
@RequestMapping
@PostMapping
@PutMapping
@DeleteMapping
@GetMapping
@PatchMapping
//Exception Handler
@ExceptionHandler
@ControllerAdvice
@RestControllerAdvice
@ResponseStatus
@Entity
@Id
@GeneratedValue
@Column
@Embeddable
@Embedded
@MappedSuperclass
@EntityListeners
@JsonInclude
@OneToMany
@ManyToOne
@Query
@Param
// 테스트 코드 junit5 기준
@Test
@DataJpaTest
@SpringBootTest
@ExtendWith
@BeforeEach
@AfterEach
@InjectMocks
@Mock
'Spring' 카테고리의 다른 글
스프링 멀티모듈 나누기 개념 및 실습(메이븐, 그래들) (4) | 2021.09.06 |
---|---|
트랜잭션 격리 수준 (0) | 2021.05.30 |
Spring 트랜잭션 전파 (0) | 2021.05.29 |
springboot에서 redis 다루기 (0) | 2021.05.23 |
Spring Interceptor (0) | 2021.04.12 |