• Home
  • About
    • on Weekend photo

      on Weekend

      ๐™Ž๐™ฉ๐™ช๐™™๐™ฎ๐™ž๐™ฃ๐™œ

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • ํ•„์‚ฌ
  • Projects

Spring Study - 1

06 Dec 2020

์„น์…˜ 1 ๋ชฉ์ฐจ

  1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  3. View ํ™˜๊ฒฝ์„ค์ •
  4. ๋นŒ๋“œ์™€ ์‹คํ–‰

์ˆ˜๊ฐ• ์ฝ”์Šค๋Š” ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

ํ™˜๊ฒฝ
  • Java 11 ์„ค์น˜
  • IDE: IntelliJ ์„ค์น˜ (์‹ค๋ฌด์—์„œ๋Š” ์ฃผ๋กœ ์ธํ…”๋ฆฌ์ œ์ด๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์—, ์ดํด๋ฆฝ์Šค๋ณด๋‹จ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฒ„์ „์ด๋”๋ผ๋„ ์ธํ…”๋ฆฌ์ œ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธธ ๊ถŒ์žฅํ•˜์‹ฌ. ์ธํ…”๋ฆฌ์ œ์ด๊ฐ€ ๋‹จ์ถ•ํ‚ค ๋“ฑ๋„ ํ›จ์”ฌ ํŽธํ•˜๋‹ค๊ณ  ํ•˜์‹ฌ)
Spring starter
  • main ๋‚ด๋ถ€์— java์™€ test๊ฐ€ ์žˆ๋‹ค. - test์—๋Š” ํ…Œ์ŠคํŠธ ๊ด€๋ จ๋œ ์†Œ์Šค๋“ค์ด ๋“ค์–ด๊ฐ„๋‹ค. test code๋Š” ์ตœ๊ทผ ๊ฐœ๋ฐœ ํŠธ๋ Œ๋“œ์—์„œ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฑฐ์˜ ๋ชจ๋“  ๊ธฐ๋ณธ ์…‹ํŒ…์œผ๋กœ ๋“ค์–ด๊ฐ€์žˆ๋‹ค.
  • build.gradle : ๊ฐœ๋ฐœ์ž ์นœํ™”์ ์ธ ์Šคํ”„๋ง๋ถ€ํŠธ๊ฐ€ ๋‚˜์˜ค๋ฉด์„œ, ์„ค์ •ํŒŒ์ผ๊นŒ์ง€ ๋‹ค ์ œ๊ณต์ด ๋œ๋‹ค. gradle์— ๋Œ€ํ•œ๊ฑด ์ง€๊ธˆ์€ ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ๋‹ค. gradle์ด ๋ฒ„์ „ ์„ค์ •ํ•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋•ก๊ฒจ์˜จ๋‹ค ์ •๋„๊นŒ์ง€๋งŒ ์•Œ๋ฉด ๋œ๋‹ค.
  • sourceCampatibility = โ€˜11โ€™์€ Java 11๋ฒ„์ „๊ณผ ๋งž์Œ์„ ์˜๋ฏธํ•จ.
  • dependencies ๋ณด๋ฉด, ํƒ€์ž„๋ฆฌํ”„thymeleaf์™€ starter-web, ๊ทธ๋ฆฌ๊ณ  junit5๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค. ์ด๋Ÿฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” repositories์˜ mavenCentral()์—์„œ ๋‹ค์šด๋กœ๋“œ๋ฐ›์•„์˜ค๊ฒŒ ๋œ๋‹ค.
  • gitignore๋Š” ๊นƒ์— ์†Œ์ŠคํŒŒ์ผ๋งŒ ๋“ค์–ด๊ฐ€๊ณ  build ํŒŒ์ผ ๋“ฑ์€ ์˜ฌ๋ผ๊ฐ€๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.
HelloSpringApplication
package hello.hellospring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSpringApplication {

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

  • ๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋ฅผ ๊ทธ๋ƒฅ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
  • ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๋ฉด Tomcat started on port(s):8080์ด ๋– ์žˆ๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด์–ด์„œ localhost:8080์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ์—๋ŸฌํŽ˜์ด์ง€๊ฐ€ ๋œจ๋ฉฐ ์Šคํ”„๋ง์ด ์ •์ƒ์ž‘๋™ํ•œ๋‹ค. => ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‚ด์žฅ๋œ Tomcat ์›น์„œ๋ฒ„๋ฅผ ์ž์ฒด์ ์œผ๋กœ ๋„์šฐ๋ฉด์„œ ์Šคํ”„๋ง๋ถ€ํŠธ๋„ ๊ทธ ์œ„์— ๊ฐ™์ด ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๋Š” ๊ฒƒ.
  • ์ธํ…”๋ฆฌ์ œ์ด๋ฅผ ์“ฐ๋‹ค๋ณด๋ฉด ๊ทธ๋ ˆ์ด๋“ค์ด ์ง์ ‘ ์‹คํ–‰๋˜์–ด ๋А๋ฆด ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, Preference > Build Tools์—์„œ Build and run using๊ณผ Run tests using์„ __์ธํ…”๋ฆฌ์ œ์ด__๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋จ.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

build.gradle

build.gradle์„ ์—ด์–ด๋ณด๋ฉด, ์ตœ์ดˆ์— ์„ ํƒํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š”

  1. ํƒ€์ž„๋ฆฌํ”„(html ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„)
  2. ์Šคํƒ€ํ„ฐ์›น
  3. (์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š”) ์Šคํƒ€ํ„ฐํ…Œ์ŠคํŠธ

๋ฐ–์— ์—†๋‹ค.

External Libraries

๊ทธ๋Ÿฌ๋‚˜ External Libraries๋ฅผ ๋“ค์–ด๊ฐ€๋ณด๋ฉด, ๋•ก๊ฒจ์˜จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•Œ๊ณ ๋ณด๋ฉด ๊ต‰์žฅํžˆ ๋งŽ์Œ. junit๊ด€๋ จ๋œ ๊ฒƒ๋„ ์žˆ๊ณ , spring-boot์™€ ๊ด€๋ จ๋œ ๊ฒƒ๋„ ๊ต‰์žฅํžˆ ๋งŽ๋‹ค. ์ง์ ‘ ๋•ก๊ธด ์ ์ด ์—†๋Š”๋ฐ? ์š”์ฆ˜์—๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๋ ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ € ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ํ•„์š”ํ•ด์„œ, ์Šคํ”„๋ง์—์„œ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊นŒ๋‹ญ์— ์ž๋™์œผ๋กœ ๋‹น๊ฒจ์ง„๋‹ค. ์ด๋ฏธ starter-web์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ–ˆ๋˜, ์˜์กดํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์‹น ๋‹ค ์ž๋™์œผ๋กœ ์Šคํ”„๋ง์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž„.

์™ผ์ชฝ ํ•˜๋‹จ ๋„ค๋ชจ๋‘๊ฐœ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์˜ค๋ฅธ์ชฝ์— Gradle์ด ๋œฌ๋‹ค. ์ด๊ฑธ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด Dependencies๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋์— (*)์ด๋ผ๊ณ  ๋ถ™์–ด์žˆ๋Š”๊ฑด ํ‘œํ˜„์ƒ ์ค‘๋ณต์„ ์ œ์™ธํ•ด์ค€ ๊ฒƒ์ž„.
๊ฐ•์‚ฌ๋‹˜์˜ ์žฌ๋ฏธ์žˆ๋Š” ์ด์•ผ๊ธฐ : ๊ณ ๋Œ€์˜ ๊ฐœ๋ฐœ์ž๋“ค์€(ใ…‹ใ…‹ใ…‹) ์›น ์„œ๋ฒ„์™€ ๊ฐœ๋ฐœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด์„œ, ํ†ฐ์บฃ ์„œ๋ฒ„ ๋“ค์–ด๊ฐ€์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ง‰ ์„ค์น˜ํ•˜๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด์ œ๋Š” ๊ทธ๋ƒฅ ๋‚ด์žฅํ˜•(์ž„๋ฒ ๋””๋“œ) ์›น์„œ๋ฒ„๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•˜๋‚˜๋ฅผ ๋นŒ๋“œํ•ด์„œ ์›น์„œ๋ฒ„์— ์˜ฌ๋ฆฌ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

Logging

External Libraries์—์„œ ํ†ฐ์บฃ์„ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด embed-core๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ํƒ€์ž„๋ฆฌํ”„๋ฅผ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด org.thymeleaf ๋“ฑ ๊ด€๋ จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๊ฐ–๊ณ  ์žˆ๋Š”๊ฒŒ ๋ณด์ธ๋‹ค. ์Šคํ”„๋ง๋ถ€ํŠธ๋ฅผ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด autoconfigure, logging, spring-core๊นŒ์ง€ ์‹น ์„ธํŒ…์ด ๋˜์–ด์„œ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • logging : ํ˜„์—…์—์„œ ์ผํ•˜๋Š” ๋ถ„๋“ค์€ system.out.println์€ ์•ˆ์“ฐ๊ณ  ๊ผญ log๋กœ ์ถœ๋ ฅ์„ ํ•ด์•ผํ•œ๋‹ค. ๋กœ๊ทธ๋กœ ๋‚จ๊ฒจ์•ผ ์‹ฌ๊ฐํ•œ ์—๋Ÿฌ๋งŒ ๋”ฐ๋กœ ๋ชจ์•„๋ณผ ์ˆ˜ ์žˆ๊ฑฐ๋‚˜, ๋กœ๊ทธํŒŒ์ผ๋“ค์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฐ•์˜์—์„œ๋Š” system.out.println๋„ ๋งŽ์ด ์“ฐ๊ฒ ๋‹ค. logging์„ ๋“ค์–ด๊ฐ€๋ณด๋ฉด slf4j๊ณผ logback์ด ์žˆ๋‹ค. ์‹œ๋Œ€์— ๋”ฐ๋ผ ํŠธ๋ Œ๋“œ๊ฐ€ ๋ฐ”๋€Œ๊ธด ํ•˜๋Š”๋ฐ, slf4j๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๊ณ , ๋กœ๊ทธ ๊ตฌํ˜„์ฒด๋Š” logback์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์š”์ฆ˜์—๋Š” ์ด ๋‘๊ฐ€์ง€ ์กฐํ•ฉ์„ ๋งŽ์ด ์“ฐ๋‹ˆ๊นŒ, ์Šคํ”„๋ง์—์„œ๋„ logging์„ ๋‹น๊ธฐ๋ฉด ์ž๋™์œผ๋กœ ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹น๊ฒจ์˜จ๋‹ค. logging์— ๊ด€๋ จํ•ด์„œ๋Š” slf4j๊ณผ logback์„ ๊ฒ€์ƒ‰ํ•ด๋ณด์‹œ๋ฉด ๋œ๋‹ค.
Logging

External Libraries์—์„œ test๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ์ž๋ฐ” ์ง„์˜์—์„œ๋Š” junit์„ ์ฃผ๋กœ ์“ด๋‹ค. ์ตœ๊ทผ์— junit5๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ถ”์„ธ์ด๋‹ค. mockito๋ผ๋˜๊ฐ€, assertj๋ผ๋˜๊ฐ€๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๋Š” test๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ฉด,

  • ์Šคํ”„๋ง ๋ถ€ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - spring-boot-start-web - ํ†ฐ์บฃ, ์Šคํ”„๋ง ์›น MVC
    • ํƒ€์ž„๋ฆฌํ”„ ํ…œํ”Œ๋ฆฟ ์—”์ง„(view)
    • ์Šคํ”„๋ง๋ถ€ํŠธ์Šคํƒ€ํ„ฐ(boot + core + logging)๊ฐ€ ์žˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - junit์ด ๊ธฐ๋ณธ์ด๊ณ , mockito(๋ชฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ), assertj(ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ), spring-test(์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ง€์›)๊ฐ€ ์žˆ๋‹ค. โ€”

    View ํ™˜๊ฒฝ์„ค์ •

    Welcome Page ๋งŒ๋“ค๊ธฐ

    index.html๋งŒ ๋„ฃ์œผ๋ฉด ์•Œ์•„์„œ ์›ฐ์ปดํŽ˜์ด์ง€๊ฐ€ ๋œ๋‹ค.
    resources -> static์— index.html ์ƒ์„ฑํ•ด์ค€๋‹ค.

  • ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” Welcome Page ๊ธฐ๋Šฅ
    • Welcome page์— ๋Œ€ํ•ด ์ฐพ๋Š” ๋ฒ•
      spring.io์— ์ ‘์†, Projects ์นดํ…Œ๊ณ ๋ฆฌ -> Learn์„ ํด๋ฆญํ•˜๋ฉด ๋‹ค์–‘ํ•œ ์„น์…˜์ด ๋‚˜์˜ค๋ฏ€๋กœ, ๊ฒ€์ƒ‰ํ•ด์„œ ์ฐพ์œผ๋ฉด ๋จ. index.html์„ ์ฐพ๊ณ , ๋งŒ์•ฝ ๋ชป์ฐพ์œผ๋ฉด index ํ…œํ”Œ๋ฆฟ์„ ์ฐพ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฉ”๋‰ด์–ผ์—์„œ ์‚ฌ์šฉ๋ฒ•์„ ๊ฒ€์ƒ‰์„ ํ•  ์ค„ ์•Œ์•„์•ผ ํ•œ๋‹ค.
  • ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ index.html์„ ๊พธ๋ฐ€ ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ•ด๋‹น ๊ฐ•์˜์—์„  Thymeleaf๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. ์Šคํ”„๋ง๋ถ€ํŠธ ๋ฉ”๋‰ด์–ผ์—์„œ Template Engines๋ฅผ ๊ฒ€์ƒ‰ํ•ด๋„ ๋‚˜์˜จ๋‹ค. ์ฝ์–ด๋ณด๋ฉด, FreeMarker, Groovy, Thymeleaf, Musacho๋ผ๋Š”๊ฑธ ๋งŽ์ด ์“ด๋‹ค๊ณ  ๋‚˜์˜ด.
์ปจํŠธ๋กค๋Ÿฌ
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฒซ ๋ฒˆ์งธ ์ง„์ž…์ ์ด __์ปจํŠธ๋กค๋Ÿฌ__์ด๋‹ค. hello.hellospring > controller ์— Controller ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๊ณ , ์ž๋ฐ” ํด๋ž˜์Šค๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด์ค€๋‹ค.
  • @Controller๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค.
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {

    @GetMapping("hello") // ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ '/hello'๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์ค€๋‹ค.
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

@GetMapping(โ€œhelloโ€)๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ /hello ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. model.addAttribute์—์„œ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” attributeName, ๋‘๋ฒˆ์งธ ์ธ์ž๋Š” attributeValue๊ฐ€ ๋œ๋‹ค.

  • Template>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>
  • ์ด์ œ hello.html์—์„œ ๋„˜์–ด์˜จ attributeDate๋Š” ${data}๋กœ ๋„˜์–ด์˜จ๋‹ค. p ํƒœ๊ทธ์— ๋ถ™์–ด์žˆ๋Š” th๋Š” ํƒ€์ž„๋ฆฌํ”„๋ฅผ ์˜๋ฏธํ•จ.
    ์žฌ์‹œ์ž‘ ํ›„ ๋กœ์ปฌํ˜ธ์ŠคํŠธ 8080์— ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋…•ํ•˜์„ธ์š”. hello!! ๊ฐ€ ๋œฌ๋‹ค. ์™œ ๊ทธ๋ ‡๊ฒŒ ๋˜๋Š”๊ฑธ๊นŒ?
ํƒ€์ž„๋ฆฌํ”„ ํ…œํ”Œ๋ฆฟ์—”์ง„์˜ ๋™์ž‘
  1. ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ์ปฌํ˜ธ์ŠคํŠธ๋ฅผ ํ†ตํ•ด /hello๋ฅผ ๋˜์ง€๋ฉด, ์Šคํ”„๋ง ๋‚ด์žฅ ํ†ฐ์บฃ ์„œ๋ฒ„๊ฐ€ ์Šคํ”„๋ง์—๊ฒŒ /hello๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ๋ฌผ์–ด๋ณธ๋‹ค.
  2. [์Šคํ”„๋ง] ์Šคํ”„๋ง์— @GetMapping(โ€œhelloโ€)๊ฐ€ ์žˆ์œผ๋‹ˆ helloController๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰์ด ๋˜๋Š”๋ฐ, ์ธ์ž์ธ Model model์€ ์Šคํ”„๋ง์ด ๋ชจ๋ธ์ด๋ž€ ๊ฑธ ๋งŒ๋“ค์–ด์„œ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.
  3. ์ด๋•Œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ __key๋Š” โ€œdataโ€๊ณ  value๋Š” โ€œhelloโ€__์ด๋ฏ€๋กœ, ์Šคํ”„๋ง์€ ๋ชจ๋ธ์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. => model(data:hello!!)
  4. ๋ฉ”์†Œ๋“œ ๋งˆ์ง€๋ง‰์— ๋ฆฌํ„ด๊ฐ’์œผ๋กœ โ€œhelloโ€๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. ์ด๋Š” __ํ…œํ”Œ๋ฆฟ์—์„œ hello.html์„ ์ฐพ์•„์„œ ๋ Œ๋”๋งํ•˜๋ผ๋Š” ์˜๋ฏธ__์ด๋‹ค. ์ด๋•Œ ๋ชจ๋ธ(Model model)๋„ ๊ฐ™์ด ํ™”๋ฉด์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
    • ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฆฌํ„ด ๊ฐ’์œผ๋กœ __๋ฌธ์ž__๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ทฐ ๋ฆฌ์กธ๋ฒ„(viewResolver)๊ฐ€ ํ™”๋ฉด์„ ์ฐพ์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, ๊ธฐ๋ณธ viewName ๋งคํ•‘์€ resources:templates/+{ViewName}+.html์ด๋‹ค. ์ด์ œ ํ…œํ”Œ๋ฆฟ hello.html์„ ์ฐพ์•„์„œ ํƒ€์ž„๋ฆฌํ”„ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ

  1. Windows์˜ ๊ฒฝ์šฐ, ํ”„๋กœ์ ํŠธ ํด๋”์˜ gradlew.bat์„ ํด๋ฆญํ•˜๋ฉด ๋นŒ๋“œ๊ฐ€ ๋˜์–ด build ํด๋”๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. (ํ˜น์€ cmd์—์„œ gradlew build๋ฅผ ์ž…๋ ฅ)
  2. ์ดํ›„ build>libs์—์„œ jarํŒŒ์ผ์„ ์‹คํ–‰(java -jar hello-spring-0.0.1-SNAPSHOT.jar)์‹œํ‚ค๋ฉด ๋œ๋‹ค. ์‹ค๋ฌด์—์„œ๋Š” ํ•ด๋‹น jar ํŒŒ์ผ์„ ์„œ๋ฒ„์— ๋„ฃ๊ณ  ์‹คํ–‰์‹œ์ผœ spring ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค!
  3. ๋นŒ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ./gradlew clean build ์ž…๋ ฅ.

[์ง„ํ–‰๋‚ด์—ญ]
12.06 ~๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ดํŽด๋ณด๊ธฐ ์ •๋ฆฌ
12.07 ~๋นŒ๋“œ์™€ ์‹คํ–‰ ์ •๋ฆฌ



springbackend Share Tweet +1