기록하는 공부

[인프런/강의 복습] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (2) 본문

Language/Java

[인프런/강의 복습] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (2)

SS_StudySteadily 2023. 6. 26. 23:48
728x90
반응형

 

※ 본 포스팅은 강의를 듣고 개인적으로 정리한 게시글이므로 이 점 참고 바랍니다.

 

https://inf.run/qdEN

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

 

 

 

 


 

정적 컨텐츠

 

정적 컨텐츠란 파일을 그대로 서버에 올리는 것을 말한다.

 

 

https://docs.spring.io/spring-boot/docs/2.7.13/reference/htmlsingle/#deployment

 

Spring Boot Reference Documentation

This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration, and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly spe

docs.spring.io

 

 

src - resources - static 폴더에서 hello-static.html을 만들고 아래와 같이 소스코드를 입력한다.

 

hello-static.html 생성

 

 

<!DOCTYPE HTML>
<html>
<head>
    <title>static content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>A

 

 

서버를 다시 실행시키고 웹 브라우저에 접속해 보자.

 

http://localhost:8080/hello-static.html에 접속하자 html 확인 가능

 

 

 

 


 

MVC와 템플릿 엔진

 

MVC란 Model, View, Controller를 말한다.

View는 화면과 관계된 일만, Model과 Controller는 비즈니스 로직과 관련된 일을 하도록 나누는 것이다.

 

 

src - main - java - controller 디렉터리 하위에 생성했던 HelloController 파일에 소스코드를 추가 작성한다.

이는 MVC 동작 구성을 파악하기 위해서이다.

 

HelloController 파일

 

 

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

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

 

 

src - resources - templates 디렉터리 하위에 hello-template.html 파일을 만들고 아래 사진과 같이 코드를 작성한다.

templates에 hello-template.html을 만들면

위 HelloController에서 추가로 작성한 코드에서 이를 불러온다.

 

hello-template.html 파일 작성

 

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

 

 

서버를 실행시키고 hello-mvc로 웹페이지 접속을 시도했는데 에러가 발생했다.

그 이유는 name에 해당하는 value값을 전해주지 않았기 때문이다.

 

 

에러 발생

 

 

그래서 GET 방식으로 파라미터를 넘겨주면 아래 사진과 같이 성공적으로 동작함을 알 수 있다.

http://localhost:8080/hello-mvc?name=spring! 입력

 

 

성공적으로 출력

 

개발자 도구를 열어 코드를 확인

 

 

 


 

API

 

@ResponseBody : 컨트롤러(Controller) 메서드에서 해당 메서드의 반환 값을 HTTP 응답 본문으로 전송하는 데 사용

- 뷰 리졸버( viewResolver )를 사용하지 않음

- HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)

 

 

HelloController 파일에 아래와 같은 소스 코드를 추가 작성한다.

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

 

성공적으로 출력

 

 

개발자 도구를 열어 코드를 확인 (html 코드 없음)

 

 

이번에는 객체를 반환해 보자.

아래와 같이 코드를 입력한다.

@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;
        }
    }

 

 

JSON(키 : 속성) 형태로 출력되는 것을 확인할 수 있다.

객체 형태로 반환되어 출력됨

 

728x90
반응형