02B. 컨트롤러 프로젝트의 구조
02B. 컨트롤러 프로젝트의 구조 관련
02. 컨트롤러
이제 차근차근 스프링부트 게시판(SBB)을 만들면서 스프링부트의 기능을 하나씩 알아가 보자.
URL 매핑
이제 본격적으로 SBB 프로그램을 만들어 보자. 브라우저에서 http://localhost:8080/sbb
페이지를 요청했을 때 "안녕하세요 sbb에 오신것을 환영합니다."라는 문자열을 출력하도록 만들어 보자.
STS의 Boot Dashboard의 시작 버튼을 눌러 로컬서버를 먼저 구동하자.
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을 호출해 보자.
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"라는 이름의 템플릿 파일을 찾게 되는데 이에 대한 내용은 나중에 자세히 알아본다.
이번에는 MainController
의 출력 문자열 "index"
를 "안녕하세요 sbb에 오신것을 환영합니다."로 바꾸어보자.
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 "안녕하세요 sbb에 오신것을 환영합니다.";
}
}
Spring Boot Devtools와 Live Reload 기능에 의해 서버는 물론 브라우저도 리로딩되어 변경된 사항을 추가 작업 없이 즉시 확인할 수 있을 것이다.
첫번째 프로그램 완성
여러분의 첫번째 SBB 프로그램을 만들었다. 축하한다!