스프링에서 자주 만나는 애너테이션(@)을 역할별로 모았어요. ⭐는 꼭 알아야 할 필수, 나머지는 실무에서 자주 쓰는 것들이에요. 표의 "붙이는 곳"만 봐도 감이 와요.
@이름 형태로 붙여 "이건 이런 역할이야"라고 스프링에게 알려주는 표시예요. 스프링은 이 표시를 보고 알아서 객체를 만들고·연결하고·요청을 연결해요.| 애너테이션 | 한 줄 역할 |
|---|---|
⭐ @SpringBootApplication | 부트 앱의 시작점(설정+스캔+자동설정을 한 번에) |
⭐ @RestController | REST API 컨트롤러(JSON 응답) |
⭐ @Service | 비즈니스 로직 계층 빈 |
⭐ @Repository | 데이터 접근 계층 빈 |
⭐ @Autowired | 필요한 빈을 자동 주입 |
⭐ @GetMapping / @PostMapping | GET/POST 요청을 메서드에 연결 |
⭐ @RequestBody / @PathVariable | 요청 본문(JSON) / URL 경로값 받기 |
⭐ @Entity / @Id | JPA 테이블 매핑 클래스 / 기본키 |
⭐ @Transactional | 메서드를 하나의 트랜잭션으로(전부 성공/전부 취소) |
| 애너테이션 | 역할 | 붙이는 곳 |
|---|---|---|
⭐ @Component | 일반 빈으로 등록(모든 스테레오타입의 뿌리) | 클래스 |
⭐ @Service | 비즈니스 로직 계층(= @Component + 의미) | 서비스 클래스 |
⭐ @Repository | 데이터 접근 계층 + DB 예외 변환 | DAO/리포지토리 |
@Controller | 웹 컨트롤러(주로 화면/뷰 반환) | 컨트롤러 클래스 |
⭐ @RestController | @Controller + @ResponseBody(JSON 반환) | REST 컨트롤러 |
⭐ @Configuration | 설정 클래스(@Bean 정의를 담는 곳) | 설정 클래스 |
⭐ @Bean | 메서드가 반환하는 객체를 빈으로 등록(수동) | @Configuration 안 메서드 |
@ComponentScan | 어느 패키지를 훑어 빈을 찾을지 지정 | 설정 클래스 |
⭐ @SpringBootApplication | @Configuration + @ComponentScan + @EnableAutoConfiguration 묶음 | 메인 클래스 |
@Service·@Repository·@Controller는 사실 모두 @Component예요. 이름만 달라 역할(계층)을 드러내는 것이고, 동작은 "빈 등록"으로 같아요.| 애너테이션 | 역할 | 붙이는 곳 |
|---|---|---|
⭐ @Autowired | 타입에 맞는 빈을 자동으로 주입 | 생성자·필드·세터 |
@Qualifier("이름") | 같은 타입 빈이 여러 개일 때 특정 빈 선택 | 주입 지점 |
@Primary | 같은 타입 중 우선으로 주입될 빈 지정 | 빈 클래스 |
@Value("${'{'}설정키{'}'}") | properties/yml 값이나 상수를 주입 | 필드·파라미터 |
@RequiredArgsConstructor(롬복)로 final 필드 생성자를 자동 생성해 생성자 주입을 간결하게 쓰는 패턴이 많아요. (스프링 기본 애너테이션은 아님)| 애너테이션 | 역할 | 붙이는 곳 |
|---|---|---|
@RequestMapping | URL·메서드 매핑(클래스 공통 경로에도) | 클래스·메서드 |
⭐ @GetMapping | GET 요청 매핑(조회) | 메서드 |
⭐ @PostMapping | POST 요청 매핑(생성) | 메서드 |
@PutMapping / @PatchMapping | PUT/PATCH(수정) | 메서드 |
@DeleteMapping | DELETE(삭제) | 메서드 |
⭐ @PathVariable | URL 경로의 값 받기 (/users/{id}) | 파라미터 |
⭐ @RequestParam | 쿼리스트링 값 받기 (?page=1) | 파라미터 |
⭐ @RequestBody | 요청 본문(JSON)을 객체로 변환해 받기 | 파라미터 |
@ResponseBody | 반환값을 JSON 본문으로(‧ @RestController엔 포함됨) | 메서드 |
@ResponseStatus | 응답 상태코드 지정(예: 201 Created) | 메서드·예외 클래스 |
@CrossOrigin | CORS 허용 지정 | 클래스·메서드 |
| 애너테이션 | 역할 | 붙이는 곳 |
|---|---|---|
@RestControllerAdvice | 전역 예외 처리(REST, JSON 응답) | 클래스 |
@ControllerAdvice | 전역 예외 처리(뷰 포함) | 클래스 |
⭐ @ExceptionHandler | 특정 예외를 잡아 처리할 메서드 지정 | 메서드 |
| 애너테이션 | 역할 | 붙이는 곳 |
|---|---|---|
⭐ @Entity | 이 클래스를 DB 테이블과 매핑 | 클래스 |
@Table(name=...) | 매핑할 테이블 이름 지정(생략 가능) | 클래스 |
⭐ @Id | 기본키(PK) 필드 지정 | 필드 |
⭐ @GeneratedValue | 기본키 자동 생성 전략(auto-increment 등) | 필드 |
@Column | 컬럼 옵션(이름·길이·null 여부 등) | 필드 |
⭐ @ManyToOne / @OneToMany | N:1 / 1:N 연관관계 | 필드 |
@OneToOne / @ManyToMany | 1:1 / N:M 연관관계 | 필드 |
@JoinColumn | 외래키(FK) 컬럼 지정(연관관계 주인) | 필드 |
⭐ @Transactional | 메서드를 트랜잭션으로 묶음(실패 시 롤백) | 서비스 메서드·클래스 |
@Query | 리포지토리 메서드에 직접 쿼리(JPQL/네이티브) | 리포지토리 메서드 |
| 애너테이션 | 역할 | 붙이는 곳 |
|---|---|---|
⭐ @Valid | 객체의 검증 규칙을 실행하도록 표시 | 컨트롤러 파라미터 |
@Validated | 그룹 검증·클래스 레벨 검증 | 클래스·파라미터 |
⭐ @NotNull / @NotBlank | null 금지 / 공백·빈문자 금지(문자열) | 필드 |
@Size(min,max) | 길이·크기 범위 제한 | 필드 |
@Min / @Max | 숫자 최소/최대 | 필드 |
@Email / @Pattern | 이메일 형식 / 정규식 형식 | 필드 |
| 애너테이션 | 역할 | 붙이는 곳 |
|---|---|---|
@ConfigurationProperties | properties/yml 값을 객체에 묶어 바인딩 | 설정 클래스 |
@Profile("dev") | 특정 환경(dev/prod)에서만 빈 활성화 | 클래스·@Bean |
@EnableScheduling + @Scheduled | 주기적 작업 실행(크론 등) | 설정 / 메서드 |
@EnableAsync + @Async | 메서드를 별도 스레드에서 비동기 실행 | 설정 / 메서드 |
| 애너테이션 | 역할 | 붙이는 곳 |
|---|---|---|
@SpringBootTest | 전체 컨텍스트를 띄운 통합 테스트 | 테스트 클래스 |
@WebMvcTest | 컨트롤러(웹 계층)만 띄운 테스트 | 테스트 클래스 |
@DataJpaTest | JPA 리포지토리 계층만 테스트 | 테스트 클래스 |
@MockBean | 특정 빈을 가짜(mock)로 대체 | 테스트 필드 |
@Test | 테스트 메서드 표시(JUnit) | 메서드 |
@WebMvcTest·@DataJpaTest가 @SpringBootTest(전체)보다 빠르고 가벼워요. 상황에 맞게 골라요.| 애너테이션 / 요소 | 역할 | 붙이는 곳 |
|---|---|---|
⭐ @EnableWebSecurity | 스프링 시큐리티 기능 활성화 | 설정 클래스 |
⭐ @Bean SecurityFilterChain | 보안 규칙(인증·인가·필터·CSRF·CORS) 정의 | @Configuration 메서드 |
@EnableMethodSecurity | 메서드 단위 권한 검사 활성화 (구 @EnableGlobalMethodSecurity) | 설정 클래스 |
⭐ @PreAuthorize("hasRole('ADMIN')") | 메서드 실행 전 권한 검사(표현식) | 메서드 |
@PostAuthorize | 메서드 실행 후 반환값 기준 권한 검사 | 메서드 |
@Secured("ROLE_ADMIN") | 역할 기반 접근 제한(단순·구식) | 메서드 |
@AuthenticationPrincipal | 현재 로그인한 사용자 정보 주입 | 컨트롤러 파라미터 |