필수 요약 컴포넌트 등록 의존성 주입 웹·REST 예외 처리 데이터(JPA) 검증 설정·부트 테스트 보안
◀ CH 04 📋 목차
🏷️ 부록 · Annotations

스프링 애너테이션 총정리

스프링에서 자주 만나는 애너테이션(@)을 역할별로 모았어요. 꼭 알아야 할 필수, 나머지는 실무에서 자주 쓰는 것들이에요. 표의 "붙이는 곳"만 봐도 감이 와요.

필수 요약
가장 먼저 외울 필수 애너테이션
이것부터 손에 익히면 대부분의 코드가 읽혀요.
🔤
애너테이션(Annotation)이란 — 코드(클래스·메서드·필드) 위에 @이름 형태로 붙여 "이건 이런 역할이야"라고 스프링에게 알려주는 표시예요. 스프링은 이 표시를 보고 알아서 객체를 만들고·연결하고·요청을 연결해요.
애너테이션한 줄 역할
@SpringBootApplication부트 앱의 시작점(설정+스캔+자동설정을 한 번에)
@RestControllerREST API 컨트롤러(JSON 응답)
@Service비즈니스 로직 계층 빈
@Repository데이터 접근 계층 빈
@Autowired필요한 빈을 자동 주입
@GetMapping / @PostMappingGET/POST 요청을 메서드에 연결
@RequestBody / @PathVariable요청 본문(JSON) / URL 경로값 받기
@Entity / @IdJPA 테이블 매핑 클래스 / 기본키
@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예요. 이름만 달라 역할(계층)을 드러내는 것이고, 동작은 "빈 등록"으로 같아요.
💉
의존성 주입
필요한 빈을 꽂아 넣기
IoC/DI를 코드에서 실현하는 표시들
애너테이션역할붙이는 곳
@Autowired타입에 맞는 빈을 자동으로 주입생성자·필드·세터
@Qualifier("이름")같은 타입 빈이 여러 개일 때 특정 빈 선택주입 지점
@Primary같은 타입 중 우선으로 주입될 빈 지정빈 클래스
@Value("${'{'}설정키{'}'}")properties/yml 값이나 상수를 주입필드·파라미터
🧭
참고(Lombok) — 실무에선 @RequiredArgsConstructor(롬복)로 final 필드 생성자를 자동 생성해 생성자 주입을 간결하게 쓰는 패턴이 많아요. (스프링 기본 애너테이션은 아님)
🌐
웹 · REST
요청을 메서드에 연결하고, 값 받기
컨트롤러에서 가장 많이 쓰는 것들
애너테이션역할붙이는 곳
@RequestMappingURL·메서드 매핑(클래스 공통 경로에도)클래스·메서드
@GetMappingGET 요청 매핑(조회)메서드
@PostMappingPOST 요청 매핑(생성)메서드
@PutMapping / @PatchMappingPUT/PATCH(수정)메서드
@DeleteMappingDELETE(삭제)메서드
@PathVariableURL 경로의 값 받기 (/users/{id})파라미터
@RequestParam쿼리스트링 값 받기 (?page=1)파라미터
@RequestBody요청 본문(JSON)을 객체로 변환해 받기파라미터
@ResponseBody반환값을 JSON 본문으로(‧ @RestController엔 포함됨)메서드
@ResponseStatus응답 상태코드 지정(예: 201 Created)메서드·예외 클래스
@CrossOriginCORS 허용 지정클래스·메서드
🚑
예외 처리
에러를 친절한 응답으로
전역 예외 처리에 쓰는 표시
애너테이션역할붙이는 곳
@RestControllerAdvice전역 예외 처리(REST, JSON 응답)클래스
@ControllerAdvice전역 예외 처리(뷰 포함)클래스
@ExceptionHandler특정 예외를 잡아 처리할 메서드 지정메서드
🗄️
데이터 (JPA)
엔티티·연관관계·트랜잭션
DB를 객체로 다룰 때
애너테이션역할붙이는 곳
@Entity이 클래스를 DB 테이블과 매핑클래스
@Table(name=...)매핑할 테이블 이름 지정(생략 가능)클래스
@Id기본키(PK) 필드 지정필드
@GeneratedValue기본키 자동 생성 전략(auto-increment 등)필드
@Column컬럼 옵션(이름·길이·null 여부 등)필드
@ManyToOne / @OneToManyN:1 / 1:N 연관관계필드
@OneToOne / @ManyToMany1:1 / N:M 연관관계필드
@JoinColumn외래키(FK) 컬럼 지정(연관관계 주인)필드
@Transactional메서드를 트랜잭션으로 묶음(실패 시 롤백)서비스 메서드·클래스
@Query리포지토리 메서드에 직접 쿼리(JPQL/네이티브)리포지토리 메서드
검증
입력값 유효성 검사
잘못된 요청을 컨트롤러 앞에서 걸러내기
애너테이션역할붙이는 곳
@Valid객체의 검증 규칙을 실행하도록 표시컨트롤러 파라미터
@Validated그룹 검증·클래스 레벨 검증클래스·파라미터
@NotNull / @NotBlanknull 금지 / 공백·빈문자 금지(문자열)필드
@Size(min,max)길이·크기 범위 제한필드
@Min / @Max숫자 최소/최대필드
@Email / @Pattern이메일 형식 / 정규식 형식필드
⚙️
설정 · 부트
환경 설정 · 스케줄 · 비동기
앱 전체 동작을 켜고 조정하는 표시
애너테이션역할붙이는 곳
@ConfigurationPropertiesproperties/yml 값을 객체에 묶어 바인딩설정 클래스
@Profile("dev")특정 환경(dev/prod)에서만 빈 활성화클래스·@Bean
@EnableScheduling + @Scheduled주기적 작업 실행(크론 등)설정 / 메서드
@EnableAsync + @Async메서드를 별도 스레드에서 비동기 실행설정 / 메서드
🧪
테스트
테스트에서 쓰는 표시
필요한 부분만 띄워 빠르게 검증
애너테이션역할붙이는 곳
@SpringBootTest전체 컨텍스트를 띄운 통합 테스트테스트 클래스
@WebMvcTest컨트롤러(웹 계층)만 띄운 테스트테스트 클래스
@DataJpaTestJPA 리포지토리 계층만 테스트테스트 클래스
@MockBean특정 빈을 가짜(mock)로 대체테스트 필드
@Test테스트 메서드 표시(JUnit)메서드
💡
필요한 계층만 띄우는 @WebMvcTest·@DataJpaTest@SpringBootTest(전체)보다 빠르고 가벼워요. 상황에 맞게 골라요.
🔒
보안 (Security)
Spring Security 애너테이션
인증(누구인가) · 인가(무엇을 할 수 있나)를 코드로
애너테이션 / 요소역할붙이는 곳
@EnableWebSecurity스프링 시큐리티 기능 활성화설정 클래스
@Bean SecurityFilterChain보안 규칙(인증·인가·필터·CSRF·CORS) 정의@Configuration 메서드
@EnableMethodSecurity메서드 단위 권한 검사 활성화 (구 @EnableGlobalMethodSecurity)설정 클래스
@PreAuthorize("hasRole('ADMIN')")메서드 실행 권한 검사(표현식)메서드
@PostAuthorize메서드 실행 반환값 기준 권한 검사메서드
@Secured("ROLE_ADMIN")역할 기반 접근 제한(단순·구식)메서드
@AuthenticationPrincipal현재 로그인한 사용자 정보 주입컨트롤러 파라미터
🧭
더 깊게 — 인증 vs 인가, 세션 vs JWT 토큰, OAuth2, 시큐리티 필터 체인의 동작 원리는 자바 심화 CH 11 「애플리케이션 보안」 에서 도식과 함께 자세히 다뤄요.