fastcampus 사이트의 'Java 웹 개발 마스터 올인원 패키지' 를 수강하며 공부 목적으로 작성하는 글입니다.
Controller 주소 관련 Annotation
annotation | 의미 |
@Autowired | Spring Boot가 관리하는 Bean을 주입 받기 위한 설정 |
@RestController | 적용된 Class가 REST API로 동작하도록 설정 |
@Controller | 적용된 Class가 View(html)를 내리도록 설정 |
@RequestMapping | 외부에 주소를 노출하는 설정 - @RestController, @Controller, @HTTP GET, POST, PUT, DELETE 등 적용가능. - method를 지정하지 않으면 전부 동작 |
@GetMapping | RequestMapping method를 분리한 하위 개념으로 Get Method만 동작한다. |
@PostMapping | RequestMapping method를 분리한 하위 개념으로 Post Method만 동작한다. |
@PutMapping | RequestMapping method를 분리한 하위 개념으로 Put Method만 동작한다. |
@DeleteMapping | RequestMapping method를 분리한 하위 개념으로 Delete Method만 동작한다. |
@ResponseBody | @Controller Annotation이 붙은 Class에서 Json 응답을 내릴 때 사용 |
Controller와 RestController의 차이
@Controller
-> view를 전달 +@ResponseBody를 사용하면 json으로 반환
@RestController
-> Json형태로 객체를 반환
예전에는 프로그래밍을 할 때에는 jsp나 html과 같은 View를 전달해 주었기 때문에 @controller를 사용했으나, 최근에는 프론트엔드와 백엔드를 따로 두고, 백엔드에서는 REST API를 통해 json으로 데이터만 전달하기 때문에 편리성을 위해 @RestController를 사용하게 되었다.
Controller 데이터 맵핑 Annotation
annotation | 의미 |
@RequestParam | URL의 Query Parameter를 Parsing 할 때 사용 - ex) public User create(@RequestParam Long id) |
@Object | Query Parameter를 Object로 바 매핑할 때 사용 |
@PathVariable | URL의 Path의 값을 Parsing 할 때 사용 - ex) @GetMapping("/{id}" public Optional read(@PathVariable Long id) |
@RequestBody | HTTP Method의 POST, PUT의 body를 Parsing할 때 사용 |
@RequestHeader | HTTP Method의 header를 Parsing할 때 사용 |
@CookieValue | 사용자의 쿠키가 존재하는 경우 쿠키의 이름을 이용해서 쿠키 값 추출 |
@ModelAttribute | 객체 생성 후 HTTP에 넘어온 값을 자동으로 바인딩 후 View까지 전달 |
▶ @RequestParam
- 핸들러의 매개변수에 사용자가 입력한 파라미터값을 매핑할 때 사용
- 1개의 HTTP 요청 파라미터를 받기위해 사용
- 필수 여부는 true이기 때문에 반드시 해당 파라미터가 전송되어야 하며 전송되지 않을 경우 400 Error를 유발
- 필요한 변수가 아니라면(required = false)로 변환
▶ @RequestBody
- Client가 전송하는 Json형태의 내용을 MessageConverter를 통해 객체로 변환시켜주는 역할
- 값을 주입하지 않고 변환시키므로, 변수들의 생성자나 Setter함수 없어도 값이 저절로 할당
▶ @ModelAttribute
- HTTP Body 데이터와 HTTP 파라미터들을 Setter함수를 통해 1 대 1로 객체에 바인딩
- 변환을 하지 않고 값을 주입시키므로, 변수의 생성자나 Setter함수가 없으면 변수들이 할당되지 않는다.
스프링 부트 단위 테스트
- 단위 테스트는 보통 Method레벨로 테스트가 이루어지며, 하나의 기능이 잘 동작하는지를 검사하는 테스트이다. 따라서 불필요한 Bean들을 로드할 필요가 없다.
annotation | 의미 |
@WebMvcTest | MVC를 테스트하기 위한 어노테이션, 간단한 Controller에 대해서 테스트가 가능하다. |
@DataJpaTest | JPA 테스트를 하기 위한 어노테이션, JPA관련만 로드된다. |
@RestClientTest | REST Client 테스트 용도, RestTemplate과 같은 http client 사용 시 Mock Server를 만드는 용도 |
스프링 부트 통합 테스트
- 주로 Controller부터 Service, Repository, External library 등 모든 부분을 테스트하며, 스프링의 모든 Bean을 로드하여 사용하므로 테스트 시간이 길다.
annotation | 의미 |
@SpringBootTest | 스프링의 실행부터 모든 bean을 로드하여, 처음부터 끝까지 모두 테스트 가능 |
Entity 관련 Annotation
annotation | 의미 |
@Entity | 해당 Class가 Entity임을 명시 |
@Table | 실제 DB테이블의 이름을 명시 |
@Id | Index primary key임을 명시 |
@Column | 실제 DB Column의 이름을 명시 |
@GeneratedValue | Primary key 식별 키의 전략 설정 |
Entity : JPA에서는 테이블을 자동으로 생성해주는 기능 존재
DB Table == JPA Entity
JPA의 Entity 및 column은 자동으로 camel case → DB 의 snake_case에 매칭 시켜준다.
그 외 사용하는 Annotation
annotation | 의미 |
@Import | 단위 테스트를 할 때 별도로 만든 Bean, Component 등 필요한 Bean Load |
@AutoConfigureTestDatabase | 테스트 시 실제 DB를 사용하거나 Memory DB를 사용할 때 사용 - ex) @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) |
@DisplayName | 테스트의 이름을 지정 |
@Test | 테스트할 Method 지정 |
@Transactional | 테스트가 끝나면 해당 DB의 내용을 Roll back할 때 사용한다. - DB의 auto Increment Index는 계속 증가 |
@TestConfiguration | 테스트에서 사용할 설정을 할 때 class에 적용한다. |
'Spring' 카테고리의 다른 글
6. 스프링 Servlet (0) | 2022.07.02 |
---|---|
5. 스프링 AOP (0) | 2022.06.28 |
4. 람다함수의 개념 이해하기 + 스트림 (0) | 2022.01.25 |
3. 템플릿 메소드 패턴 VS 전략패턴 (0) | 2022.01.12 |
2. 토비 Chapter 4.템플릿 내용 정리 (0) | 2022.01.09 |