겉바속촉
[점프투스프링부트] 2-02 컨트롤러 본문
점프투스프링부트 2-02
목표 : 스프링부트 게시판(SBB)을 만들면서 스프링부트의 기능을 하나씩 알아가기
URL 매핑
이제 본격적으로 SBB 프로그램을 만들어 보자.
목표 : 브라우저에서 http://localhost:8080/sbb 페이지를 요청했을 때 "안녕하세요 sbb에 오신것을 환영합니다."라는 문자열을 출력하도록 만들어 보자.
STS의 Boot Dashboard의 시작 버튼을 눌러 로컬서버를 먼저 구동하자.
그리고 그냥 한번 브라우저에서 http://localhost:8080/sbb 페이지를 요청해 보면 다음과 같이 에러메세지창이 뜹니다.
아마 위처럼 "Not found (404)" 라는 오류가 발생할 것이다. 여기서 404는 HTTP 오류코드 중 하나이다.
404 오류는 브라우저가 요청한 페이지를 찾을 수 없을 경우에 발생한다.
오류가 발생한 원인은 스프링부트 서버가 http://localhost:8080/sbb라는 요청을 해석할 수 없기 때문
그렇다면 오류를 해결하기 위해 해야 할일은 무엇일까?
컨트롤러를 작성하고 /sbb URL에 대한 매핑을 추가하는 것이다.
페이지 요청이 발생하면 스프링부트는 가장 먼저 컨트롤러에 요청된 페이지의 URL 매핑이 있는지를 조사한다.
컨트롤러
URL 매핑을 추가하기 위해 MainController.java 파일을 다음과 같이 작성하자.
[파일명:/sbb/src/main/java/com/mysite/sbb/MainController.java]
package com.mysite.sbb;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MainController {
@GetMapping("/sbb")
public void index() {
System.out.println("index");
}
}
MainController 클래스에 적용한 @Controller 애너테이션 : MainController 클래스는 스프링부트의 컨트롤러
메서드의 @GetMapping 애너테이션 : 요청된 URL과의 매핑을 담당 & 서버에 요청이 발생하면 스프링부트는 요청 페이지와 매핑되는 메서드를 컨트롤러를 대상으로 찾는다.
즉, 스프링부트는 http://localhost:8080/sbb 요청이 발생하면 /sbb URL과 매핑되는 index 메서드를 MainController 클래스에서 찾아 실행한다.
@GetMapping에 http://localhost:8080 과 같은 도메인명과 포트는 적지 않는다. 왜냐하면 도메인명과 포트는 서버 설정에 따라 변하기 때문이다.
이제 다시 http://localhost:8080/sbb URL을 호출해 보자.
이번에도 오류가 발생한다. 하지만 404 오류가 아닌 500 오류코드로 바뀐것을 확인할 수 있다.
http://localhost:8080/sbb 호출시 MainController의 index 함수는 호출되었지만 오류가 발생한 것이다.
URL과 매핑된 함수는 결괏값을 리턴해야 하는데 아무런 값도 리턴하지 않기 때문에 오류가 발생한 것이다.
오류를 해결하려면 클라이언트(브라우저)로 응답을 리턴해야 한다.
콘솔 로그를 보면 index 메스드에서 실행한 System.out.println("index");가 실행되어 "index"라는 문자열이 출력된 것을 확인할 수 있다.
다음과 같이 MainController를 수정하자.
package com.mysite.sbb;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MainController {
@GetMapping("/sbb")
@ResponseBody
public String index() {
return "index";
}
}
응답으로 "index"라는 문자열을 브라우저에 출력하기 위해 index 함수의 리턴값을 String으로 변경하고 "index"라는 문자열을 리턴했다.
@ResponseBody 애너테이션 -> URL 요청에 대한 응답으로 문자열을 리턴하라는 의미이다.
만약 @ResponseBody 애너테이션을 생략한다면 "index"라는 이름의 템플릿 파일을 찾게 되는데 이에 대한 내용은 나중에 자세히 알아본다.
오류가 해결되었는지 http://localhost:8080/sbb URL을 호출해 확인해 보자.
이번에는 MainController의 출력 문자열 "index"를 "안녕하세요 sbb에 오신것을 환영합니다."로 바꾸어보자.
그리고 브라우저에서 변경한 문자열이 잘 출력되었는지 확인해 보자.
'IT 일기 (상반기) > SPRING 기초' 카테고리의 다른 글
[점프투스프링부트] 2-04. 엔티티 (2) | 2023.02.23 |
---|---|
[점프투스프링부트] 2-03. JPA (5) | 2023.02.23 |
[점프투스프링부트] 2-01 스프링부트 프로젝트의 구조 (0) | 2023.02.22 |
[점프투스프링부트] 1-05. 스프링부트 도구 설치 (1) | 2023.02.22 |
[점프투스프링부트] 1-04. 스프링부트 맛보기 (0) | 2023.02.21 |