본문 바로가기
Tech Stack/Backend

🍃스프링 어노테이션(DI/MVC/롬복) 가이드 (참고용)

by 박수무당벌레 2026. 6. 18.

🔗 진영별 어노테이션 정리 

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: 필드가 아예 없는 클래스에 선언하면 에러가 발생.