Spring MVC는 Web application을 개발함에 있어서 기본이라고 보면 된다. 이중에서 Controller에 대한 깊은 이해는 Sprinsg MVC를 이해함에 있어 필수 조건이라고 본다.
HttpServlet
Spring MVC를 이해함에 있어 제일 중요한 개념이라고 생각된다. HttpServlet은 다양한 데이터를 생성해주는 클라스이므로 JAVA기반의 웹 응용프로그램 개발에 있어서 필수 요소라고 할 수 있다. 보다 자세한HttpServlet 클라스에 대해서는 이글을 참조하시기 바랍니다. 이 클라스에 대해 간단히 요약하면 low level까지 구현해봐야 할듯 하다. HTTP 요청, 응답에 대해 모두 구현해야 하고 Controller에 대한 매핑관계도 모두 구현해야 한다.
DispatcherServlet
HttpServlet를 사용에서 격은 많은 불편함을 해소위해 Spring MVC에서는 다소 번거롭고 정의만 하면 일반적인 구현으로 커버되는 부분들을 자동으로 완성해주는 역할을 DispatcherServlet가 해준다고 생각하시면 됩니다.
DispatcherServlet은 @Controller annotation을 사용한 클라스에 자동으로 매핑해주는 역할을 합니다.
@Controller 사용
앞글에서 @RestController 예제이다.
@RestController
class SearchController(
@Autowired var searchService: SearchService,
){
@GetMapping("search")
fun search_word(@RequestParam word: String): List<Word>{
return searchService.search_word(word)
}
}
@RestController
class WordController(
@Autowired var wordRepository: WordRepository
)
{
@PostMapping("words")
fun save_word(@RequestBody word: Word): Word{
return wordRepository.save(word)
}
@GetMapping("words/{word}")
fun save_word(@PathVariable word: Word): Word{
return wordRepository.save(word)
}
}
여기서 Controller에서 사용되는 anotation에 대해 알아보자.
- @RestController, @Controller : RestController는 Controller에 @ResponseBody을 추가한 것이다.
- @ResponseBody: 모든 반환값을 적절한 형태로 변환 한다.(String, XML, JSON) , 만약 view을 사용한다면 이 어노테이션을 사용하지 않는 것이 구현하기 더 편하다.
- @Autowired: Spring bin를 주입한다. singleton으로 사용되는 경우에만 사용.
- @Resource: Spring bin를 주입한다. 2개 이상 존재 할 경우 사용한다.
- @RequestMapping: HTTP request에 대한 정의이다. (서스셋에는 @GetMapping, @PostMapping, @PutMappong, @DeleteMapping 등이 있다.
- @RequestParam: HTTP request parameter로 URL(?key=value)형식으로 전달 받을때 사용한다.
- @PathVariable: URL path에 바로 넣을 수 있는 파라미터 이다. 위 코드에서 /word에 대한 Get 요청은 이 방식으로 처리했다.
- @RequestBody: HTTP요청 시 BODY를 변환하여 변수로 받을 함수 인자에 선언한다. 사용 시 주의할점은 HTTP Header에서 BODY 포맷을 명시해 줘야 한다. 예를 들어 content-type :application/json으로 명시 해줘야 한다.
https://www.marcobehler.com/guides/spring-mvc#_introduction
https://jsonobject.tistory.com/257
https://mangkyu.tistory.com/18
'Spring boot' 카테고리의 다른 글
[Spring] Spring AOP 개념 및 구현 (0) | 2021.11.15 |
---|---|
[Spring] Kotlin + Spring boot 에 MongoDB을 도입(Spring Data MongoDB, Querydsl) (0) | 2021.11.14 |
[Spring boot] DI 설정에 관하여 (0) | 2021.11.12 |
[Spring boot]Dependency injection(DI) (0) | 2021.11.11 |
[Spring] Kotlin + Spring boot 에 JPA 적용 (0) | 2021.11.02 |
Comment