본문 바로가기

WINK-(Web & App)/Spring Boot 스터디

[2025 겨울방학 스프링 스터디] 윤아영 #1주차

반응형


1. 프로젝트 생성

사전 준비 : Java, IntelliJ / Eclipse 설치

 

https://start.spring.io 에서 스프링 프로젝트 생성

 

다운로드한 파일을 IntelliJ에서 실행한다.

IntelliJ에서 main 파일을 실행하면 다음과 같이 localhost:8080 에서 실행된다.

 

chrome에서 localhost:8080을 접속했을 때 다음과 같은 화면이 나온다.

 

2. View 환경설정

resources/static/index.html

<!DOCTYPE HTML>
<html>
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    Hello
    <a href="/hello">hello</a>
</body>
</html>

 

static/index.html을 생성하면 스프링 부트가 Welcome page 기능을 제공한다.

 

localhost:8080 에 접속하면 다음과 같은 화면이 나온다.

 

java/hello.hello_spring/controller/HelloController

package hello.hello_spring.controller;

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

@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        return "hello";
    }

}

 

resources/templates/hello.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'안녕하세요. ' + ${data}">안녕하세요. 손님</p>
</body>
</html>

 

localhost:8080/hello 에 접속하면 다음과 같은 화면이 나온다.

java/hello.hello_spring/controller/HelloController

model.addAttribute("data", "hello!!");

 

resources/templates/hello.html

<p th:text="'안녕하세요. ' + ${data}">안녕하세요. 손님</p>

 

data 의 값이 "hello!!" 로 설정된다.

 

 

3. 스프링 웹 개발 기초

 

1) 정적 컨텐츠 : 파일을 웹브라우저에 그대로 전달하는 것

 

스프링 부트에서는 정적 컨텐츠 기능을 제공한다.

 

resources/static/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>

 

localhost:8080/hello-static.html

 

 

2) MVC와 템플릿 엔진 : html을 서버에서 동적으로 프로그래밍해서 전달하는 것

 

MVC : Model, View, Controller

 

java/hello.hello_spring/controller/HelloController

package hello.hello_spring.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";
    }
}

 

resources/templates/hello-template.html

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

 

 

p 태그 안 hello! empty는 서버가 없을 때 파일을 실행하면 화면에 나타나고, 서버에서 실행했을 때에는 th:text로 치환된다.

 

localhost:8080/hello-mvc

 

 

@RequestParam("name") 에서 required=true가 기본이므로 필수로 존재해야 한다.

 

localhost:8080/hello-mvc?name=spring

 

 

3) API : json 형식으로 데이터를 전달하는 것

 

java/hello.hello_spring/controller/HelloController

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

 

localhost:8080/hello-string?name=spring

 

java/hello.hello_spring/controller/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;
    }
}

 

localhost:8080/hello-api?name=spring!!!

 

@ResponseBody : HTTP의 BODY에 문자 내용을 직접 반환한다. 'viewResolver' 대신에 'HttpMessageConverter'가 동작한다.

반응형