## Spring Core
|Annotation 이름|의미|포함된 @ 목록|소스 코드|
|---------------------|---------------|----------------------|-----------------------------------------------|
|`@Configuration`|해당 클래스가 Bean 설정 정보를 제공| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java)|
|`@Bean`|메서드가 Spring 컨테이너에게 Bean을 제공| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-context/src/main/java/org/springframework/context/annotation/Bean.java)|
|`@Component`|해당 클래스가 Spring에서 관리하는 컴포넌트임을 지정|`@Bean`| [소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-context/src/main/java/org/springframework/stereotype/Component.java)|
|`@Autowired`|자동으로 Bean을 주입받는 데 사용| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java)|
|`@Value`|외부 프로퍼티 값을 필드에 주입| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Value.java)|
|`@Scope`|Bean의 범위를 지정| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-beans/src/main/java/org/springframework/context/annotation/Scope.java)|
|`@ComponentScan`|컴포넌트 스캔을 수행하는 범위를 지정| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-context/src/main/java/org/springframework/context/annotation/ComponentScan.java)|
|`@Conditional`|조건에 따라 Bean을 등록| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-context/src/main/java/org/springframework/context/annotation/Conditional.java)|
## Spring MVC
|Annotation 이름|의미|포함된 @ 목록|소스 코드|
|---------------------|---------------|----------------------|-----------------------------------------------|
|`@RestController`|Controller 클래스임을 지정하며, 각 메서드에 대한 응답이 HTTP Response Body로 전송됨| `@Controller`|[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/RestController.java)|
|`@RequestMapping`|URL과 Controller 메서드를 매핑| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMapping.java)|
|`@GetMapping`|HTTP GET 요청과 매핑|`@RequestMapping`|[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/GetMapping.java)|
|`@PostMapping`|HTTP POST 요청과 매핑|`@RequestMapping`|[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/PostMapping.java)|
|`@PutMapping`|HTTP PUT 요청과 매핑|`@RequestMapping`|[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/PutMapping.java)|
|`@DeleteMapping`|HTTP DELETE 요청과 매핑|`@RequestMapping`|[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/DeleteMapping.java)|
|`@RequestParam`|HTTP 요청 파라미터를 메서드 파라미터에 바인딩| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestParam.java)|
|`@RequestBody`|HTTP 요청의 본문(body)을 메서드 파라미터에 바인딩| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestBody.java)|
|`@RequestHeader`|HTTP 요청 헤더를 메서드 파라미터에 바인딩| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestHeader.java)|
|`@RequestPart`|HTTP 요청의 멀티파트(body)를 메서드 파라미터에 바인딩| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestPart.java)|
|`@ResponseBody`|메서드의 반환값을 HTTP 응답 바디로 직접 전송| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/ResponseBody.java)|
|`@PathVariable`|URL 템플릿 변수를 메서드 파라미터에 바인딩| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/PathVariable.java)|
|`@ModelAttribute`|HTTP 요청을 통해 전달된 모델 속성을 바인딩| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/ModelAttribute.java)|
|`@ExceptionHandler`|Controller 내에서 예외를 처리| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/ExceptionHandler.java)|
|`@InitBinder`|요청 파라미터를 바인딩하기 전에 초기화 작업을 수행| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/InitBinder.java)|
|`@SessionAttributes`|세션에 속성을 저장하고 검색| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/SessionAttributes.java)|
|`@CrossOrigin`|Controller 또는 메서드에 대한 CORS(Cross-Origin Resource Sharing) 구성| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/CrossOrigin.java)|
|`@ResponseStatus`|Controller 메서드의 응답 상태 코드를 지정| |[소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/web/bind/annotation/ResponseStatus.java)|
## Spring Data JPA
| Annotation 이름 | 의미 | 포함된 @ 목록 | 소스 코드 |
|-------------------|---------------------------------------------|------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|
| `@Entity` | JPA 엔티티 클래스임을 지정 | `@javax.persistence.Entity` | [소스 코드](https://github.com/spring-projects/spring-data-jpa/blob/main/src/main/java/org/springframework/data/mapping/model/Entity.java) |
| `@Repository` | DAO 클래스임을 지정하고 예외를 특별한 예외로 변환 | | [소스 코드](https://github.com/spring-projects/spring-data-jpa/blob/main/src/main/java/org/springframework/data/repository/RepositoryDefinition.java) |
| `@Query` | JPQL이나 네이티브 쿼리를 사용하여 메서드에 직접 쿼리 정의 | | [소스 코드](https://github.com/spring-projects/spring-data-jpa/blob/main/src/main/java/org/springframework/data/jpa/repository/Query.java) |
| `@Transactional` | 트랜잭션을 선언적으로 적용 | `@o.s.t.a.Transactional` | [소스 코드](https://github.com/spring-projects/spring-framework/blob/main/spring-tx/src/main/java/org/springframework/transaction/annotation/Transactional.java) |
| `@Audited` | 변경 추적을 위해 엔티티의 변경 이력을 저장 | | [소스 코드](https://github.com/spring-projects/spring-data-envers/blob/main/src/main/java/org/springframework/data/envers/annotation/Audited.java) |
| `@Lock` | 메서드 수행 중에 적용되는 데이터베이스 락을 지정 | | [소스 코드](https://github.com/spring-projects/spring-data-jpa/blob/main/src/main/java/org/springframework/data/jpa/repository/Lock.java) |
| `@Modifying` | UPDATE 또는 DELETE 쿼리를 실행하는 메서드에 사용 | | [소스 코드](https://github.com/spring-projects/spring-data-jpa/blob/main/src/main/java/org/springframework/data/jpa/repository/Modifying.java) |
| `@QueryHints` | 쿼리 힌트를 적용 | | [소스 코드](https://github.com/spring-projects/spring-data-jpa/blob/main/src/main/java/org/springframework/data/jpa/repository/QueryHints.java) |
## Spring Security
|Annotation 이름|의미|포함된 @ 목록|소스 코드|
|---------------------|---------------|----------------------|---------------------------------------------------------|
|`@EnableWebSecurity`|Spring Security 웹 보안을 활성화| |[소스 코드](https://github.com/spring-projects/spring-security/blob/main/config/src/main/java/org/springframework/security/config/annotation/web/configuration/EnableWebSecurity.java)|
|`@Secured`|메서드 또는 클래스에 보안 설정을 적용| |[소스 코드](https://github.com/spring-projects/spring-security/blob/main/core/src/main/java/org/springframework/security/access/annotation/Secured.java)|
|`@PreAuthorize`|메서드가 실행되기 전에 주어진 표현식을 사용하여 인가| |[소스 코드](https://github.com/spring-projects/spring-security/blob/main/core/src/main/java/org/springframework/security/access/prepost/PreAuthorize.java)|
|`@PostAuthorize`|메서드가 실행된 후에 주어진 표현식을 사용하여 인가| |[소스 코드](https://github.com/spring-projects/spring-security/blob/main/core/src/main/java/org/springframework/security/access/prepost/PostAuthorize.java)|
## Spring Cloud
| Annotation 이름 | 의미 | 포함된 @ 목록 | 소스 코드 |
|-----------------------------|---------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
| `@EnableDiscoveryClient` | Spring Cloud의 서비스 디스커버리 클라이언트를 활성화 | | [소스 코드](https://github.com/spring-cloud/spring-cloud-commons/blob/main/spring-cloud-commons/src/main/java/org/springframework/cloud/client/discovery/EnableDiscoveryClient.java) |
| `@EnableCircuitBreaker` | 서킷 브레이커를 활성화 | | [소스 코드](https://github.com/spring-cloud/spring-cloud-commons/blob/main/spring-cloud-commons/src/main/java/org/springframework/cloud/client/circuitbreaker/EnableCircuitBreaker.java) |
| `@EnableFeignClients` | Feign 클라이언트를 활성화 | | [소스 코드](https://github.com/spring-cloud/spring-cloud-openfeign/blob/main/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/EnableFeignClients.java) |
| `@EnableHystrix` | Hystrix를 활성화 | `@EnableCircuitBreaker` | [소스 코드](https://github.com/spring-cloud/spring-cloud-netflix/blob/main/spring-cloud-netflix-hystrix/src/main/java/org/springframework/cloud/netflix/hystrix/EnableHystrix.java) |