본문 바로가기

Spring

1. Spring annotation

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에 적용한다.

 

 

 

 

Core Features

Spring Boot lets you externalize your configuration so that you can work with the same application code in different environments. You can use a variety of external configuration sources, include Java properties files, YAML files, environment variables, an

docs.spring.io

 

'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