Annotation
자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종
기타
| 종류 | 역할 |
| @SpringBootApplication | SpringBoot를 자동으로 실행 |
| @EnableAutoConfiguration | 클래스 경로에 지정된 내용을 기반으로 설정 자동화 |
| @ComponentScan | @Component, @Service, @Repository, @Controller, @Configuration 빈들을 찾아 Context에 빈을 등록 |
| @Configuration | 스프링 IOC Container에게 해당 클래스가 Bean 구성 Class임을 알려줌 |
| @Component | 개발자가 컨트롤이 가능한 클래스를 Bean으로 등록 • Controller, Service, DAO 세가지 이외의 클래스에만 사용 권장 |
| @Autowired | 의존 관계를 자동으로 연결하여 빈을 주입 |
| @Bean | 개발자가 컨트롤이 불가능한 외부 라이브러리를 Bean으로 등록 |
| @Controller | Spring MVC의 Controller로 사용되는 클래스 선언을 단순화 |
| @Service | 비지니스 로직이 들어가는 Service로 사용되는 클래스임을 명시 |
| @Repository | DB연동 작업을 하는 클래스임을 명시 • 해당 클래스에서 발생하는 DB 관련 예외를 spring의 DAOException으로 전환할 수 있음 |
| @Resource | 의존관계를 자동으로 연결하여 빈을 주입 • Java에서 지원 • 사용 대상 : 필드, 파라미터가 1개인 setter 메소드 • 연결 우선 순위 : 이름 > 타입 |
| @Autowired | 의존 관계를 자동으로 연결하여 빈을 주입 • Spring Framework에서 지원 (Spring에서만 사용 가능) • 사용 대상 : 필드, 생성자, setter 메소드 • 연결 우선 순위 : 타입 > 이름 |
| @Inject | 의존 관계를 자동으로 연결하여 빈을 주입 • Java에서 지원 • 사용 대상 : 필드, 생성자, setter 메소드 • 연결 우선 순위 : 이름 > 타입 |
| @RequestMapping | 클라이언트에게 요청받는 주소를 클래스와 연결 • 속성 - value(String) → URL 값 • 속성 - method(POST/GET/PUT/・・・) - default : GET방식 → HTTP Request 메소드 값 |
| @PostMapping | HTTP POST 요청을 특정 핸들러 메소드에 매핑 |
| @GetMapping | HTTP GET 요청을 특정 핸들러 메소드에 매핑 |
| @PutMapping | HTTP PUT 요청을 특정 핸들러 메소드에 매핑 |
| @DeleteMapping | HTTP DELETE 요청을 특정 핸들러 메소드에 매핑 |
| @RestController | @Controller + @ResponseBody • 해당 클래스가 ajax 요청을 받아 json/xml 형태로 객체 데이터를 반환 |
| @ResponseBody | 자바 객체를 HTTP 요청의 body 내용으로 변환/매핑 (직렬화) |
| @RequestBody | JSON 형태의 HTTP Body 내용을 Java 객체로 변환 (역직렬화) • Body가 존재하지 않는 HTTP GET 요청 시, 에러 발생 • 생성자 또는 setter 메서드 불필요 (but, 직렬화를 위해 기본 생성자는 필수) • 데이터 바인딩을 위한 필드명을 알아내기 위해 getter나 setter 중 1개는 정의해야 함 • HTTP POST 요청 시, 기본 생성자는 필수 • HTTP GET 요청 시, setter는 필수 |
| @ModelAttribute | multipart/form-data 형태의 HTTP Body 내용과 HTTP 파라미터 데이터(1개 이상)를 Java 객체로 매핑 (역직렬화) • 생성자 또는 setter 메서드 필요 • Query String 이나 Form 형식이 아닌 데이터는 처리할 수 없음 • 잘못된 파라미터 값이 들어오면 WebExchangeBindException 발생 |
| @RequestParam | HTTP 요청 파라미터(1개)를 바인딩 • 잘못된 파라미터 값이 들어오면 400BadRequest 발생 • required 속성값이 false이고 파라미터가 없는 경우, null로 바인딩 • 속성 - name(String) → 파라미터의 이름 • 속성 - value(String) → 파라미터의 간단한 설명 • 속성 - required(true/false) → 파라미터의 필수 여부 설정 • 속성 - defaultValue(String) → 파라미터의 기본값 설정 |
| @PathVariable | URL 경로 주소에 사용하는 값을 매개 변수로 사용 • 쿼리 스트링이 아닌, 주소를 경로 형태로 만들어줌 |
| @JsonProperty | 해당 객체를 JSON 형식으로 변환할 때 받을 Key의 이름을 설정 • lombok 라이브러리 사용 • 서버와 클라이언트의 표기법이 달라서 발생하는 문제 해결 |
| @JsonNaming | 객체 JSON 형식으로 변환할 때 받을 Key의 이름을 설정 • 필드마다 @JsonProperty를 적용해야 하는 번거로움 방지 • default : PropertyNamingStrategy.SnakeCaseStrategy.class → Snake를 Camel로 |
| @RequestEntity | @RequestBody에 HTTP response header가 추가 |
| @ResponseEntity | @ResponseBody에 HTTP response header가 추가 |
| @Transactional | 메소드 내에서 Exception이 발생하면 해당 메소드에서 이루어진 모든 DB 작업을 초기화 • 모든 처리가 정상적으로 동작한 경우에만 DB에 커밋 • Service 단에서 사용 |
| @EnableSwagger2 | 개발자 도움말 페이지를 생성 |
Lombok 라이브러리
| 종류 | 역할 |
| @NoArgsConstructor | 기본 생성자를 자동으로 추가 • 필수 속성 - access=AccessLevel.PROTECTED → 기본생성자의 접근 권한을 제한 → Entity 클래스를 프로젝트 코드 상에서 기본생성자로 생성하는 것을 방지하면서 JPA에서 Entity 클래스를 생성하는 것은 허용 • 접근제한자를 public(default)로 두면 안전성이 심각하게 저하 |
| @AllArgsConstructor | 모든 필드 값을 파라미터로 받는 생성자를 추가 • 변수의 위치를 바꿔도 데이터타입이 같으면 에러로 인지하지 못함 |
| @RequiredArgsConstructor | final 필드나 @NonNull 필드에 대해 자동으로 생성자 생성 • 새로운 필드를 추가할 때 생성자를 다시 만드는 번거로움 방지 |
| @Getter | 클래스 내 모든 필드의 getter 메소드를 자동으로 생성 |
| @Setter | 클래스 내 모든 필드의 setter 메소드를 자동으로 생성 • 해당 클래스가 무결성을 보장해야 하는 경우, 사용을 지양 |
| @ToString | 특정 필드를 toString() 결과에서 제외 • 필수 속성 - exclude(String) → toString()결과에서 제외할 필드 이름 |
| @Builder | 어느 필드에 어떤 값을 채워야 할지 명확하게 정하여 생성 시점에 값을 채움 • 생성자 상단에 선언 시, 생성자에 포함된 필드만 빌더에 포함 |
| @Data | Lombok에서 제공하는 필드와 관련된 모든 코드를 생성 |
| @Value | 불변의 객체를 선언 • setter 메소드는 사용 불가능 |
| @Slf4j | 로그 기록 |
API
| 종류 | 역할 |
| @Api | Swagger 리소스로 사용될 Controller 클래스 지정 • 속성 - tags(String) → 간단한 클래스 설명 |
| @ApiIgnore | 해당 Controller를 Swagger 페이지에서 보이지 않게 함 |
| @ApiOperation | API 메소드에 대한 설명 • Controller에 작성 • 속성 - value(String) → 간단한 메소드 설명 • 속성 - note(String) → 자세한 메소드 설명 • 속성 - response(Object) → Response 타입 |
| @ApiResponses | API 상태 코드 값 별로 메시지 커스텀 |
| @ApiResponse | API 상태 코드 값의 메시지 커스텀 • 필수 속성 - code(HttpStatus) → 응답 HttpStatus • 필수 속성 - message(String) → 응답 메시지 • 속성 - response(Object) → Response 타입 |
| @ApiModel | 해당 모델을 설명 • 속성 - description(String) → 설명 |
| @ApiParam | 해당 파라미터에 대한 설명 • 속성 - value(String) → 간단한 파라미터 설명 • 속성 - required(true/false) → 파라미터의 필수 여부 설정 |
| @ApiImplicitParams | 파라미터 별로 설명 |
| @ApiImplicitParam | 해당 파라미터에 대한 설명 • 메소드 위에 작성하여 @ApiParam보다 깔끔함 • 속성 - name(String) → 파라미터 이름 • 속성 - value(String) → 간단한 파라미터 설명 • 속성 - required(true/false) → 파라미터의 필수 여부 설정 • 속성 - dataType(String) → 파라미터의 데이터타입 |
| @ApiModelProperty | 모델의 해당 필드(변수)를 설명할 때 사용 • 속성 - value(String) → 간단한 필드 설명 • 속성 - example(String) → 필드 예시 • 속성 - required(true/false) → 필드의 필수 여부 설정 • 속성 - hidden(String) → 필드의 숨김 여부 설정 |
예외 처리
| 종류 | 역할 |
| @ExceptionHandler | 예외 처리 • 컨트롤러에 있는 메소드에 사용 |
| @ControllerAdvice | Spring AOP를 이용한 Exception handling • '예외처리 전용 컨트롤러'를 생성하여 예외 처리 |
| @ResponseStatus | HTTP Status Code 제어를 위한 Exception handling 특정한 예외 지정 • 상태코드를 의미있는 코드로 변환 |
유효성 검증
| 종류 | 역할 | |
| @Valid | RestController를 이용하여 @RequestBody 객체를 사용자로부터 가져올 때 들어오는 값들을 유효성 검사 • service 단이 아닌 객체 안에서 검증 가능 |
|
| 문자열 유무 검증 |
@NotBlank | null이 아닌 값이고, 공백이 아닌 문자를 하나 이상 포함 • 반드시 값이 존재하고, 공백 문자를 제외한 길이가 0보다 커야함 |
| @NotEmpty | null 또는 empty(빈 문자열)이 아님 • 반드시 값이 존재하고, 길이나 크기가 0보다 커야함 • 타입 : 문자열, Collection, Map |
|
| @NotNull | null 또는 empty(빈 문자열)이 아님 • 반드시 값이 존재함 • 타입 : 모든 타입 |
|
| @Null | null 값임 • 타입 : 모든 타입 |
|
| 최대/최소 검증 |
@DecimalMax | 지정된 최댓값보다 작거나 같아야 함 • 문자열 타입인 경우 • 필수 속성 - value(String) → 최댓값 지정 |
| @DecimalMin | 지정된 최솟값보다 크거나 같아야 함 • 문자열 타입인 경우 • 필수 속성 - value(String) → 최소값 지정 |
|
| @Max | 지정된 최댓값보다 작거나 같아야 함 • 타입 : Primitive 타입, Wrapper 타입 • 필수 속성 - value(int) → 최댓값 지정 |
|
| @Min | 지정된 최솟값보다 크거나 같아야 함 • 필수 속성 - value(int) → 최솟값 지정 |
|
| 양수/음수 검증 |
@Positive | 양수인 값 |
| @PositiveOrZero | 0이거나 양수인 값 | |
| @Negative | 음수인 값 | |
| @NegativeOrZero | 0이거나 음수인 값 | |
| 시간 값 검증 |
@Future | Now 보다 미래의 날짜, 시간이어야 함 |
| @FutureOrPresent | Now 이거나 미래의 날짜, 시간이어야 함 | |
| @Past | Now 보다 과거의 날짜, 시간이어야 함 | |
| @PastOrPresent | Now 이거나 과거의 날짜, 시간이어야 함 | |
| 이메일 검증 | 올바른 형식의 이메일 주소이어야 함 | |
| 자릿수 범위 검증 |
@Digits | 허용된 범위 내의 숫자임 • 필수 속성 - integer(int) → 숫자에 허용되는 최대 정수 자릿수 • 필수 속성 - fraction(int) → 숫자에 허용되는 최대 소수 자릿수 |
| boolean 값 검증 |
@AssertTrue | 값이 항상 True 이어야 함 |
| @AssertFalse | 값이 항상 False 이어야 함 | |
| 크기(길이) 검증 |
@Size | 크기가 지정된 경계(포함) 사이에 있어야 함 • 타입 : String, Collection, Map, 배열 • 필수 속성 - max(int) → element의 크기가 작거나 같음 • 필수 속성 - min(int) → element의 크기가 크거나 같음 |
| 정규식 검증 |
@Pattern | 지정한 정규식과 대응되는 문자열 이어야 함 • Java의 Pattern 패키지의 컨벤션을 따름 • 필수 속성 - regexp(String) → 정규식 문자열을 지정 |
데이터 제어를 위한 필터링
| 종류 | 역할 |
| @JsonIgnore | 객체를 이용한 JSON의 (역)직렬화((de)serialize)를 할 때, 응답 객체에 특정 필드를 제외 • 필드에 개별적으로 적용 |
| @JsonIgnoreProperties | 객체를 이용한 JSON의 (역)직렬화((de)serialize)를 할 때, 응답 객체에 특정 필드를 제외 • 클래스에 적용 |
| @JsonFilter | Admin 페이지에서 지정된 필드만 조회 • Controller, Service 클래스에서 사용 |
[ 출처 ]
https://prinha.tistory.com/entry/%EC%9E%90%EB%B0%94-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98-annotation%EC%9D%98-%EC%A0%95%EC%9D%98%EC%99%80-%EC%A2%85%EB%A5%98
'TIL > Spring' 카테고리의 다른 글
| [Spring] Spring Security (스프링 시큐리티)란? (0) | 2022.05.13 |
|---|---|
| component-scan (0) | 2021.10.29 |