Skip to main content

02B. 컨트롤러 프로젝트의 구조

About 1 minJavaSpringAWScrashcoursejavajdkjdk8streamspringspringframeworkspringbootawsaws-ec2

02B. 컨트롤러 프로젝트의 구조 관련


2-02. 컨트롤러 프로젝트의 구조

점프 투 스프링부트 - WikiDocs

02. 컨트롤러

pahkey/sbb3 - 2-02open in new window

이제 차근차근 스프링부트 게시판(SBB)을 만들면서 스프링부트의 기능을 하나씩 알아가 보자.


URL 매핑

이제 본격적으로 SBB 프로그램을 만들어 보자. 브라우저에서 http://localhost:8080/sbb 페이지를 요청했을 때 "안녕하세요 sbb에 오신것을 환영합니다."라는 문자열을 출력하도록 만들어 보자.

STS의 Boot Dashboard의 시작 버튼을 눌러 로컬서버를 먼저 구동하자.

그리고 그냥 한번 브라우저에서  페이지를 요청해 보자.
그리고 그냥 한번 브라우저에서 http://localhost:8080/sbb 페이지를 요청해 보자.
아마 위처럼 "Not found (404)" 라는 오류가 발생할 것이다. 여기서 404는 HTTP 오류코드 중 하나이다.
아마 위처럼 "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 클래스에서 찾아 실행한다.

@GetMappinghttp://localhost:8080 과 같은 도메인명과 포트는 적지 않는다. 왜냐하면 도메인명과 포트는 서버 설정에 따라 변하기 때문이다.

이제 다시 http://localhost:8080/sbb URL을 호출해 보자.

이번에도 오류가 발생한다. 하지만 404 오류가 아닌 500 오류코드로 바뀐것을 확인할 수 있다.
이번에도 오류가 발생한다. 하지만 404 오류가 아닌 500 오류코드로 바뀐것을 확인할 수 있다.

http://localhost:8080/sbb 호출시 MainControllerindex 함수는 호출되었지만 오류가 발생한 것이다. 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"라는 이름의 템플릿 파일을 찾게 되는데 이에 대한 내용은 나중에 자세히 알아본다.

오류가 해결되었는지  URL을 호출해 확인해 보자.
오류가 해결되었는지 http://localhost:8080/sbb URL을 호출해 확인해 보자.

이번에는 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 프로그램을 만들었다. 축하한다!


이찬희 (MarkiiimarK)
Never Stop Learning.