본문 바로가기

Spring Boot

[Spring Boot] 여러가지 Annotation

728x90

상시 업데이트하는 글입니다.


Spring Boot 어노테이션

어노테이션 설명 추가 정보
@SpringBootApplication 스프링 부트 애플리케이션의 시작점으로, 여러 설정을 자동으로 활성화합니다. @Configuration, @EnableAutoConfiguration, @ComponentScan을 포함합니다.

 

 

Web 어노테이션

어노테이션 설명 추가 정보
@Controller REST API를 처리하지 않고 클라이언트에게 view를 제공합니다. @RestController와 혼동하지 않도록 주의해야 합니다.
@RestController REST Api를 처리하는 Controller
JSON 형태로 데이터를 반환합니다.
@Controller와 혼동하지 않도록 주의해야합니다.
@RequestMapping 특정 URL을 처리하는 메소드나 클래스에 사용합니다. 메소드 레벨에서 사용 시 HTTP 메소드도 설정 필요.
@GetMapping 특정 URL로 들어오는 GET 요청을 처리합니다. 자원 조회에 사용됩니다.
@PostMapping 특정 URL로 들어오는 POST 요청을 처리합니다. 일반적으로 데이터 생성에 사용됩니다.
@PutMapping 특정 URL로 들어오는 PUT 요청을 처리합니다. 자원 업데이트에 사용됩니다.
@DeleteMapping 특정 URL로 들어오는 DELETE 요청을 처리합니다. 자원 삭제에 사용됩니다.
@PathVariable URL 경로에서 변수 값을 추출합니다. URL 템플릿에 포함된 변수를 메소드의 파라미터로 매핑합니다.
@RequestParam 요청 파라미터를 메소드의 파라미터로 매핑합니다. URL 쿼리 파라미터를 메소드 인자에 바인딩할 때 사용합니다.
@RequestBody HTTP 요청의 본문(body) 내용을 Java 객체로 변환합니다. 주로 POST, PUT 요청에서 JSON 데이터를 처리할 때 사용됩니다.
@ResponseBody 메소드의 반환값을 HTTP 응답 본문으로 변환하여 클라이언트에게 전달합니다. 주로 @Controller에서 JSON 데이터를 반환할 때 사용됩니다.
@ModelAttribute 요청 데이터를 모델 객체에 바인딩하고, 이를 View와 함께 전달합니다. 주로 GET 요청에서 form 데이터를 바인딩할 때 사용됩니다.

 

 

Lombok 어노테이션

어노테이션 설명 추가 정보
@Data 모든 필드에 대해 getter, setter, toString등을 자동 생성합니다. 성능에 민감한 경우, @Data 대신 필요한 어노테이션만 사용하는 것이 좋음.
@Getter, @Setter 개별 필드 또는 클래스의 getter, setter 메소드를 자동 생성합니다. 특정 필드만 접근 제어가 필요하면, @Getter와 @Setter를 필드에 적용.
@AllArgsConstructor 모든 필드를 파라미터로 받는 생성자를 자동 생성합니다. 모든 필드에 대한 생성자를 필요로 할 때 유용합니다.
@NoArgsConstructor 인자가 없는 기본 생성자를 자동 생성합니다. 기본 생성자가 필요한 경우 사용합니다.
@ToString toString() 메소드를 자동 생성합니다. 객체의 문자열 표현을 원하는 형식으로 설정할 수 있습니다.
@RequiredArgsConstructor final 필드나 @NonNull 필드를 파라미터로 받는 생성자를 자동 생성합니다. 변하지 않는 필드에 대한 의존성을 설정할 때 유용합니다.
@Slf4j 클래스에 로깅을 위한 Logger 객체를 자동으로 생성합니다. Lombok을 통해 편리하게 로깅을 사용할 수 있습니다.
@Builder 빌더 패턴을 구현하여 객체 생성 시 필드 값을 선택적으로 설정할 수 있게 합니다. 주로 객체의 불변성을 유지하면서 유연한 객체 생성이 필요할 때 사용됩니다.
@EqualsAndHashCode 객체의 equals 및 hashCode 메소드를 자동 생성합니다. 특정 필드만 고려하고 싶다면 exclude 또는 of 파라미터를 설정할 수 있습니다.
@SuperBuilder 상위 클래스의 필드를 포함해 빌더 패턴을 구현합니다. 상속 구조의 부모 클래스와 자식 클래스에서 빌더 패턴을 사용할 때 유용합니다.

 

 

JSON 처리 어노테이션

어노테이션 설명 추가 정보
@JsonNaming JSON 필드 이름의 정책을 지정합니다. PropertyNamingStrategy를 통해 필드 이름 변환 전략을 설정합니다.
@JsonProperty JSON 필드와 클래스 필드의 매핑을 설정합니다. JSON 직렬화 및 역직렬화 시 필드 이름을 맞출 수 있습니다.
@JsonIgnore JSON 직렬화 및 역직렬화 과정에서 특정 필드를 무시합니다. 필드를 JSON 데이터에서 제외하고 싶을 때 사용합니다.
@JsonInclude JSON 직렬화 시 포함할 필드를 설정합니다. 기본값, Null 값 등을 포함하거나 제외할 수 있습니다.
@JsonFormat JSON 직렬화 및 역직렬화 시 날짜와 시간의 포맷을 지정합니다. 날짜와 시간 데이터를 원하는 포맷으로 변환할 수 있습니다.
@JsonCreator JSON 객체를 역직렬화할 때 사용되는 생성자를 지정합니다. 생성자 또는 팩토리 메소드를 통해 객체를 생성할 수 있습니다.
@JsonPropertyOrder JSON 직렬화 시 필드의 순서를 지정합니다. 필드의 순서를 지정하여 직렬화된 JSON의 필드 순서를 제어합니다.

 

 

Test 어노테이션

어노테이션 설명 추가 정보
@SpringBootTest 스프링 부트 애플리케이션 컨텍스트에서 테스트를 실행합니다. 애플리케이션 전체를 통합적으로 테스트할 때 사용됩니다.
@Test JUnit에서 테스트 메소드임을 나타냅니다. 메소드가 단위 테스트로 실행되도록 지정합니다.
@Transactional 트랜잭션 내에서 메소드나 클래스를 실행하게 합니다. 메소드 실행 후 트랜잭션이 자동으로 커밋되거나 롤백됩니다. 주로 테스트에서 데이터 일관성을 유지하기 위해 사용됩니다.

 

 

의존성 주입 어노테이션

어노테이션 설명 추가 정보
@Autowired 스프링에서 의존성 주입을 자동으로 처리합니다. 생성자, 필드, 메소드에 적용 가능하며, 기본적으로 타입을 기준으로 의존성을 주입합니다.
@PostConstruct 의존성 주입이 완료된 후 초기화 작업을 수행합니다. 객체가 생성된 후 호출되며, 보통 설정 작업이나 자원 초기화에 사용됩니다. 스프링 빈의 라이프사이클 초기화 단계에서 실행됩니다.
@Component 해당 클래스를 스프링의 빈으로 등록합니다. @Service, @Repository, @Controller와 같은 특화된 컴포넌트 어노테이션의 상위 개념입니다.
@PreDestroy 스프링 빈이 소멸되기 전에 호출되어 정리 작업을 수행합니다. 주로 자원을 해제하거나 종료 작업이 필요할 때 사용됩니다.

 

JPA 어노테이션

어노테이션 설명 추가 정보
@Entity JPA에서 데이터베이스 테이블과 매핑되는 클래스를 나타냅니다. 해당 클래스는 데이터베이스 테이블의 레코드를 표현하는 엔티티로 사용됩니다.
@Id 엔티티의 주 키(Primary Key)를 정의합니다. 주 키는 엔티티의 고유성을 보장하는 필드입니다.
@Column 엔티티의 필드를 데이터베이스 테이블의 열(column)과 매핑합니다. 필드의 데이터베이스 열 속성을 정의할 수 있습니다.
@GeneratedValue 주 키 값의 생성 전략을 정의합니다. 자동 증가, 시퀀스 사용 등 여러 전략을 설정할 수 있습니다.
@Transient 해당 필드가 데이터베이스에 매핑되지 않음을 나타냅니다. 데이터베이스와의 매핑에서 제외할 필드를 지정할 때 사용됩니다.
@OneToOne 두 엔티티 간의 1:1 관계를 나타냅니다. 외래 키를 사용하여 다른 엔티티와의 일대일 관계를 정의합니다.
@OneToMany 두 엔티티 간의 1:N 관계를 나타냅니다. 한 엔티티가 여러 다른 엔티티와 관계를 가질 때 사용됩니다.
@ManyToOne 두 엔티티 간의 N:1 관계를 나타냅니다. 여러 엔티티가 하나의 엔티티와 관계를 가질 때 사용됩니다.
@ManyToMany 두 엔티티 간의 N:M 관계를 나타냅니다. 중간 테이블을 사용하여 다대다 관계를 정의할 때 사용됩니다.
@Query JPQL(Java Persistence Query Language)로 작성된 쿼리를 실행하기 위해 사용됩니다. 복잡한 쿼리나 조건에 따라 데이터를 조회할 때 유용합니다.
@Where JPQL 쿼리에서 조건을 추가할 때 사용합니다. 엔티티 클래스나 컬렉션 필드에 적용하여, 특정 조건을 항상 쿼리에 포함하도록 설정할 수 있습니다.
@JoinColumn 엔티티의 필드를 외래 키와 매핑할 때 사용합니다. 주로 관계 매핑에서 외래 키를 명시적으로 지정할 때 활용되며, 다대일(@ManyToOne) 또는 일대일(@OneToOne) 관계에서 사용됩니다.
@MappedSuperclass JPA 엔티티 클래스의 공통 속성을 정의하는 데 사용됩니다. 상속된 클래스가 직접 테이블로 매핑되지 않고, 하위 엔티티 클래스에서만 사용됩니다.
@EntityScan 스프링 부트 애플리케이션에서 JPA 엔티티를 자동으로 검색할 기본 패키지를 설정합니다. @SpringBootApplication 기본 패키지 외의 위치에 있는 엔티티를 인식할 때 사용됩니다
@EnableJpaRepositories 스프링 부트 애플리케이션에서 JPA 레포지토리를 활성화하고 기본 패키지를 설정합니다. 특정 패키지의 리포지토리 인터페이스를 찾아 스프링 데이터 JPA로 관리하게 합니다.

 

 

Validation 어노테이션

어노테이션 설명 추가 정보
@Email 이메일 형식인지 검증합니다. 예: "user@example.com"
@Pattern 정규 표현식을 사용해 문자열 패턴을 검증합니다. 예: @Pattern(regexp="^[a-zA-Z0-9]+$")
@AssertFalse 값이 false이어야 함을 검증합니다. 불리언 타입에 주로 사용
@AssertTrue 값이 true이어야 함을 검증합니다. 불리언 타입에 주로 사용
@Max 지정된 최대값 이하인지 검증합니다. 예: @Max(100)
@Min 지정된 최소값 이상인지 검증합니다. 예: @Min(1)
@DecimalMax 소수점 포함한 값이 지정된 최대값 이하인지 검증합니다. 예: @DecimalMax("100.00")
@DecimalMin 소수점 포함한 값이 지정된 최소값 이상인지 검증합니다. 예: @DecimalMin("1.00")
@Digits 숫자의 자릿수와 소수 자릿수를 제한합니다. 예: @Digits(integer=5, fraction=2)
@Future 값이 미래 날짜인지 검증합니다. 날짜 관련 필드에 사용
예약 날짜와 같은 필드에 사용
@FuterOrPresent 값이 현재 또는 미래 날짜인지 검증합니다. 날짜 관련 필드에 사용
예약 날짜와 같은 필드에 사용
@Past 값이 과거 날짜인지 검증합니다. 날짜 관련 필드에 사용
생년월일 같은 필드에 사용
@PastOrPresent 값이 현재 또는 과거 날짜인지 검증합니다. 날짜 관련 필드에 사용
특정 마감일 검증 필드에 사용
@Negative 음수 값인지 검증합니다. 숫자 값 검증에 사용
@NegativeOrZero 음수 또는 0인지 검증합니다. 숫자 값 검증에 사용
@Positive 양수 값인지 검증합니다. 숫자 값 검증에 사용
@PositiveOrZero 양수 또는 0인지 검증합니다. 숫자 값 검증에 사용
@NotBlank 값이 비어 있지 않고 공백이 아닌지 검증합니다. 문자열에 사용 (공백 문자열도 허용되지 않음)
@NotEmpty 컬렉션, 배열, 문자열 등이 비어 있지 않은지 검증합니다. 값이 비어 있어선 안 될 때 사용
@NotNull 값이 null이 아닌지 검증합니다. 모든 타입에 사용
@Null 값이 null이어야 함을 검증합니다. 특정 필드가 반드시 비어 있어야 할 때 사용
@Size 문자열, 배열, 컬렉션 등의 크기를 검증합니다. 예: @Size(min=2, max=10)
@Length 문자열의 길이를 검증합니다. @Size와 유사하지만, Hibernate Validator에서 제공
@Range 숫자의 범위를 검증합니다. 예: @Range(min=1, max=10)
@UniqueElements 컬렉션의 요소들이 중복되지 않음을 검증합니다. Hibernate Validator에서 제공
@URL 값이 URL 형식인지 검증합니다. 예: "https://example.com"
@Valid 객체 내 필드들이 유효성 검사를 받도록 지정합니다. 주로 컨트롤러 메소드의 파라미터로 전달되는 객체의 유효성을 검증할 때 사용합니다.

 

 

Exception 어노테이션

어노테이션 설명 추가 정보
@ControllerAdvice 전역적으로 모든 컨트롤러에서 발생하는 예외를 처리하는 클래스에 사용됩니다. @ExceptionHandler와 함께 사용하여 예외 처리 로직을 재사용할 수 있습니다.
@RestControllerAdvice @ControllerAdvice와 동일하지만 @ResponseBody가 포함되어 있어 REST API에서 예외 발생 시 JSON 형태로 응답을 반환합니다. 주로 REST API 예외 처리를 위한 전역 설정에 사용됩니다.
@ExceptionHandler 특정 예외가 발생했을 때 해당 예외를 처리하는 메소드에 사용됩니다. 메소드에 처리할 예외 타입을 인자로 설정하여 다양한 예외를 처리할 수 있습니다.

 

 

AOP 어노테이션

어노테이션 설명 추가 정보
@Aspect AOP(Aspect-Oriented Programming)에서 사용되며, 해당 클래스가 하나 이상의 Aspect를 정의하는 클래스를 나타냅니다. 주로 핵심 비즈니스 로직과는 별도로 공통 관심사를 모듈화하는 데 사용됩니다.
@Pointcut Advice가 적용될 Join Point를 정의하는 데 사용됩니다. 특정 조건에 맞는 메소드를 선택하여 그 메소드에 Advice를 적용할 수 있도록 설정합니다.
@Before Pointcut에서 지정한 Join Point 실행 전에 Advice를 적용합니다. 메소드 호출 전, 전처리 작업을 수행할 때 유용합니다.
@After Pointcut에서 지정한 Join Point 실행 후에 Advice를 적용합니다. 메소드가 호출된 후, 후처리 작업을 수행할 때 사용됩니다.
@AfterReturing Pointcut에서 지정한 Join Point가 정상적으로 완료된 후에 Advice를 적용합니다. 메소드가 정상적으로 실행되고 값을 반환한 후 추가 작업을 수행할 때 사용됩니다.
@AfterThrowing Pointcut에서 지정한 Join Point에서 예외가 발생했을 때 Advice를 적용합니다. 예외 처리를 통해, 특정 예외에 대한 로깅이나 에러 핸들링 작업을 수행할 수 있습니다.
@Around Join Point 전후에 Advice를 적용할 수 있도록 하는 가장 유연한 형태의 Advice입니다. 메소드 호출을 제어하고, 전처리 및 후처리 작업을 모두 수행할 수 있어, 트랜잭션 관리와 같은 복잡한 로직을 처리할 때 유용합니다.

 

728x90