본문 바로가기

공부 자료/Spring

[Spring] 애너테이션 Annotation 정리 (계속 추가중)

@SpringBootApplication

: 자동 구성 활성화

: 애플리케이션 패키지 내에서 @Component가 붙은 클래스를 검색한 후, Spring Bean으로 등록하는 기능 활성화

: @Configuration이 붙은 클래스를 자동으로 찾아주고, 추가적으로 Spring Bean을 등록하는 기능 활성화

: Spring Boot 애플리케이션으로 동작하기 위한 엔트리포인트에 추가

 

@SpringApplication.run(클래스명.class, args)

: Spring 애플리케이션을 부트스트랩하고, 실행하는 역할

: main() 메서드 내에서 호출 시 Spring Boot 기반의 애플리케이션으로 동작

 * 부트스트랩(Bootstrap) : 애플리케이션 실행 전 여러가지 설정 작업을 수행하여 실행 가능한 애플리케이션으로 만드는 단계

 

@Configuration

: Spring에서 해당 클래스를 Bean 검색 대상으로 간주해 해당 클래스 내 @Bean이 있는 메서드를 검색함

 

@Bean

: 스프링 빈으로 메서드를 추가함

 

@Autowired

: 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어줌

: 의존성 주입 (DI)에 사용

: 생성자가 1개만 있을 경우 생략이 가능함

 

@Component

: 스프링 빈으로 자동 등록이 가능

 

- 컴포넌트 스캔-

1) @Controller

2) @Service

3) @Repository

: 해당 애너테이션 내에 @Component를 포함하고 있기 때문에 스프링 빈에 자동 등록이 됨

 

@RestController

: 해당 클래스가 REST API의 리소스를 처리하기 위한 API 엔드포인트로 동작함을 정의

: @RestController가 추가된 클래스는 애플리케이션 로딩 시, Spring Bean으로 동록

: Controller의 모든 메소드 리턴 타입을 @ResponseBody로 처리한다는 것을 명시하여 @ResponseBody 애너테이션 생략 가능

 

@RequestMapping

: 클라이언트의 요청과 클라이언트 요청을 처리하는 핸들러 메서드를 매핑해주는 역할

: Controller 클래스 레벨에 추가하여 전체에 사용되는 공통 URL 설정

 

  @RequestMapping("/v1/members")

  @RequestMapping(value = "v1/members", produces = {MediaType.APPLICATION_JSON_VALUE})

  : produces 애트리뷰트는 응답 데이터를 어떤 미디어 타입으로 클라이언트에게 전송할지를 결정. value값을 어떤 타입으로 전달할지를 의미하며 현재는 JSON 형식의 데이터를 응답 데이터로 전송하겠다는 의미이며 문자열 자체를 전송

 

@PostMapping

: 클라이언트의 요청 데이터를 서버에 생성할 때 사용

: 클라이언트 쪽에서 요청 전송시 HTTP Method 타입을 동일하게 맞춰야 함

 

@RequestParam

: 핸들러 메서드의 파라미터 종류 중 하나

: 클라이언트 쪽에서 전송하는 요청 데이터를 '쿼리 파라미터, 폼 데이터, x-www-form-urlencoded 형식'으로 전송하면 이를 서버 쪽에서 전달 받을 때 사용하는 애너테이션

* 쿼리 파라미터 : 요청 URL에서 '?'를 기준으로 붙는 key/value 쌍의 데이터

 

@GetMapping

: 클라이언트가 서버에 리소스를 조회할 때 사용하는 애너테이션

: 괄호 안에 몇가지 애트리뷰트를 사용할 수 있음

 

@PathVariable

: 핸들러 메서드의 파라미터 종류 중 하나

: 괄호 안에 입력한 문자열 값은 @GetMapping("/{member-id}")와 같이 중괄호 안의 문자열과 동일해야 함

 

@Valid

: DTO 유효성 검증에서 객체에 유효성 검증을 적용하게 해주는 애너테이션

 

@Validated

: @PathVariable이 추가된 변수에 유효성 검증이 정상적으로 수행되기 위해서 클래스 레벨에 추가를 반드시 해줘야 하는 애너테이션

 

@RequestBody

: JSON 형식의 Request Body를 DTO 클래스의 객체로 변환 시켜주는 역할

: 클라이언트 쪽에서 전송하는 Request Body가 JSON형식이어야 함을 의미

 

@ResponseBody

: JSON 형식의 Response Body를 클라이언트에게 전달하기 위해 DTO 클래스의 객체를 Response Body로 변환

(@RequestBody와 반대 역할)

: 핸들러 메서드의 리턴값이 ResponseEntity일 경우 내부적으로 HttpMessageConverter가 동작하게 되어 응답 객체(DTO 클래스 객체)를 JSON 형식으로 바꿔주기에 @ResponseBody 애너테이션을 사용하지 않아도 되는 경우도 존재함

: HTTP에서 헤드/바디 등이 존재하는에 그 중 바디 부분에 해당 클래스 혹은 리턴 값을 넣겠다는 의미

 

@Getter / @Setter

: lombok 이라는 라이브러리에서 제공하는 애너테이션

: DTO 클래스를 작성하면서 각 멤버 변수에 해당하는 getter/setter 메서드를 일일이 작성하는 수고를 덜어주는 유틸리티성 라이브러리

 

@AllArgsConstructor

: 클래스에 추가된 모든 멤머 변수를 파라미터로 갖는 생성자를 자동으로 생성

 

@NoArgsConstructor

: 파라미터가 없는 기본 생성자를 자동으로 생성

 

@RequiredArgsContstructor

: final이 붙거나 @NotNull이 붙은 필드의 생성자 추가

 

@Mapper

: 인터페이스에 추가하여 MapperStruct의 매퍼 인터페이스로 정의되도록 함

: 애너테이션의 애트리뷰트로 (componentModel = "spring")을 지정해 줄 경우 Spring의 Bean으로 등록됨

 

@ExceptionHandler

: Spring MVC 예외 처리

: ErrorResponse클래스와 함께 이용하여 Request Body에 대한 유효성 검증 실패 시 필요한 에러 정보만 담아 클라이언트에게 응답으로 전송

 

@RestControllerAdvice

: Spring MVC 예외 처리

: 여러개의 Controller 클래스에서 @ExceptionHandler, @InitBinder 또는 ModelAttribute가 추가된 메서드를 공유해서 사용 가능하므로, 예외 처리 공통화가 가능함

 

위 2개 애너테이션에 대한 설명

https://kcode-recording.tistory.com/78

 

[Spring MVC] Spring MVC 예외 처리 (@ExceptionHandler, @RestControllerAdvice)

@ExceptionHandler : Spring MVC 예외 처리 : ErrorResponse 클래스를 이용해 Reqeust Body에 대한 유효성 검증 실패시 필요한 에러 정보만 담아 클라이언트에게 응답으로 전송 (기존의 에러 메시지보다 자세한

kcode-recording.tistory.com

 

@ResponseStatus

: HTTP Status를 대신 표현 가능함

: 고정된 예외를 처리할 경우 사용하며, 동적으로 변경되는 경우에는 ResponseEntity를 사용

 

@MappedCollection(idColumn = "  ", keyColumn = " ")

: Entity Class 간에 연관 관계를 맺어주는 정보를 의미

  - idColumn : 자식 테이블에 추가되는 외래키에 해당되는 컬럼명

  - keyColum : 외래키를 포함하고 있는 테이블의 기본키 컬럼명

 

@Table("테이블명")

: 기본적으로 클래스명이 테이블의 이름과 매핑된 것이 아닌 매핑하고자 하는 테이블 이름을 설정

: 엔티티와 매핑할 테이블을 지정

 

@Query("쿼리문")

: SQL 쿼리문을 직접 작성 가능함

 

@BeforeEach

: 메서드를 실행하기 전에 실행하도록 함

: 메서드 위에 붙여 해당 메서드 내에 다른 메서드 실행 전 실행할 것을 설정

 

@AfterEach

: 메서드 실행이 끝나면 동작하는 콜백 메서드로 생각

 

@Entity + @Id

: 해당 클래스를 Entity 클래스로 인식하도록 함

: id 필드를 기본키로 지정

 

@GeneratedValue

: 식별자를 생성해주는 전략을 지정할 때 사용

- GenerationType.IDENTITY : 기본키를 자동으로 1씩 증가

 

@Column(애너테이션 작성)

: 필드와 컬럼을 매핑해주는 애너테이션

 - 애너테이션

  : name : 필드와 매핑할 컬럼 이름 지정

  : nullable - 컬럼에 null값을 허용할지 여부 지정

  : updatable - 컬럼 데이터 수정 가능 여부 혀용 지정

  : unique - 하나의 칼럼에 있는 제약 조건을 설정(동일한 데이터 저장이 가능한가)

  : ColumnDefinition : 컬럼 정보 설정. default 값을 줄 수 있음

 

@Builder

 : 롬복에서 지원하는 애너테이션

: 객체를 유연하고 직관적으로 생성 가능

: 어느 필드에 어떤 값이 들어가는지 명시적으로 파악 가능

 

@Transient

: 테이블 컴럼과 매핑하지 않겠다는 의미를 내포

 

@Temporal

: java.util.Date, java.util.Calendar 타입으로 매핑하기 위해 작성해야 하지만 LocalDateTime 타입은 생략 가능

 

@Enumerated(타입) - 2개의 타입이 존재

: enum 타입과 매핑할 때 사용하는 애너테이션

1) EnumType.ORDINAL - 순서를 나타내는 숫자를 테이블에 저장

2) EnumType.SPRING - 이름을 테이블에 저장. >>  .SPRING 사용을 권장함

 

@JoinColumn

: 다대일 매핑(@ManyToOne)에서 사용

: name 애트리뷰터 값에는 테이블 조인시 사용되는 외래키가 저장되는 컬럼명을 지정

 

@ManyToOne

: 다대일 관계를 나타내는 애너테이션

 

@Transactional

: 트랜잭션이 필요한 클래스 혹은 메서드에 추가

: 클래스에 추가할 경우 해당 클래스에서 기능을 이용하는 모든 메서드에 트랜잭션이 적용

: 메서드/클래스에 모두 적용된 경우 메서드 레벨에 애너테이션이 먼저 적용된 이후, 적용되지 않을 경우 클래스 레벨의 애너테이션이 적용됨

 

 

[유효성 검증 애너테이션]

* DTO 클래스에 유효성 검증을 적용할 경우 Spring Boot에서 지원하는 Starter가 필요하기 때문에 build.gradle파일 - dependencies 항목에 아래 항목 추가가 필요함

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-validation'
}

 

* 정규표현식은 아래 링크 참고

https://kcode-recording.tistory.com/21?category=1093847 

 

[기타] 정규표현식

[정규표현식 문법] ^ 문자열 시작 $ 문자열 종료 . 임의의 한 문자(단 \은 넣을 수 없음) * 앞 문자가 없을 수도 무한정 많을 수도 있음 + 앞 문자가 하나 이상 ? 앞 문자가 없거나 하나

kcode-recording.tistory.com

@Email

: 유효한 이메일 주소인지 검증

 

@NotBlank

: null, 공백(""), 스페이스(" ") 값들 모두 허용하지 않음

: 비어있지 않은 값인지 검증

 

@Pattern

: 해당 정규표현식에 유효한 표현인지 검증

: @Pattern(regexp = "정규표현식") 과 같은 형식으로 작성하며, 유효하지 않을 경우 메시지를 작성하고 싶은 경우 ( ~, message = "내용")으로 작성 가능