## 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) |