@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
: 유효한 이메일 주소인지 검증
@NotBlank
: null, 공백(""), 스페이스(" ") 값들 모두 허용하지 않음
: 비어있지 않은 값인지 검증
@Pattern
: 해당 정규표현식에 유효한 표현인지 검증
: @Pattern(regexp = "정규표현식") 과 같은 형식으로 작성하며, 유효하지 않을 경우 메시지를 작성하고 싶은 경우 ( ~, message = "내용")으로 작성 가능
'공부 자료 > Spring' 카테고리의 다른 글
[Spring Security] Cookie (0) | 2022.11.22 |
---|---|
[Spring Security] HTTPS (HTTP+Secure) (0) | 2022.11.22 |
[Spring MVC] 트랜잭션 전파/격리 레벨 (0) | 2022.11.05 |
[Spring MVC] 트랜잭션 기본 및 적용 (0) | 2022.11.04 |
[Spring MVC] JPA / 영속성 컨텍스트 관련 JPA API (0) | 2022.11.01 |