JavaRush /Java Blog /Random-KO /8๋ถ€. spring-boot๋กœ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑํ•˜๊ธฐ
Professor Hans Noodles
๋ ˆ๋ฒจ 41

8๋ถ€. spring-boot๋กœ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑํ•˜๊ธฐ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์ด ์ž๋ฃŒ๋Š” "์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฐœ๋ฐœ ์ž…๋ฌธ" ์‹œ๋ฆฌ์ฆˆ์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ด์ „ ๊ธฐ์‚ฌ: 8๋ถ€. spring-boot์—์„œ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 1Spring-MVC๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ MVC ๊ตฌํ˜„ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด์ž. ์ด๋ฅผ ์œ„ํ•ด spring-boot์—์„œ ์ž‘์€ Hello World ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ ์ง์ ‘ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹จ๊ณ„๋ณ„ ์ง€์นจ์„ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•œ ๋‹ค์Œ ์ด๋ฅผ ๋ถ„์„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: IntelliJ IDEA์—์„œ ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ

ํŒŒ์ผ -> ์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ -> ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ... ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ด๋ฆฌ๋Š” ์ฐฝ์˜ ์™ผ์ชฝ ๋ฉ”๋‰ด์—์„œ Spring ์ดˆ๊ธฐํ™”๋ฅผ ์„ ํƒํ•˜๊ณ  ํ”„๋กœ์ ํŠธ SDK๋ฅผ ์„ ํƒํ•œ ํ›„ ์ดˆ๊ธฐํ™” ์„œ๋น„์Šค URL ์˜ต์…˜์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‘ก๋‹ˆ๋‹ค. 8๋ถ€. spring-boot์—์„œ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 2๋‹ค์Œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์„ธ์š”. ๋‹ค์Œ ์ฐฝ์—์„œ๋Š” ํ”„๋กœ์ ํŠธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Maven ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ ํ˜• - Maven ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ทธ๋ฃน ๋ฐ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ž…๋ ฅํ•œ ํ›„ 8๋ถ€. spring-boot์—์„œ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 3๋‹ค์Œ์„ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค. ๋‹ค์Œ ์ฐฝ์—์„œ๋Š” ์‚ฌ์šฉํ•  Spring Framework ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐ€์ง€๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:
  • Spring Web์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์ด ๊ตฌ์„ฑ ์š”์†Œ์—๋Š” Spring MVC๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • Thymeleaf - ์†Œ์œ„ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ž…๋‹ˆ๋‹ค. Java์—์„œ HTML ํŽ˜์ด์ง€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ
8๋ถ€. spring-boot์—์„œ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 48๋ถ€. spring-boot์—์„œ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 5๋‹ค์Œ ์ฐฝ์—์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๊ณผ ์œ„์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. 8๋ถ€. spring-boot๋กœ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 6๋งˆ์นจ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 8๋ถ€. spring-boot๋กœ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 7์—ฌ๊ธฐ์—์„œ๋Š” pom.xml - ๋ฐฐํฌ ์„ค๋ช…์ž๋ผ๋Š” ๋‘ ๊ฐœ์˜ ํŒŒ์ผ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ”„๋กœ์ ํŠธ๋กœ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Maven์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋˜์—ˆ์œผ๋ฉฐ pom.xml์€ ์ด ๋นŒ๋“œ ์‹œ์Šคํ…œ์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. Java ํด๋ž˜์Šค - MvcDemoApplication. ์ด๊ฒƒ์€ ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”์ธ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์ด ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ด ํด๋ž˜์Šค์˜ ์ฝ”๋“œ์™€ pom.xml ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. MvcDemoApplication:
@SpringBootApplication
public class MvcDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MvcDemoApplication.class, args);
    }

}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.javarush</groupId>
    <artifactId>mvc_demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mvc_demo</name>
    <description>Spring MVC Demo</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2๋‹จ๊ณ„. ์›นํŽ˜์ด์ง€ ์ƒ์„ฑ

์šฐ๋ฆฌ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํŽ˜์ด์ง€์ธ index.html์ด ์žˆ๊ณ  ๊ทธ ์•ˆ์— ํ™˜์˜ ํŽ˜์ด์ง€์ธ Greeting.html์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์‚ฌ๋ง ํŽ˜์ด์ง€์—๋Š” ์ธ์‚ฌ๋ง์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. URL ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด Greeting.html ํŽ˜์ด์ง€์— ์ธ์‚ฌ๋ง ์ด๋ฆ„์„ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”์ธ ํŽ˜์ด์ง€์ธ index.html์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Main page</title>
</head>
<body>
    <p>Get your greeting <a href="/greeting">here</a></p>
</body>
</html>
์ด์ œ Greeting.html ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>
์—ฌ๊ธฐ์„œ๋Š” ๋น„์ •ํ˜• HTML ํŽ˜์ด์ง€์—์„œ ํƒœ๊ทธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒœ๊ทธ <p th:text="'Hello, ' + ${name} + '!'" /> ์†์„ฑ์€ Thymeleaf ํ…œํ”Œ๋ฆฟ ์—”์ง„์˜ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋•๋ถ„์— ํƒœ๊ทธ์˜ ๊ฐ’์€ "Hello"๋ผ๋Š” ํ…์ŠคํŠธ + Java ์ฝ”๋“œ์—์„œ ์„ค์ •ํ•  ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค .thppname

3๋‹จ๊ณ„: ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ

mvc_demo ํŒจํ‚ค์ง€ ๋‚ด์—์„œ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ์•ˆ์— ์ปจํŠธ๋กค๋Ÿฌ HelloWorldController๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
@Controller
public class HelloWorldController {

   @RequestMapping(value = "/greeting")
   public String helloWorldController(@RequestParam(name = "name", required = false, defaultValue = "World") String name, Model model) {
       model.addAttribute("name", name);
       return "greeting";
   }

}
ํ•œํŽธ์œผ๋กœ๋Š” ์ฝ”๋“œ๊ฐ€ ๊ฑฐ์˜ ์—†์ง€๋งŒ ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ๋งŽ์€ ์ผ์ด ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„์„์„ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. @Controller ์ฃผ์„์€ ์ด ํด๋ž˜์Šค๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Spring์˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํŠน์ • ์ฃผ์†Œ์— ๋Œ€ํ•œ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํด๋ž˜์Šค์—๋Š” @RequestMapping(value = "/greeting")์ด๋ผ๋Š” ์ฃผ์„์ด ํ‘œ์‹œ๋œ helloWorldController ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฃผ์„์€ ์ด ๋ฉ”์„œ๋“œ๊ฐ€ /greeting ์ฃผ์†Œ์— ๋Œ€ํ•œ HTTP GET ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์ฆ‰, ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ /greeting๋กœ ์ด๋™ํ•˜๋ฉด ์ด ๋ฐฉ๋ฒ•์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Spring-MVC์— ๋”ฐ๋ฅด๋ฉด ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ๋Š” ๋ทฐ์˜ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ Spring์€ HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜๋  ๋™์ผํ•œ ์ด๋ฆ„์˜ html ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ, ์šฐ๋ฆฌ์˜ ๋ฉ”์†Œ๋“œ๋Š” ์ด์ „์— ๋งŒ๋“  ์›นํŽ˜์ด์ง€์˜ ์ด๋ฆ„์ธ Greeting์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๋ฐฉ๋ฒ•์€ 2๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ 1: @RequestParam(name = "name", ํ•„์ˆ˜ = false, defaultValue = "World") ๋ฌธ์ž์—ด ์ด๋ฆ„. @RequestParam ์ฃผ์„์€ String name ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ url ๋งค๊ฐœ๋ณ€์ˆ˜์ž„์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์„ ๊ด„ํ˜ธ๋Š” URL์—์„œ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์„ ํƒ์‚ฌํ•ญ(ํ•„์ˆ˜ = false)์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ๋ฌธ์ž์—ด ์ด๋ฆ„ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์€ World(defaultValue = "World")๊ฐ€ ๋˜๊ณ , ์กด์žฌํ•˜๋ฉด ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” URL์—์„œ๋Š” ์ด๋ฆ„(name = "name")์ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๋‚ด์šฉ์ด ๋งŽ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ํ‘œ๋Š” /greeting ์ฃผ์†Œ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์˜ต์…˜์— ๋Œ€ํ•œ ๋ฌธ์ž์—ด ์ด๋ฆ„ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค(URL์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์—†์Œ).
์˜ˆ์‹œ URL ๋ฌธ์ž์—ด ์ด๋ฆ„ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’
/์ธ์‚ฌ ์„ธ๊ณ„
/greeting?name=์•„๋ฏธ๊ณ  ์•„๋ฏธ๊ณ 
/์ธ์‚ฌ๋ง?name=์กฐ๋ฅด ์กฐ๋ฅด
๋งค๊ฐœ๋ณ€์ˆ˜ 2: ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ชจ๋ธ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ์†์„ฑ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์†์„ฑ์—๋Š” ์ด๋ฆ„๊ณผ ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค-๊ฐ’ ์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Java ์ฝ”๋“œ์—์„œ HTML ํŽ˜์ด์ง€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” MVC ์šฉ์–ด๋กœ ๋ชจ๋ธ์—์„œ ๋ทฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์ค„์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. Java์—์„œ html๋กœ ๋˜๋Š” ๋ชจ๋ธ์—์„œ ๋ทฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ฉ”์†Œ๋“œ์˜ ๋ณธ๋ฌธ์—๋Š” ๋‹ค์Œ ํ–‰์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. model.addAttribute("name", name); ์—ฌ๊ธฐ์„œ๋Š” name์ด๋ผ๋Š” ์ƒˆ ์†์„ฑ์„ ์ƒ์„ฑํ•˜๊ณ  ์—ฌ๊ธฐ์— name ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ์šฐ๋ฆฌ๋Š” ํƒœ๊ทธ์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. <p th:text="'Hello, ' + ${name} + '!'" /> p ํƒœ๊ทธ์˜ ๊ฐ’์€ "Hello"๋ผ๋Š” ํ…์ŠคํŠธ + Java ์ฝ”๋“œ์—์„œ ์„ค์ •ํ•  name ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ๋ผ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. model.addAttribute("name", name);

5๋‹จ๊ณ„. ์‹คํ–‰

์‹œ์ž‘ํ•˜๋ ค๋ฉด MvcDemoApplication ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 8๋ถ€. spring-boot๋กœ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 9์‹œ์ž‘ ๋กœ๊ทธ์—์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํฌํŠธ 8080์—์„œ ์‹œ์ž‘๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ http://8๋ถ€. spring-boot๋กœ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 10 ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. localhost:8080 : 8๋ถ€. spring-boot์—์„œ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 11์—ฌ๊ธฐ์— index.html ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋งํฌ๋ฅผ ๋”ฐ๋ผ๊ฐ€์„ธ์š”. 8๋ถ€. spring-boot๋กœ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 12์ด ์ „ํ™˜ ์ค‘์— ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. URL์„ ํ†ตํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์ฃผ์„์— ๋ช…์‹œ๋œ ๋Œ€๋กœ name ์†์„ฑ์˜ ๊ฐ’์€ ๊ธฐ๋ณธ๊ฐ’์ธ World๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ URL์„ ํ†ตํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 8๋ถ€. spring-boot๋กœ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ - 13๋ชจ๋“  ๊ฒƒ์ด ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ name ๋ณ€์ˆ˜์˜ ๊ฒฝ๋กœ๋ฅผ ์ถ”์ ํ•ด ๋ณด์‹ญ์‹œ์˜ค.
  1. ์‚ฌ์šฉ์ž๊ฐ€ url์„ ํ†ตํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„ = Amigo -> ๊ฐ’์„ ์ „๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์šฐ๋ฆฌ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ , name ๋ณ€์ˆ˜๋ฅผ ์ˆ˜๋ฝํ•˜๊ณ , name ์ด๋ฆ„๊ณผ ํ—ˆ์šฉ๋œ ๊ฐ’์œผ๋กœ ๋ชจ๋ธ ์†์„ฑ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ->
  3. ๋ชจ๋ธ์—์„œ ์ด ๋ฐ์ดํ„ฐ๋Š” View, Greeting.html ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฒŒ ๋‹ค์•ผ!

์˜ค๋Š˜ ์šฐ๋ฆฌ๋Š” MVC(๋ชจ๋ธ - ๋ทฐ - ์ปจํŠธ๋กค๋Ÿฌ)๋ผ๋Š” ๋‹ค์†Œ ํฌ๊ณ  ํฅ๋ฏธ๋กœ์šด ์ฃผ์ œ๋ฅผ ์†Œ๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹œ๋ฆฌ์ฆˆ์˜ ๋งˆ์ง€๋ง‰์ด๋ฉฐ, ๊ทธ ๋ชฉ์ ์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์•Œ์•„์•ผ ํ•  ์‚ฌํ•ญ์„ ์†Œ๊ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ด€์‹ฌ ์žˆ๋Š” ์ฃผ์ œ๋ฅผ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. ์ €ํฌ๊ฐ€ ํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค!

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION