해당 클래스를 구성 정보로 사용한다.
메서드에 붙여준다. 반환된 객체가 스프링 컨테이너에 스프링 빈으로 등록한다.
의존관계 자동으로 주입
클래스가 컴포넌트 스캔의 대상이 되도록 해서 스프링 빈으로 등록된다.
final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다.
파라미터가 없는 기본 생성자를 생성합니다.
스프링 컨테이너가 완전히 초기화를 다 끝내고, 실행 준비가 되었을 때 발생하는 이벤트이다.
"/mapping/userA" API에서 @GetMapping("/mapping/{userId}")와 같이 경로를 템플릿화 해서 userA를 뽑아낼 수 있다.
@GetMapping("/mapping/{userId}/orders/{orderId}")
public String mappingPath(@PathVariable("userId") String data, @PathVariable Long orderId) {
log.info("mappingPath userId={}, orderId={}", userId, orderId);
return "ok";
}
예시 http://localhost:8080/member?username=hello&age=20
request.getParameter("username")
1. @RequestParam의 ()에 HTTP 파라미터 이름
public String requestParamV2( @RequestParam("username") String memberName, @RequestParam("age") int memberAge) {}
2. HTTP 파라미터 이름이 변수 이름과 같으면 @RequestParam(name="xx") 생략 가능
public String requestParamV3( @RequestParam String username, @RequestParam int age) {}
3. String, int 등의 단순 타입이면 @RequestParam 도 생략 가능
public String requestParamV4(String username, int age) {}
4. 파라미터를 Map으로 조회하기
public String requestParamMap(@RequestParam Map<String, Object> paramMap) {}
public class HelloData { private String username; private int age; }
예시 http://localhost:8080/member?username=hello&age=20
1. 자동으로 HelloData 객체가 생성되고, 요청 파라미터의 값도 모두 들어가 있다.
public String modelAttributeV1(@ModelAttribute HelloData helloData) {}
2. @ModelAttribute는 생략할 수 있다. String, int, Integer 같은 단순 타입=@RequestParam. 나머지=@ModelAttribute
public String modelAttributeV2(HelloData helloData) {}
public class HelloData { private String username; private int age; }
예시 HTTP Body에 TEXT or JSON이 넘어오는 상황
1. 메시지 바디 정보를 직접 조회
public String requestBodyJsonV2(@RequestBody String messageBody) {}
2. @RequestBody에 직접 만든 객체를 지정할 수 있다.
public String requestBodyJsonV3(@RequestBody HelloData data) {}
@ResponseBody
@PostMapping("/request-body-string-v4")
public String responseBodyV3() {
return "ok";
}
@ResponseStatus(HttpStatus.OK)
@ResponseBody
@GetMapping("/response-body-json-v2")
public HelloData responseBodyJsonV2() {
~~~code OR parameter~~~
return helloData;
}
반환 타입이 원시타입인지 참조타입인지 주의- 참조타입이라면 응답 HTTP message body에 JSON이 들어감(단순 텍스트가 아니라)
@Controller 대신에 @RestController 애노테이션을 사용하면, 해당 컨트롤러에 모두 @ResponseBody 가 적용되는 효과가 있다.
반환 값이 String이면 뷰 이름으로 인식된다. 그래서 뷰를 찾고 뷰가 랜더링 된다.
뷰 리졸버를 통한 View 조회를 무시하고, HTTP message body에 직접 내용 입력
@Controller + @ResponseBody -> 반환 값으로 뷰를 찾는 것이 아니라, HTTP 메시지 바디에 바로 입력한다.
Rest API(HTTP API)를 만들 때 사용하는 컨트롤러이다.
테스트를 실행한 후에 매번 호출된다. 테스트가 실패해도 수행된다.
테스트를 실행하기 전에 매번 호출된다.
전체 테스트 중 한번만 실행
테스트에 있으면 스프링은 테스트를 트랜잭션 안에서 실행하고, 테스트가 끝나면 트랜잭션을 자동으로 롤백시켜 버린다
@SpringBootApplication을 찾아서 설정으로 사용한다. = 스프링 부트 띄우고 테스트(이게 없으면 @Autowired 다 실패)
스프링 AOP를 적용하려면 스프링 컨테이너가 필요하다. 이 애노테이션이 있으면 테스트시 스프링 부트를 통해 스프링 컨테이너를 생성한다. 그리고 테스트에서 @Autowired 등을 통해 스프링 컨테이너가 관리하는 빈들을 사용할 수 있다.
테스트 안에서 내부 설정 클래스를 만들어서 사용하면서 이 에노테이션을 붙이면, 스프링 부트가 자동으로 만들어주는 빈들에 추가로 필요한 스프링 빈들을 등록하고 테스트를 수행할 수 있다.
영속성 컨텍스트를 주입하는 표준 애노테이션
DB 테이블에 대응하는 하나의 클래스. JPA가 관리한다.
데이터베이스 PK와 매핑
PK를 자동으로 생성해주는 애노테이션
객체의 필드를 테이블의 컬럼과 매핑
Entity의 연관관계에서 외래 키를 매핑하기 위해 사용한다.
트랜잭션 처리가 필요한 곳에 붙여주면 된다. 스프링의 트랜잭션 AOP는 이 애노테이션을 인식해서 트랜잭션 프록시를 적용해준다.
JPA의 모든 데이터 변경(등록, 수정, 삭제)은 트랜잭션 안에서 이루어져야 한다.
readOnly=true : 데이터의 변경이 없는 읽기 전용 메서드에 사용, 영속성 컨텍스트를 플러시 하지 않으 므로 약간의 성능 향상(읽기 전용에는 다 적용)
엔티티와 매핑할 테이블 이름 지정
값 타입을 정의하는 곳에 표시
값 타입을 사용하는 곳에 표시
@Getter , @Setter , @ToString ,@EqualsAndHashCode , @RequiredArgsConstructor를 자동으로 적용해준다.