Bibi's DevLog ๐Ÿค“๐ŸŽ

[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ๊ฐ•์˜ ์†Œ๊ฐœ, ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ดํŽด๋ณด๊ธฐ, Viewํ™˜๊ฒฝ์„ค์ • ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ/Spring ์Šคํ”„๋ง

[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ๊ฐ•์˜ ์†Œ๊ฐœ, ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ดํŽด๋ณด๊ธฐ, Viewํ™˜๊ฒฝ์„ค์ •

๋น„๋น„ bibi 2021. 3. 2. 23:48

์ธํ”„๋Ÿฐ - ์Šคํ”„๋ง ์ž…๋ฌธ ๊ฐ•์˜

์ด ๊ธ€์€ ์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ ๋‹˜์˜ ์Šคํ”„๋ง ์ž…๋ฌธ ๊ฐ•์˜(๋ฌด๋ฃŒ) ๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

๊ฐ•์˜์†Œ๊ฐœ

๊ฐ„๋‹จํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•ด ๋ณด๋Š” ๊ฐ•์ขŒ์ด๋‹ค.

  • ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  • ์Šคํ”„๋ง ๋ถ€ํŠธ๋กœ ์›น์„œ๋ฒ„ ์‹คํ–‰
  • ํšŒ์› ๋„๋ฉ”์ธ ๊ฐœ๋ฐœ
  • ์›น MVC ๊ฐœ๋ฐœ
  • DB์—ฐ๋™ - JDBC, JPA, ์Šคํ”„๋ง๋ฐ์ดํ„ฐ JPA
  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

ํฌ์ธํŠธ

  • ์Šคํ”„๋ง ๊ธฐ์ˆ  ๊ทธ ์ž์ฒด์— ๋งค๋ชฐ๋˜๊ธฐ๋ณด๋‹ค ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€์— ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค.
  • ์‹ค๋ฌด์—์„œ ๊ฑฐ์˜ ์“ฐ์ง€ ์•Š๋Š” ์˜ค๋ž˜๋œ, ๋งˆ์ด๋„ˆํ•œ ์Šคํ”„๋ง ๊ธฐ์ˆ ์€ ์ œ์™ธํ•œ๋‹ค.
  • ์Šคํ”„๋ง์€ ๋งค์šฐ ๊ฑฐ๋Œ€ํ•˜๊ณ  ๊นŠ์ด์žˆ๋Š” ๊ธฐ์ˆ ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•„์š”ํ•œ ๊ฒƒ ๋ถ€ํ„ฐ ๋ฐฐ์šด๋‹ค.

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

  • java 11
  • IntelliJ ๋˜๋Š” Eclipse ์„ค์น˜

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

https://start.spring.io/ ์—์„œ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์‚ฌ์ดํŠธ.
  • Project : Maven ๋˜๋Š” Gradle
    • ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์™€ ์ฃผ๊ณ , build ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•ด ์ฃผ๋Š” ํˆด.
    • ๊ณผ๊ฑฐ์—๋Š” ์ฃผ๋กœ Maven์„, ์š”์ฆ˜์€ ๊ฑฐ์˜ Gradle์„ ์“ด๋‹ค. ์šฐ๋ฆฌ๋„ Gradle์„ ์“ฐ๋ฉด ๋œ๋‹ค
  • Language๋Š” Java์„ ํƒ
  • Spring Boot
    • (SNAPSHOT), (M2).. : ์•„์ง ๋งŒ๋“œ๋Š” ์ค‘์ธ ๋ฒ„์ „์ด๋ผ๋Š” ๋œป. ์ด๋Ÿฐ ๊ฒŒ ๋ถ™์–ด์žˆ์ง€ ์•Š์€ ๋ฒ„์ „ ์ค‘ ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์„ ์“ฐ๋ฉด ๋œ๋‹ค.
    • 21.03.02 ํ˜„์žฌ ๊ธฐ์ค€ 2.4.3 ๋ฒ„์ „ ๋‹ค์šด๋กœ๋“œ
  • Project Metadata
    • Group : ๊ทธ๋ฃน์—๋Š” ๋ณดํ†ต ๊ธฐ์—… ๋„๋ฉ”์ธ๋ช…์„ ์ ๋Š”๋‹ค.
    • Artifact : ๋นŒ๋“œ๋˜์–ด ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ๋ช…๊ณผ ๋น„์Šทํ•˜๋‹ค.
  • Dependencies
    • ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ, ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์™€ ์“ธ ๊ฒƒ์ธ์ง€ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„.
    • Spring Web : ์›น ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•„์ˆ˜.
    • Tyemeleaf : HTML ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•œ ๋’ค Generate๋ฅผ ๋ˆ„๋ฅด๊ณ , ์ธํ…”๋ฆฌJ์—์„œ ์—ด์–ด ์ค€๋‹ค.

๊ธฐ๋ณธ ํŒŒ์ผ ๊ตฌ์กฐ

  • .idea : intelliJ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์„ค์ •ํŒŒ์ผ ํด๋”
  • gradle ๋ฐ wrapper : gradle์ด ์‚ฌ์šฉํ•˜๋Š” ์„ค์ •ํŒŒ์ผ ํด๋”
  • src : main๊ณผ test๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค (ํ‘œ์ค€)
    • main
      • java : ์‹ค์ œ ํŒจํ‚ค์ง€์™€ ์†Œ์ŠคํŒŒ์ผ์ด ์žˆ๋‹ค.
      • resources
    • test : ํ…Œ์ŠคํŠธ์ฝ”๋“œ์™€ ๊ด€๋ จ๋œ ํŒŒ์ผ๋“ค์ด ๋“ค์–ด ์žˆ๋‹ค.
  • build.gradle : gradle์˜ ์„ค์ • ํŒŒ์ผ. ๋ฒ„์ „ ์„ค์ • ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ •๋ณด
    • repositories : ์•„๋ž˜ dependencies๋ฅผ ๋‹ค์šด๋ฐ›๋Š” ๊ฒฝ๋กœ์ด๋‹ค.
    • dependencies (๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)
      • implementation : ์œ„์—์„œ ์„ค์ •ํ•œ Dependencies ํ•ญ๋ชฉ์ด ๋“ค์–ด ์žˆ๋‹ค.
      • testImplementation : ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํ•ญ๋ชฉ. ๊ธฐ๋ณธ์œผ๋กœ ๋“ค์–ด ์žˆ๋‹ค.
  • .gitignore
    • ๊นƒ์—๋Š” ์†Œ์ŠคํŒŒ์ผ๋งŒ ์˜ฌ๋ผ๊ฐ€๊ณ  ๊ฒฐ๊ณผ๋ฌผ ๋“ฑ์€ ์˜ฌ๋ผ๊ฐ€์„  ์•ˆ ๋œ๋‹ค.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ start.spring.io์—์„œ ์„ค์ •ํ•ด ์ค€๋‹ค
  • gradlew, gradlew.bat : ๋‚˜์ค‘์— ์ง„๋„ ๋‚˜๊ฐ€๋ฉด์„œ ์„ค๋ช…
  • settings.gradle : ์ง€๊ธˆ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋‹ˆ ๋„˜์–ด๊ฐ„๋‹ค.

์‹คํ–‰ํ•˜๊ธฐ

์šฐ์„  ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” src.main.java ๊ฒฝ๋กœ์˜ ...Application ํŒŒ์ผ์„ ์‹คํ–‰ํ•ด ๋ณธ๋‹ค.

Tomcat started on port(s) : 8080 (http) ...

๊ทธ ๋‹ค์Œ ์›น๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด์–ด localhost:8080์œผ๋กœ ์ ‘์†ํ•˜๋ฉด Whitelabel Error Page๊ฐ€ ๋œฐ ๊ฒƒ์ด๋‹ค -> ๊ทธ๋Ÿฌ๋ฉด ์„ฑ๊ณตํ•œ ๊ฒƒ!

์›๋ฆฌ : ์‹คํ–‰ํ•œ ํŒŒ์ผ์˜ SpringApplication.run()์ด ํ•ด๋‹น ํด๋ž˜์Šค ํŒŒ์ผ์„ ์‹คํ–‰ํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์–ด๋…ธํ…Œ์ด์…˜์ธ @SprintBootApplication์ด ์‹คํ–‰๋˜๋ฉฐ, ๋‚ด์žฅ๋œ ํ†ฐ์บฃ ๋˜๋Š” ์›น์„œ๋ฒ„๋ฅผ ๋„์šฐ๋ฉฐ Spring boot๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

๊ธฐํƒ€ ์„ค์ •

์ธํ…”๋ฆฌJ์—์„œ Preference - Build, Execution, Deployment - Build Tools - Gradle ์—์„œ

Build and rn using :๊ณผ Run tests using : ์„ ๋‘˜ ๋‹ค IntelliJ IDEA๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

์‹คํ–‰ ์‹œ gradle์„ ํ†ตํ•ด์„œ ํ•˜์ง€ ์•Š๊ณ  ์ธํ…”๋ฆฌ์ œ์ด์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์‹คํ–‰์ด ๋” ๋นจ๋ผ์ง„๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ดํŽด๋ณด๊ธฐ

(์™ธ์šฐ์ง€ ๋ง๊ณ  ํ•œ๋ฒˆ ๋“ฃ๊ณ  ๋„˜์–ด๊ฐ€๋„ ๊ดœ์ฐฎ๋‹ค. ์–ด์ฐจํ”ผ ๊ณ„์† ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ)

Gradle์€ ์˜์กด๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.

build.gradle์„ ์—ด์–ด dependencies๋Š” ๋งŽ์ด ์„ค์ •ํ•˜์ง€ ์•Š์ง€๋งŒ,

์‹ค์ œ๋กœ Expernal Libraries ๋ฅผ ์—ด์–ด ๋ณด๋ฉด ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค.

์ด๋Š” ๋‚ด๊ฐ€ ์„ค์ •ํ•œ Spring Web๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•˜๋‚˜๋„ ๋‹ค๋ฅธ ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์— ์˜์กดํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

gradle, maven๊ฐ™์€ Build Tool๋“ค์€ ์ด๋Ÿฌํ•œ ์˜์กด๊ด€๊ณ„๋ฅผ ์•Œ์•„์„œ ๊ด€๋ฆฌํ•ด ์ค€๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด๊ด€๊ณ„ ์กฐํšŒํ•ด ๋ณด๊ธฐ

์ธํ…”๋ฆฌ์ œ์ด ์˜ค๋ฅธ์ชฝ ์Šคํฌ๋กค๋ฐ” ์˜†์„ ๋ณด๋ฉด Gradle ํƒญ์ด ์žˆ๋‹ค. (์—†์œผ๋ฉด ์ธํ…”๋ฆฌ์ œ์ด ์™ผ์ชฝ ๋งจ ์•„๋ž˜ ๋„ค๋ชจ ๊ฒน์นœ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋‚˜์˜จ๋‹ค)

Gradle ํƒญ - ๋‚ด ํ”„๋กœ์ ํŠธ - Dependencies๋ฅผ ์—ด๋ฉด ๋‚ด๊ฐ€ ๊ฐ€์ ธ์˜จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ใ…ก์ด์กด๊ด€๊ณ„๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

(*)์ด ๋ถ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด๋ฏธ ์œ„์—์„œ ๊ฐ€์ ธ์˜จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œ์‹œ์ด๋‹ค.

ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์งš์–ด ๋ณธ๋‹ค.

  • org.springframework.boot:spring-boot-starter-tomcat:2.4.3 (ํ†ฐ์บฃ)
    • imbeded (๋‚ด์žฅ๋œ) ์›น์„œ๋ฒ„. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์›น์„œ๋ฒ„๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋‹ค.
    • ์„ค์ •์ด ํ•„์š”์—†์ด ์‹คํ–‰๋งŒ ํ•˜๋ฉด ์›น ์„œ๋ฒ„๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค.
  • (๊ณตํ†ต)org.springframework.boot:spring-boot-starter (์Šคํ”„๋ง ๋ถ€ํŠธ ์Šคํƒ€ํ„ฐ)
    • ์›ฌ๋งŒํ•œ ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ด€๋ จ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋ชจ๋‘ ์˜์กดํ•˜๊ณ  ์žˆ์Œ.
    • dependencies, autoconfigure, logging, spring-core..
    • ์Šคํ”„๋ง ๋ถ€ํŠธ + ์Šคํ”„๋ง ์ฝ”์–ด + ๋กœ๊น…

๋กœ๊ทธ(log) ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๊ฐ•์˜๋‚˜ ์—ฐ์Šต์—์„œ๋Š” System.out.println()๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ํ˜„์—…์—์„œ๋Š” ๊ฑฐ์˜ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๋ฐ˜๋“œ์‹œ ๋กœ๊ทธ๋กœ ์ถœ๋ ฅ์„ ํ•ด์•ผ ํ•œ๋‹ค.

์™œ? ๋กœ๊ทธ๋กœ ๋‚จ๊ฒจ์•ผ ๊ณผ๊ฑฐ ์ด๋ ฅ์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ๋กœ๊ทธ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ.

org.springframework.boot:spring-boot-starter์—์„œ ...spring-boot-starter-logging์„ ํด๋ฆญํ•˜๋ฉด ์•„๋ž˜ ํŒŒ์ผ๋“ค์ด ๋‚˜์˜จ๋‹ค.

  • org.slf4j ... ์ธํ„ฐํŽ˜์ด์Šค์— ํ•ด๋‹นํ•จ.
  • ch.qos.logback .... ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ตฌํ˜„์ฒด. ์ด ์ชฝ์ด ์„ฑ๋Šฅ์ด ๋” ์ข‹๋‹ค.

๋กœ๊ทธ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•˜๋ฉด slf4j์™€ logback์— ๋Œ€ํ•ด ๊ตฌ๊ธ€๋งํ•ด ๋ณด๋ฉด ์ข‹๋‹ค.

ํ…Œ์ŠคํŠธ ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

testCompileClasspath - org. ... spring-boot-starter-test ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • org.junit.jupiter:junit-jupiter (JUnit5)
    • ์ž๋ฐ”์—์„œ ํ…Œ์ŠคํŠธ ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
  • .. spring-test : JUnit๊ณผ ์Šคํ”„๋ง์˜ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ง€์›ํ•จ

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

์•„๋ฌด ๋‚ด์šฉ ์—†์ด ์Šคํ”„๋ง ์›น์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Whitelabel Error Page๋งŒ ๋œฌ๋‹ค.

์›น ํŽ˜์ด์ง€์— ๋‚ด์šฉ์„ ๋„ฃ์–ด๋ณด์ž.

Welcome Page ๋งŒ๋“ค๊ธฐ

ํ”„๋กœ์ ํŠธ/src/main/resources/static/index.html

์ด ๊ฒฝ๋กœ์— index.html ํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด ํ•ด๋‹น ํŒŒ์ผ์„ welcome page๋กœ ์ธ์‹ํ•œ๋‹ค.

(welcome page = ๋„๋ฉ”์ธ์— ์ ‘์†ํ•˜๋ฉด ๋ณด์ด๋Š” ์ฒซ ํ™”๋ฉด)

index.html์„ ๋งŒ๋“ค๊ณ  ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์‹คํ–‰ํ•œ ๋’ค localhost:8080์— ์ ‘์†ํ•˜๋ฉด ์ž‘์„ฑํ•œ htmlํŒŒ์ผ๋Œ€๋กœ ๋‚˜์˜จ๋‹ค.

์Šคํ”„๋ง์„ ๊ณต๋ถ€ํ•  ๋•Œ๋Š”..

์Šคํ”„๋ง : ์ž๋ฐ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ๊ด€๋ จ๋œ ์ƒํƒœ๊ณ„ ์ „๋ฐ˜์„ ๋ชจ๋‘ ํฌ๊ด„ํ•  ๋งŒํผ ํฌ๋‹ค.

์Šคํ”„๋ง ๋ถ€ํŠธ : ์Šคํ”„๋ง ์ „์ฒด๋ฅผ ๊ฐ์‹ธ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ.

๋”ฐ๋ผ์„œ ์Šคํ”„๋ง์„ ๊ณต๋ถ€ํ•  ๋•Œ๋Š” ํ•„์š”ํ•œ ๊ฑธ ์ฐพ์•„ ์“ฐ๋Š” ๋Šฅ๋ ฅ์ด ์ค‘์š”ํ•˜๋‹ค.

  1. spring.io์— ์ ‘์†ํ•œ๋‹ค.
  2. Projects - Spring Boot์— ์ ‘์† ํ›„ Learn์„ ๋ˆ„๋ฅธ๋‹ค
  3. Reference Documentation์„ ๋ˆ„๋ฅธ๋‹ค
  4. ์›ํ•˜๋Š” ๋‚ด์šฉ์„ ์ฐพ์•„์„œ ๊ณต๋ถ€ํ•œ๋‹ค.

์ฒ˜์Œ์—๋Š” ์Šคํ”„๋ง ๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ์„ ๋”ฐ๋ผํ•˜๋Š” ๊ฒƒ๋„ ์ข‹๋‹ค.

ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋ž€?

  • Spring MVC๋ฅผ ํ™œ์šฉํ•ด ๋™์  HTML์„ ์ œ๊ณต .
  • Thymeleaf, FreeMaker, JSPs ๋“ฑ์ด ์žˆ์Œ.
  • ์Šคํ”„๋ง์€ FreeMaker, Tyemeleaf, Groovy, Mustache์— ๋Œ€ํ•ด auto-configuration์„ ์ œ๊ณตํ•จ.

Controller ์ปจํŠธ๋กค๋Ÿฌ

MVC๋ชจ๋ธ์˜ Controller๋ฅผ ๋งํ•œ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฒซ ๋ฒˆ์งธ ์ง„์ž…์ ์ด๋‹ค.

ํด๋ž˜์Šค ์„ ์–ธ๋ถ€ ์œ„์— @Controller ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด ์„ ์–ธํ•œ๋‹ค.

src/main/java/ํ”„๋กœ์ ํŠธํŒŒ์ผ์˜ HelloController

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")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

@GetMapping()

: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ /hello ์ฃผ์†Œ๋ฅผ ๋ฐ›์œผ๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์ค€๋‹ค. (์Šคํ”„๋ง์ด ํ•ด ์ค€๋‹ค)

HTTP์˜ Get, Post ํ•  ๋•Œ ๊ทธ Get์ด๋‹ค.

src/main/resources/templates์˜ hello.html

<!DOCTYPE html>
<html xmlns:th = "http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p th:text="'์•ˆ๋…•ํ•˜์„ธ์š”. ' + ${data}">์•ˆ๋…•ํ•˜์„ธ์š”. ์†๋‹˜</p>
</body>
</html>

(${data}๋ถ€๋ถ„์— ๋นจ๊ฐ„ ์ค„์ด ๋œฐ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹คํ–‰ํ•˜๋ฉด ์ž˜ ๋œ๋‹ค)

์Šคํ”„๋ง ๋™์ž‘ ํ™˜๊ฒฝ ๊ทธ๋ฆผ

  1. ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ localhost:8080/hello๋ผ๋Š” URL์„ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด
  2. (์Šคํ”„๋ง ๋ถ€ํŠธ์— ๋‚ด์žฅ๋œ) ํ†ฐ์บฃ ์„œ๋ฒ„๊ฐ€ ์ด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์ „๋‹ฌํ•ด ์ค€๋‹ค.
  3. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ปจํŠธ๋กค๋Ÿฌ(@Controller)์—์„œ @GetMapping("hello")๋ฅผ ์ฐพ๋Š”๋‹ค.
  4. URL์ด ๋งค์นญ๋˜๋ฉด @GetMapping("hello") ์•„๋ž˜์˜ ๋ฉ”์„œ๋“œ์ธ hello(Model model)๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
    • model.addAttribute("data", "hello!!");
    • : Model์— ํ‚ค๊ฐ€ data, ๊ฐ’์ด hello!!์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๋‹ค.
    • return "hello";
    • : (๊ธฐ๋ณธ์ ์œผ๋กœ) src/main/resources/templates ํ•˜์œ„์— ์žˆ๋Š” ํ•ด๋‹น ์ด๋ฆ„์˜ ํŒŒ์ผ(hello.html)์„ ์ฐพ์•„ ๋ Œ๋”๋ง(์—ฐ๊ฒฐ)ํ•œ๋‹ค.
  5. ์ด ๋•Œ ์Šคํ”„๋ง์€ Model์„ ๋งŒ๋“ค์–ด์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ์— ๋„ฃ์–ด ์ค€๋‹ค. (๋งค๊ฐœ๋ณ€์ˆ˜)
  6. ์—ฐ๊ฒฐ๋œ ํŒŒ์ผ์„ ์‹คํ–‰ํ•œ๋‹ค. ์ด ๋•Œ ${}๋กœ ์ฒ˜๋ฆฌ๋œ ๋ถ€๋ถ„์€ Model์—์„œ ํ•ด๋‹น ํ‚ค์— ๋งž๋Š” ๊ฐ’์„ ์ฐพ์•„ ์น˜ํ™˜๋œ๋‹ค.
    • hello.html์˜ ${data}๋Š” hello(Model model)์˜ ๋ชจ๋ธ์— ๋„ฃ์–ด์ง„ ํ‚ค=data, ๊ฐ’=hello!!์ธ ์ž๋ฃŒ๋ฅผ ์ฐพ์•„ ๊ทธ ๊ฐ’(hello!!)์„ ๊ฐ€์ ธ์˜จ๋‹ค.

โ— ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฆฌํ„ด ๊ฐ’์œผ๋กœ ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด, ๋ทฐ ๋ฆฌ์กธ๋ฒ„(view resolver)๊ฐ€ ํ™”๋ฉด์„ ์ฐพ์•„์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค

  • ์Šคํ”„๋ง๋ถ€ํŠธ ํ…œํ”Œ๋ฆฟ์—”์ง„ ๊ธฐ๋ณธ viewName(๋ฆฌํ„ด๊ฐ’์œผ๋กœ ๋ฐ›์€ ๋ฌธ์ž)์„ ๋งคํ•‘.
  • src/main/resources/templates/ + viewName + .html

'๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ > Spring ์Šคํ”„๋ง' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ์Šคํ”„๋ง DB ์ ‘๊ทผ๊ธฐ์ˆ  : H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์น˜  (0) 2021.03.05
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ์›น MVC ๊ฐœ๋ฐœ(ํšŒ์›๊ด€๋ฆฌ ์˜ˆ์ œ) : ํšŒ์› ๋“ฑ๋ก ๋ฐ ์กฐํšŒ  (0) 2021.03.05
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„ : ์ปดํฌ๋„ŒํŠธ ์Šค์บ”, ์˜์กด๊ด€๊ณ„, DI, ์Šคํ”„๋ง ๋นˆ ์ง์ ‘ ๋“ฑ๋กํ•˜๊ธฐ  (0) 2021.03.04
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ:๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ, ํšŒ์› ๋„๋ฉ”์ธ/๋ฆฌํฌ์ง€ํ† ๋ฆฌ/์„œ๋น„์Šค ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ž‘์„ฑ  (0) 2021.03.04
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ๋นŒ๋“œ ๋ฐ ์‹คํ–‰, ์ •์  ์ปจํ…์ธ /MVC์™€ ํ…œํ”Œ๋ฆฟ์—”์ง„/API  (0) 2021.03.04