최원종의 개발 블로그

Spring Boot 필수 어노테이션(Annotation) 총정리 본문

Spring boot 입문

Spring Boot 필수 어노테이션(Annotation) 총정리

chl6698 2026. 5. 18. 17:48

어노테이션 이미지 보기⬇️


어노테이션 한 번에 보기⬇️

더보기

 

[어노테이션]                 | [핵심 의미 및 역할]                              | [비고 및 상세 설명]
@SpringBootApplication      | Spring boot application 으로 설정                | 자동 설정 및 컴포넌트 스캔 활성화
@Controller                 | View를 제공하는 controller로 설정                | Mustache나 HTML 화면 반환 시 사용
@RestController             | REST API 를 제공하는 controller로 설정           | JSON 데이터 및 응답 바디 직접 반환
@RequestMapping             | URL 주소를 매핑                                 | 클래스 레벨에서 공통 경로 묶기
@GetMapping                 | Http GetMethod URL 주소 매핑                    | 데이터 조회 요청 처리
@PostMapping                | Http PostMethod URL 주소 매핑                   | 데이터 등록 및 가입 처리
@PutMapping                 | Http PutMethod URL 주소 매핑                    | 데이터 전체 수정 처리
@DeleteMapping              | Http DeleteMethod URL 주소 매핑                 | 데이터 삭제 처리
@RequestParam               | URL Query Parameter 매핑                        | ?id=1 같은 파라미터 값 수신
@RequestBody                | Http Body를 Parsing 매핑                        | JSON 요청 데이터를 DTO로 변환
@Valid                      | POJO Java class의 검증                          | 유효성 검사 필터링
----------------------------------------------------------------------------------------------------------------------
@Configuration              | 1개 이상의 bean을 등록 할 때 설정               | 자바 기반 설정 클래스에 선언
@Component                  | 1개의 Class 단위로 등록 할 때 사용              | IoC 컨테이너에 싱글톤 객체로 등록
@Bean                       | 1개의 외부 library로부터 생성한 객체 등록 시 사용 | 개발자가 제어 못 하는 외부 객체 생성용
@Autowired                  | DI를 위한 곳에 사용                             | 타입 기반 자동 의존성 주입
@Qualifier                  | @Autowired 사용시 bean이 2개 이상일 때 명시적 사용 | 주입 대상 빈의 이름을 지정
@Resource                   | @Autowired + @Qualifier 의 개념으로 이해         | 자바 표준 규격 주입 방식
----------------------------------------------------------------------------------------------------------------------
@Aspect                     | AOP 적용시 사용                                 | 공통 관심사 모듈 클래스 선언
@Before                     | AOP 메소드 이전 호출 지정                        | 비즈니스 로직 시작 전 수행
@After                      | AOP 메소드 호출 이후 지정 예외 발생 포함          | 로직 종료 후 수행 (무조건 실행)
@Around                     | AOP 이전/이후 모두 포함 예외 발생 포함          | 실행 전후 흐름 및 시간 측정에 사용
@AfterReturning             | AOP 메소드의 호출이 정상일 때 실행               | 결과 반환이 성공한 시점에 작동
@AfterThrowing              | AOP시 해당 메소드가 예외 발생시 지정             | 에러가 터졌을 때 예외 처리 공통화
----------------------------------------------------------------------------------------------------------------------
@Entity                     | DB 테이블과 매핑되는 객체로 설정                 | JPA 영속성 컨텍스트 관리 대상
@Id                         | 테이블의 기본키(PK) 지정                         | 데이터 구분을 위한 고유 식별자
@GeneratedValue             | 기본키(PK) 생성 전략 설정                        | IDENTITY 등 DB 전략에 위임
@Column                     | 객체 필드와 테이블 컬럼 매핑                      | 제약조건(nullable, unique) 정의
@Transient                  | DB 컬럼 매핑에서 제외                            | 영속화하지 않는 임시 변수 처리
@Transactional              | 데이터베이스 트랜잭션 범위 지정                  | 예외 발생 시 전격 롤백 처리
@Getter / @Setter           | Getter 및 Setter 메소드 자동 생성                 | 롬복 라이브러리 기능 사용
@NoArgsConstructor          | 파라미터가 없는 기본 생성자 생성                 | JPA 기술 명세 상 필수 요구 항목
@AllArgsConstructor         | 전체 필드 대상 생성자 생성                       | 모든 속성을 채우는 생성자 제공
@RequiredArgsConstructor    | final이 붙은 필드 대상 생성자 생성               | 스프링에서 권장하는 생성자 주입용
@Builder                    | 빌더 패턴 기법 코드 자동 생성                    | 가독성 높은 객체 생성 디자인 제공

1. 요청 처리 및 컨트롤러 어노테이션 (Web Layer)

클라이언트의 요청(HTTP Request)을 가장 먼저 맞이하고 데이터를 매핑하는 역할
@SpringBootApplication : 스프링 부트 애플리케이션의 시작점 설정 (자동 설정 및 컴포넌트 스캔 활성화)
@Controller : View(HTML/Mustache)를 제공하는 컨트롤러로 설정 (서버 사이드 렌더링에 사용)
@RestController : REST API(JSON/XML 데이터)를 제공하는 컨트롤러로 설정 (@Controller + @ResponseBody)
@RequestMapping : 클래스나 메서드에 대표 URL 주소를 매핑 (공통 경로 그룹화)
@GetMapping : HTTP GetMethod URL 주소 매핑 (데이터 조회 시 사용)
@PostMapping : HTTP PostMethod URL 주소 매핑 (데이터 등록 및 생성 시 사용)
@PutMapping : HTTP PutMethod URL 주소 매핑 (데이터 전체 수정 시 사용)
@DeleteMapping : HTTP DeleteMethod URL 주소 매핑 (데이터 삭제 시 사용)
@RequestParam : URL Query Parameter 또는 폼 데이터 매핑 (?id=1 등)
@RequestBody : HTTP Body(JSON 데이터)를 자바 객체로 파싱 및 매핑
@Valid : POJO Java class의 유효성 검증 (DTO 필드 값 체크)

 

 

2. 객체 관리 및 의존성 주입 (IoC / DI Layer)

@Configuration : 1개 이상의 bean을 자바 코드로 등록할 때 설정 파일에 사용
@Component : 1개의 Class 단위로 IoC 컨테이너에 빈을 등록할 때 사용 (싱글톤 패턴)
@Bean : 1개의 외부 library로부터 생성한 객체를 등록 시 사용 (@Configuration 메서드에 부여)
@Autowired : 의존성 주입(DI)이 필요한 곳에 사용 (스프링이 자동으로 객체 연결)
@Qualifier : @Autowired 사용 시 동일 타입 bean이 2개 이상일 때 명시적 구분 사용
@Resource : @Autowired + @Qualifier 의 개념으로 이해 (이름 기반 자바 표준 주입)

 

 

3. 관점 지향 프로그래밍 (AOP Layer)

@Aspect : AOP 적용 시 공통 기능 클래스임을 선언할 때 사용
@Before : 핵심 비즈니스 로직 메서드 실행 이전에 호출되도록 지정
@After : 핵심 비즈니스 로직 메서드 호출 이후에 실행 (예외 발생 여부 상관없음)
@Around : 핵심 비즈니스 로직 메서드 이전/이후 모든 시점을 포함하여 예외 발생까지 제어
@AfterReturning : AOP 대상 메서드의 호출이 정상적으로 성공하여 종료되었을 때만 실행
@AfterThrowing : AOP 대상 메서드 실행 중 예외(Error)가 발생했을 때만 실행되도록 지정

 

 

4. 데이터베이스 및 JPA / 롬복 관련

@Entity : 데이터베이스 테이블과 매핑되는 영속성 객체(도메인)임을 선언
@Id : 테이블의 기본키(PK, Primary Key) 필드를 지정
@GeneratedValue : 기본키(PK) 생성 전략 설정 (MySQL의 auto_increment 등)
@Column : 객체의 필드를 테이블 컬럼과 매핑 (nullable, unique, length 등 제약조건 설정)
@Transient : 특정 필드를 DB 컬럼 매핑에서 제외하고 메모리에서만 임시로 쓸 때 사용
@Transactional : 메서드나 클래스를 하나의 트랜잭션 단위로 묶어 자동 롤백/커밋 처리
@Getter / @Setter : 필드들의 Getter 및 Setter 메서드를 컴파일 시점에 자동 생성
@NoArgsConstructor : 파라미터가 없는 기본 생성자를 자동 생성 (JPA 엔티티 필수)
@AllArgsConstructor : 클래스의 모든 필드를 파라미터로 받는 생성자를 자동 생성
@RequiredArgsConstructor : final이나 @NonNull 필드만 골라내어 생성자 자동 생성 (생성자 주입 권장)
@Builder : 객체 생성을 유연하고 안전하게 돕는 빌더 패턴 코드 자동 생성

팁💡: POJO란

Plain Old Java Object 의 약어로, 특정한 제한이나 규약이 없는 일반적인 자바 객체를 가리킵니다.
즉, POJO 클래스는 특정 프레임워크나 라이브러리에 종속되지 않고 순수하게 자바로 작성된 클래스를 의미합니다.

@Component 어노테이션은 주로 이러한 단순한 POJO 클래스에 사용됩니다. 
예를 들어, 서비스나 레포지토리와 같은 비즈니스 로직이나 데이터 액세스 로직을 수행하는 클래스들은
보통 @Service나 @Repository 어노테이션을 사용하여 스프링 빈으로 등록됩니다. 
하지만 그 외의 일반적인 도메인 모델이나 유틸리티 클래스와 같은 경우에는 특별한 어노테이션 없이도 
그 자체로 스프링 빈이 될 수 있습니다.

따라서 @Component 어노테이션은 이러한 일반적인 클래스를 스프링 빈으로 등록할 때 사용됩니다.
이렇게 등록된 빈은 스프링 애플리케이션 내에서 주입되거나 사용될 수 있습니다.