1. 컴포넌트 스캔과 빈(Bean) 등록
스프링 컨테이너에 객체(빈)를 자동으로 등록하거나 설정할 때 사용한다.
- @Component: 스프링이 관리하는 객체(빈)로 등록할 클래스에 지정하는 가장 기본적인 어노테이션
- @Configuration: 자바 기반의 스프링 설정 클래스를 선언할 때 사용합니다. 이 내부에서 @Bean을 사용해 수동으로 빈을 등록할 수 있음
- @Bean: 개발자가 직접 제어할 수 없는 외부 라이브러리 등을 빈으로 등록할 때 메서드 위에 사용
💡 특정 역할을 명시하는 컴포넌트 어노테이션 (내부에 @Component 포함)
- @Controller: Spring MVC의 컨트롤러(웹 요청 처리) 클래스에 사용.
- @RestController: @Controller + @ResponseBody가 합쳐진 형태로, RESTful 웹 서비스의 JSON/XML 응답을 반환할 때 사용.
- @Service: 비즈니스 로직을 수행하는 서비스 레이어 클래스에 사용.
- @Repository: 데이터베이스에 접근하는 데이터 액세스 레이어(DAO) 클래스에 사용하며, 데이터 전송 예외를 스프링 예외로 변환해 줌.
2. 의존관계 주입 (DI)
등록된 빈들 간의 의존관계를 연결할 때 사용.
- @Autowired: 타입(Type)에 맞춰 스프링 컨테이너가 자동으로 의존성을 주입. (생성자, 필드, Setter에 사용 가능)
- @Qualifier: 동일한 타입의 빈이 여러 개 존재할 때, 특정 빈을 이름을 지정하여 주입받고 싶을 때 사용
- @Primary: 동일한 타입의 빈이 여러 개 있을 때, 우선순위를 부여하여 기본적으로 주입될 빈을 지정
3. Spring MVC (웹 요청 처리)
클라이언트의 요청을 받고 응답을 보낼 때 컨트롤러에서 사용
- @RequestMapping: 특정 URL 요청을 특정 메서드와 매핑합니다. 클래스 레벨과 메서드 레벨 모두 사용 가능
- @GetMapping / @PostMapping / @PutMapping / @DeleteMapping: HTTP 메서드(GET, POST, PUT, DELETE)에 맞춰 축약된 요청 매핑 어노테이션
- @RequestParam: URL의 쿼리 파라미터(?name=kim)나 Form 데이터를 변수에 바인딩할 때 사용
- @PathVariable: URL 경로에 포함된 변수 값(~/users/{id})을 추출할 때 사용
- @RequestBody: HTTP 요청의 본문(Body)에 담긴 JSON/XML 등을 자바 객체로 변환하여 받을 때 사용
- @ResponseBody: 자바 객체를 HTTP 응답 본문(Body)으로 직접 전달할 때 사용
4. 스프링 부트(Spring Boot) 전용
스프링 부트 애플리케이션의 편리한 설정을 돕는다.
- @SpringBootApplication: 스프링 부트의 핵심 어노테이션으로, 아래 3가지가 합쳐진 형태입니다. 애플리케이션의 시작점에 위치한다.
- @SpringBootConfiguration: 스프링 부트용 설정 선언
- @EnableAutoConfiguration: 사전에 정의된 외부 라이브러리 자동 설정 활성화
- @ComponentScan: 현재 패키지 및 하위 패키지의 컴포넌트 스캔 시작
5. 롬복 (Lombok) - 스프링 전용은 아니지만 필수적인 조합
코드를 깔끔하게 줄여주어 스프링 개발 시 함께 애용되는 어노테이션이다.
- @Getter / @Setter: 클래스 필드의 getter/setter 메서드를 자동으로 생성
- @NoArgsConstructor: 파라미터가 없는 기본(디폴트) 생성자를 생성
- @AllArgsConstructor: 모든 필드를 파라미터로 받는 생성자를 생성
- @RequiredArgsConstructor: final이나 @NonNull이 붙은 필드만 파라미터로 받는 생성자를 생성. (생성자 주입(자동/수동)에 필수적으로 사용됨.)
- @Slf4j: 테스트 로깅시 로거 객체 생성 없이 로그를 작성하기 위해 사용
⚠️ 생성자 어노테이션 사용 시 주의사항
@NoArgsConstructor: 필드가 전혀 없는 빈 클래스에 붙이면 컴파일러가 이미 기본 생성자를 만드는 상태이므로 충돌 및 에러의 원인이 될 수 있음.
@AllArgsConstructor: 필드가 아예 없는 클래스에 선언하면 에러가 발생.
'Tech Stack > Backend' 카테고리의 다른 글
| 🍃간단 Spring Core & 아키텍처의 이해 (0) | 2026.06.19 |
|---|---|
| 🍃빌드 시스템(Maven/Gradle) 이해 및 프로젝트 기본 구조 (0) | 2026.06.19 |
| 🍃어노테이션 기반 수동 빈 등록 (AppConfig) & 스프링 어노테이션(@Autowired) 없이 수동 주입 (0) | 2026.06.18 |
| 🍃자동 의존관계 주입 방법과 컴포넌트 스캔 (0) | 2026.06.17 |
| 🍃스프링 컨테이너와 제어의 역전(IoC) (0) | 2026.06.17 |