🔶 스프링부트 어플리케이션 기동 후 (Controller만 생성하여) localhost:8080 접속시 "TEST"글자 출력되게 하기
(@RequestMapping, @GetMapping, @Controller, @RestController, 핸들러 이용)
1. https://start.spring.io/ 접속하여 우측 Add dependencies... 버튼 클릭하여 'Springn Web' 선택 후 하단의 Generate 클릭
그 후 다운받은 압축파일을 압축 해제하고 build.gradle 더블클릭후 open as project 버튼 클릭.
2. 본인이 이름 지은 파일명+Application.java 파일 실행해보면 (프로젝트명을 'demo'로 했기에 'DemoApplication' 실행) console창에 아래와 같이 출력된다.
3. 웹 브라우저 주소창에 localhost:8080 입력 후 접속하면 이렇게 출력되면 정상임.
이제 이 화면에 "TEST"라는 글자가 출력되게 해보자.....
앞서 말했듯 @RequestMapping, @GetMapping, @Controller, @RestController, 핸들러를 이용하는 것이다.
나는 상기 명시된 어노테이션들의 의미를 정확히 모르기에, 하나하나 검색해가며 코드를 생성해 볼 것이다.
4.main 폴더 아래 'controller' package 생성 후 'TestController.java' 파일을 생성해주었다.
5.
우선 @Controller라는 어노테이션을 기재한다.
@Controller 의 의미는, framework에게 말 그대로 해당 파일 자체를 Controller로 인식하라는 의미이다.
(@Controller 기재했더니 line3에 Controller가 import가 되었다)
6.
@Controller 작성 후 @RequestMapping 을 기재한다.
@RequestMapping(value = /Test") 는 Servlet 명칭 부여하는 역할. 예를 들어, 주소창에 localhost:8080/Test라고 입력시 그에 맞는 해당 컨트롤러를 탄다.
즉, 특정 URL로 요청(Request)을 보내면 해당 uri에 맞는 Controller에서 특정 메서드와 매핑한다.
보통 @RequestMapping은 해당 controller 안에 공통 url을 쓰는 여러 개의 메서드를 한꺼번에 관리하기 위해 사용한다.
7. 실행해보았다. 그런데...
자꾸 오류가 발생했는데... 한 시간 삽질 후 알고보니 @RequestMapping에 value값과 method값을 안적어줬던 것이다..
그리고 @Responsbody를 써야 return값이 jsp파일로 가지 않고 return값의 text 그대로 출력가능하다는 것을 알았다...
실행하였더니
드디어 출력되었다...TEST... (*꒦ິ⌓꒦ີ)
자, 그렇다면 GetMapping을 이용해서 TEST를 출력해보자...
우선, @RequestMapping과 @GetMapping의 차이에 대해 예시코드를 가지고 살펴보자.
<예시코드 - 과거>
@RestController
public class HelloController {
@RequestMaping(vale = "hello", method = RequestMethod.GET)
public String helloGet(...) {
...
}
@RequestMaping(vale = "hello", method = RequestMethod.POST)
public String helloPost(...) {
...
}
과거에는 이런식으로 @RequestMapping을 메서드마다 기재해 복잡하게 코드를 썼다면,
현재는 아래 예시코드처럼 @RequestMapping의 하단에 @GetMapping, @PostMapping 등을 사용해 더욱 효율적으로 간결하게 코드를 쓸 수 있게 되었다.
<예시코드 - 현재>
@RestController
@RequestMaping(value = "/hello")
public class HelloController {
@GetMapping()
public String helloGet(...) {
..
}
@PostMapping()
public String helloPost(...) {
...
}
}
⭐⭐⭐
또한, @RequestMapping은 Class와 Method에 붙일 수 있다.
즉, @GetMapping은 "@RequestMapping의 method가 GET방식" 이라고 해석할 수 있다.
그리고 여기서 @RestController는 @Controller + @Responsbody 의 역할을 한다.
과거에는 JSP, HTML과 같은 View를 전달해 주었기에 주로 @Controller를 사용했지만,
최근에는 Frontend / Backend을 나누어 개발하는 경우가 많기에 Backend에서 Rest Api를 통해 JSON으로 데이터만 전달하기 때문에 편리성을 위해 @RestController를 사용한다고 한다.
보통 조회할때는 GET방식, 등록(생성)시 POST방식, 수정시 PUT방식을 사용한다.
나는 단순 조회기능을 구현하는 것이므로 @GetMapping을 사용했다.
@GetMapping, @PostMapping, @PutMapping 등은 메서드에만 붙일 수 있다.
⭐⭐⭐
따라서 코드를 작성해보면..
실행해보면
TEST가 잘 출력된다.
개념정리 및 요약
- @Controller: 해당 파일이 Controller임을 framework에게 알리는 역할
- @RequestMapping: 특정 uri로 요청을 보내면, 해당 Controller에서 이 요청을 특정 메서드와 매핑하기 위해 사용하는 것.
=> @RequestMapping(value = "/test", method = RequestMethod.GET) 이런방식으로 기재한다.
참고로, HTTP 주요 메서드로는 다음과 같이 사용된다.
GET - Server의 리소스를 조회하고자 할 때 - (CRUD에서 R(Read) - 읽기)
POST - Server의 리소스를 생성하고자 할 때 - (CRUD에서 C(Create) - 생성)
PUT - Server의 리소스를 수정하고자 할 때 - (CRUD에서 U(Update) - 수정)
PATCH - Server의 리소스를 일부 수정하고자 할 때 - (CRUD에서 U(Update) - 수정)
DELETE - Server의 리소스를 삭제할 때 - (CRUD에서 D(Delete) - 삭제)
- @RestController: @Controller + @Responsbody 의 역할을 하며, JSON 형태의 객체 데이터를 반환한다.
@Controller는 주로 view를 반환하기 위해 사용한다. 그러나 @RestController는 모든 메서드가 view 대신 객체로 작성(생성)되므로 있는 그대로 객체를 반환한다.
- @GetMapping: '@RequestMapping의 method가 GET방식' 이라고 해석할 수 있다.
- Handler: 스프링 MVC에서 웹 요청을 처리하는 객체. Controller도 일종의 핸들러인 셈이다.
즉, Request로 인해 호출되는 Controller의 메소드를 뜻한다.
/*여담*/
이렇게 하나하나 알아가니 너무 뿌듯했던 과제였다.. 역시 삽질을 좀 해야 성장해나보다...(?)
참고: https://backendcode.tistory.com/227, https://mungto.tistory.com/436, IT 늦공 김부장, https://backendcode.tistory.com/213, https://songacoding.tistory.com/3, http://www.mungchung.com/xe/spring/21278
'IT || 개발공부 > Spring' 카테고리의 다른 글
[Spring] HTTP method에 대하여 (0) | 2023.11.06 |
---|---|
[Spring] 스프링 빈 등록 후 의존성 주입해보기 (1) | 2023.11.06 |
[Spring] Controller, Service , Repository의 역할 (0) | 2023.10.31 |
[Spring] DI, IoC란? (0) | 2023.10.30 |
[Spring] API와 REST API (0) | 2023.10.27 |
댓글