상세 컨텐츠

본문 제목

[스프링 3팀] 스프링 입문 섹션 0~3

24-25/Spring 3

by Igumi 2024. 9. 27. 10:00

본문

728x90

 


정적 콘텐츠

정적 콘텐츠의 개념
→ 서버에 저장되어 있는 파일을 웹 브라우저를 통해 그대로 보여주는 것

 

 

Spring Boot에서 제공하는 정적 콘텐츠 기능

 

📍 resources/static 하위에 HTML 파일 생성

 

웹 브라우저가 톰켓 서버에 localhost:8080/hello-static.html 요청

컨트롤러hello-static을 찾음static 폴더에서 hello-static을 찾음

→  파일을 찾으면 반환 

 

 

 

동적 콘텐츠

동적 콘텐츠의 개념
→ HTML을 서버에서 변형하여 보여주는 것
MVC와 템플릿 엔진을 이용하는 방식, API를 이용하는 방식

 

 

 

MVC와 템플릿 엔진

MVC의 개념
Model-View-Controller로 역할 분리

Model ▶ 화면에 필요한 데이터를 화면으로 전달
View ▶ 화면 처리
Controller ▶ 서버 관련(비즈니스 로직 etc) 관리

 

 

📍  Controller (MVC ver)

// controller/HelloController.java

@Controller
public class HelloController {
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "hello-template";
    }

 

→ return 값인 hello-template을 찾음

 

 

📍 View (MVC ver)

<!-- resources/templates/hello-template.html -->

<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>

 

 

→ 템플릿 엔진으로 동작하면 hello! empty가 'hello ' + ${name}로 치환

 

 

 

 

웹 브라우저가 톰켓 서버에 localhost:8080/hello-mvc 요청

helloController(컨트롤러)hello-mvc와 매핑되어 있는 메소드를 찾아 데이터 전달

viewResolver뷰를 찾아주고 템플릿 연결

템플릿 엔진에서 HTML을 변환하여 웹 브라우저에 반환

 

 

 

API

API의 개념
JSON 형태의 데이터를 클라이언트에게 전달하는 것

@ResponseBody
를 사용, viewResolver는 사용 X
HTTP의 BODY에 문자 내용 직접 반환

 

 

📍  Controller (API ver)

// controller/HelloController.java

@Controller
public class HelloController {
    @GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) { 
    	return "hello" + name; 
    }
}

 

1.  @ResponseBody 이용하여 문자열 반환

→ BODY에 내가 작성한 문자열 출력

 

// controller/HelloController.java

@Controller
public class HelloController {
    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    static class Hello {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

 

2.  @ResponseBody 이용하여 객체 반환

JSON 형태로 객체 반환

 

 

 

 

웹 브라우저가 톰켓 서버에 localhost:8080/hello-api 요청

 helloController(컨트롤러) hello-api와 매핑되어 있는 메소드를 찾았는데 @ResponseBody 존재

① 기본 문자 처리 SttringHttpMessageConverter 기본 객체 처리 MappingJackson2HttpMessageConverter

변환된 데이터는 HTTP 응답 본문에 작성

→ 웹 브라우저에 응답 반환

 

 

 

 

 

 


Blank Quiz

 

1. ( 정적 콘텐츠 )는 서버에 저장되어 있는 파일을 웹 브라우저를 통해 그대로 보여주는 것이다.

2. ( 동적 콘텐츠 )는 HTML을 서버에서 변형하여 보여주는 것이다.

3. Spring Boot에서 제공하는 정적 컨텐츠 기능을 이용하려면 HTML 파일을 ( resources/static ) 폴더에 생성해야 한다.

4. 스프링에서는 URL과 메소드를 연결하기 위해 ( @GetMapping ) 어노테이션을 사용한다.

5. MVC는 ( Model-View-Controller )이다.

6. MVC에서 ( Model )은 화면에 필요한 데이터를 전달하는 역할을 한다.

7-1. API에서 ( @ResponseBody ) 어노테이션은 문자열을 직접 HTTP의 BODY에 반환하기 위해 사용한다.

7-2. 위 어노테이션을 사용하면, ( viewResolver )를 사용하지 않고 HTTP의 BODY데이터를 직접 반환한다.

8. API에서 객체는 주로 ( Json ) 형태로 변환되어 클라이언트에 전달된다.

 

 

 

Programming Quiz

 

1. 오늘 할 일을 입력받고 오늘의 할 일: xxx 형식의 메시지를 반환하는 프로그램이 되도록 빈 곳을 채워넣으시오.
    (단, 입력이 없을 경우에는 오늘의 할 일: 스프링 공부하기가 출력되도록 한다.)

@Controller
public class TodoController {
    @GetMapping("to-do")
       // 채워넣기
}
<html xmlns:th="http://www.thymeleaf.org">
<body>
<!-- 채워넣기 -->
</body>
</html>

 

 

2. 숫자 2개를 입력받아 {"sum": 결과} 형식의 메시지를 반환하는 프로그램이 되도록 빈 곳을 채워넣으시오.
    (단, HTML 파일은 존재한다고 가정한다.)

@Controller
public class CalculatorController {

    @GetMapping("add-api")
    @ResponseBody
    public Result addApi(/* 채워넣기 */) {
        // 채워넣기
    }

    static class Result {
        // 채워넣기
    }
}

 

 

 


 

 

[출처] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

(섹션3 스프링 웹 개발 기초)

 

Corner Spring 3

ⓒ UMI

728x90

관련글 더보기