๐Ÿ“š [Spring] #1. ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์„ค์ •

์ด๊ฐ€์€ยท2024๋…„ 4์›” 6์ผ
0

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
1/13
post-thumbnail

๐Ÿ“• ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

์Šคํ”„๋ง ๋ถ€ํŠธ ์Šคํƒ€ํ„ฐ ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•ด์„œ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

์Šคํ”„๋ง ๋ถ€ํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํ”„๋ง ๊ด€๋ จ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์‚ฌ์ดํŠธ

๐Ÿ“– Project

Maven๋ž‘ Gradle์€ ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ

ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ „์ฒด์ ์ธ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ

๐ŸŽˆ ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ

1. ์ข…์†์„ฑ ๋‹ค์šด๋กœ๋“œ - ์ „์ฒ˜๋ฆฌ(Preprocessing)
2. ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ(Compile)
3. ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅผ ํŒจํ‚ค์ง•(Packaging)
4. ํ…Œ์ŠคํŠธ ์‹คํ–‰(Testing)
5. ํ”„๋กœ๋•์…˜ ์‹œ์Šคํ…œ์— ๋ฐฐํฌ(distribution)

โœ” ์š”์ฆ˜์—๋Š” Gradle์„ ์‚ฌ์šฉ

๐Ÿ“– Spring Boot

SNAPSHOT : ์•„์ง ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๋ฒ„์ „
SNAPSHOT, M1 : ์ •์‹ ๋ฆด๋ฆฌ์ฆˆ ๋˜์ง€ ์•Š์Œ

๐Ÿ“– Project Metadata

Group : ๊ธฐ์—… ๋„๋ฉ”์ธ๋ช…
Artifact : ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ(ํ”„๋กœ์ ํŠธ๋ช…)

๐Ÿ“– Dependencies

์Šคํ”„๋ง๋ถ€ํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์‹œ ์‚ฌ์šฉํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ํƒ

Spring web : ์›น ํ”„๋กœ์ ํŠธ
Thymeleaf : HTML์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„

๐Ÿ“– ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

.idea : IntelliJ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์„ค์ • ํŒŒ์ผ
gradle : gradle ์‚ฌ์šฉ ๊ด€๋ จ ํด๋”
src : main, test ํด๋”๊ฐ€ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์Œ
src/main/java : ์‹ค์ œ ํŒจํ‚ค์ง€, ์†Œ์ŠคํŒŒ์ผ
src/main/resources : ์ž๋ฐ” ์ฝ”๋“œ ํŒŒ์ผ์„ ์ œ์™ธํ•œ xml, properties, html ๋“ฑ ์„ค์ • ํŒŒ์ผ
src/test : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ด€๋ จ ์†Œ์Šค
.gitignore : ์†Œ์Šค ์ฝ”๋“œ ๊ด€๋ฆฌ
build.gradle : ๋ฒ„์ „ ์„ค์ •, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ€์ ธ์˜ค๊ธฐ

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

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

๐Ÿ“’ View ํ™˜๊ฒฝ์„ค์ •

๐Ÿ“– Welcome Page

๋„๋ฉ”์ธ์„ ์ž…๋ ฅํ•˜๊ณ  ๋“ค์–ด์™”์„ ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜ํƒ€๋‚˜๋Š” ํŽ˜์ด์ง€

โœ” ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” resources/static์— index.html ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ฉด ํ•ด๋‹น ํŒŒ์ผ์„ Welcome Page๋กœ ์ธ์‹ํ•œ๋‹ค -> ์ •์  ํŽ˜์ด์ง€

๐Ÿ“– thymeleaf ํ…œํ”Œ๋ฆฟ ์—”์ง„

๋™์  ํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉ

๐ŸŽˆ ๋™์ž‘ ๋ฐฉ์‹

  1. ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8080/hello๋ฅผ ๋˜์ง€๋ฉด ๋‚ด์žฅ ํ†ฐ์บฃ ์„œ๋ฒ„๊ฐ€ ๋ฐ›์•„ ์Šคํ”„๋งํ•œํ…Œ ์ „๋‹ฌํ•œ๋‹ค.

  2. ์ „๋‹ฌ๋ฐ›์€ ์Šคํ”„๋ง์€ ๋งค์นญ ๊ฐ€๋Šฅํ•œ Controller๋ฅผ ์ฐพ์•„ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. (@GetMapping)

  3. ์Šคํ”„๋ง์€ Model์ด๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ค์–ด์„œ ํ•จ๊ป˜ ๋„ฃ์–ด์ฃผ๋Š”๋ฐ ์ด ๋ชจ๋ธ์— ์—ฌ๋Ÿฌ Attribute๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ View์— ๋ณด์ผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. (model.addAttribute)

  4. ๋ฆฌํ„ด ๊ฐ’์œผ๋กœ ViewName์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด viewResolver๊ฐ€ resources/templates/{ViewName}.html ํ™”๋ฉด์„ ์ฐพ์•„์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. (return "hello";)

๐ŸŽˆ Controller

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฒซ ๋ฒˆ์งธ ์ง„์ž…์ 

java/hello.hellospring/controller/HelloController.java

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๊ฐ€ ๋“ค์–ด์˜ค๋ฉด hello ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์คŒ
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        return "hello"; //๋ฌธ์ž์—ด ๊ฐ’์— ๋งž๋Š” html์„ ์ฐพ์•„ ํ™”๋ฉด์— ๋ณด์—ฌ์คŒ
    }
}

๐ŸŽˆ View

  • ํƒ€์ž„๋ฆฌํ”„์˜ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด th๋กœ ์„ ์–ธ
  • data๋Š” Controller์—์„œ ์ž…๋ ฅํ•œ Model Attribute์˜ key ๊ฐ’์œผ๋กœ ์‹คํ–‰๋จ. ๊ฒฐ๊ณผ๋กœ๋Š” value ๊ฐ’์ด ๋ณด์ž„

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>

๐ŸŽˆ ์‹คํ–‰ํ™”๋ฉด
http://localhost:8080/hello

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

1. ๋ช…๋ น ํ”„๋กฌํฌํŠธ(cmd)์—์„œ ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™
2. gradlew build๋กœ build ์ƒ์„ฑ
3. build ํด๋” ์•ˆ์— libs๋กœ ์ด๋™ (cd build/libs)
4. ์ž๋ฐ” ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ (java -jar hello-spring-0.0.1-SNAPSHOT.jar)

โœ” dir ๋ช…๋ น์–ด๋กœ ๋””๋ ‰ํ† ๋ฆฌ ํ™•์ธ
โœ” gradlew clean ๋ช…๋ น์–ด๋กœ ๋ชจ๋“  build ํŒŒ์ผ ์‚ญ์ œ

๐Ÿ“š ์ฐธ๊ณ ์ž๋ฃŒ

์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ 

profile
๊ฐ€๋ฟก์ด์˜ ๊ณต๋ถ€ ์ƒ์ž๐Ÿ“ฆ

0๊ฐœ์˜ ๋Œ“๊ธ€