rosieblue
article thumbnail
728x90

์ด ํฌ์ŠคํŠธ๋Š”  ์ธํ”„๋Ÿฐ์˜ ์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ด๋‹ค.

์˜ค๋Š˜์€ ์•„๋ž˜ ๊ณผ์ •์„ ์‹ค์Šตํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

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

 

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

https://start.spring.io/ ์— ๋“ค์–ด๊ฐ€์„œ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด์ค€๋‹ค.

2.x๋ฒ„์ „์„ ํ•ด์•ผ Java 11๋ฒ„์ „์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•ˆ๊ทธ๋Ÿฌ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.

Gradle๋กœ ํ•ด์ฃผ๊ณ , Dependencies์— Spring Web, Thymeleaf๋ฅผ ์„ ํƒํ•ด์ค€๋‹ค. Thymeleaf๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๋‹ค ์„ค์ •ํ•œ ํ›„ generate ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ฃผ๊ณ  ์••์ถ•์„ ํ•ด์ œํ•ด์ค€๋‹ค. ์ดํ›„ ์ด๋ฅผ IntelliJ์—์„œ Open as Project๋กœ ์—ด๋ฉด ๋œ๋‹ค. (

ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด๋ฉด InjelliJ ์ฝ˜์†”์—์„œ ๋นŒ๋”ฉ์„ ์‹œ์ž‘ํ•œ๋‹ค. ์‹œ๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์ข€ ๊ธฐ๋‹ค๋ฆฌ๋ฉด BUILD SUCCESSFUL์ด ๋œจ๋ฉด์„œ ์™„๋ฃŒ๋œ๋‹ค. (์ž๋ฐ” ๋ฒ„์ „๊ณผ ์Šคํ”„๋ง๋ถ€ํŠธ ๋ฒ„์ „์ด ์•ˆ๋งž์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋‹ˆ ์ฃผ์˜!) 

์ฐธ๊ณ ๋กœ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์—์„œ Open as project ํ•ด์ค˜์•ผํ•œ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ–์—์„œ ์—ด๋ฉด ์—๋Ÿฌ๋œฌ๋‹ค (.idea๊ฐ€ ๋‹ค๋ฅธ ์• ๋“ค์ด๋ž‘ ๊ฐ™์€ ์œ„์น˜์— ์žˆ์–ด์•ผํ•จ ์•„๋งˆ ํ”Œ์  ๋งŒ๋“ค๋ฉด .idea ์ƒ๊ธฐ๋Š”๋“ฏ)

 

์ด๋กœ์จ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ ๋นŒ๋“œ๋ฅผ ์™„๋ฃŒํ–ˆ๋‹ค.

์ด์ œ src>main>java>๋กœ ๊ฐ€์„œ HelloSpringApplication ํด๋ž˜์Šค๋ฅผ run์‹œ์ผœ์ฃผ์ž.

์‹คํ–‰์ด ์ž˜ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ œ localhost:8080์œผ๋กœ ์ ‘์†์„ ํ•ด๋ณด์ž

์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค๊ณ  ๋‹นํ™ฉํ•˜์ง€ ๋ง์ž! ์ง€๊ธˆ์€ ์šฐ๋ฆฌ๊ฐ€ ์•„๋ฌด ํŒŒ์ผ๋„ ์•ˆ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋„์šธ ํŒŒ์ผ์ด ์—†์–ด์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”๊ฒƒ์ด๋‹ค.

(์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด, ์—๋ŸฌํŽ˜์ด์ง€ ๋ณด๋ฉด  /์— ๋งคํ•‘๋œ ํŽ˜์ด์ง€๊ฐ€ ์—†๋‹ค๊ณ  ๋˜์–ด์žˆ๋Š”๋ฐ, ์ด๋Š” /์—์„œ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ๋„์šฐ๋ฉด ํ•ด๊ฒฐ๋˜๋Š” ๋ฌธ์ œ๋‹ค)

 

์ฐธ๊ณ 

ํ”„๋กœ์ ํŠธ๊ฐ€ IntelliJ๊ฐ€ ์•„๋‹ˆ๋ผ Gradle์„ ํ†ตํ•ด์„œ ์‹คํ–‰๋˜๋ฉด ์ข€ ๋Š๋ฆฌ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์šฐ๋ฆฌ๊ฐ€ settings(ํ˜น์€ preferences)์—์„œ ๋ณ€๊ฒฝํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. Settings์— ๋“ค์–ด๊ฐ„ ์ˆ˜ gradle์„ ์น˜๊ณ  'Build and run using'๊ณผ 'Run tests using'์„ ๋‘˜๋‹ค IntelliJ IDEA๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ์ข€๋” ๋นจ๋ฆฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


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

build.gradle ์ฝ”๋“œ ์ผ๋ถ€

build.gradle์— ๋“ค์–ด๊ฐ€๋ฉด ์•„๊นŒ ์šฐ๋ฆฌ๊ฐ€ spring.io์—์„œ dependencies๋กœ ๊ฐ€์ ธ์˜จ ์•„์ด๋“ค์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

gradle๊ณผ ๊ฐ™์€ ์• ๋“ค์€ ์˜์กด ๊ด€๊ณ„๋ฅผ ๋‹ค ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค. ์•„๋ž˜ ์‚ฌ์ง„์„ ๋ณด์ž

External Libraries

์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ๋ฆฌ๊ฐ€ spring-web์„ ๋•ก๊ฒจ์™”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์„ ๋•Œ gradle์€ spring-web์ด ํ•„์š”ํ•œ ๋‹ค๋ฅธ ์• ๋“ค๋„ ์„ค์น˜๋ฅผ ํ•ด์ฃผ๊ณ , ๊ทธ ์• ๋“ค์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค๋ฅธ ์• ๋“ค๋„ ์„ค์น˜๋ฅผ ํ•ด์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜ฌ๋ผ๋ฝ ๋‹ค ์˜์กด๊ด€๊ณ„๋ฅผ ๊ณ ๋ คํ•ด์„œ ๋‹ค ์„ค์น˜๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด gradle์˜ ์žฅ์ ์ด๋‹ค (์•„๋งˆ ๋ฆฌ๋ˆ…์Šค์—์„œ apt๋„ ์ด๋žฌ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. dpkg๋Š” ์•ˆ๊ทธ๋ ‡๊ณ ! ํ™•์‹คํ•˜์ง€ ์•Š์œผ๋‹ˆ ๋‹ค์‹œ ์ฐพ์•„๋ด์•ผ์ง€~!)

 

 

์™ผ์ชฝ ์•„๋ž˜ ๊ฐ€์žฅ ๋ชจ์„œ๋ฆฌ!!! ๋„ค๋ชจ ๋‘๊ฐœ ๊ฒน์ณ์ง„ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด ํ™”๋ฉด ์˜ค๋ฅธ ์ชฝ์— Notification์ด๋ž‘ Gradle์ด๋ผ๋Š” ํƒญ์ด ์ƒ๊ธด๋‹ค.

 

์ด๋ฅผ ํด๋ฆญํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์‚ฌ์ง„์ด ๋‚˜์˜จ๋‹ค.

gradle์„ ๋ณด์ž

Dependencies์— ๋“ค์–ด๊ฐ€๋ณด๋ฉด thymeleaf๋ฅผ ๋ˆ„๋ฅด๋ฉฐ boot-starter๋ผ๋Š” ์• ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์–œ ๋˜ api ์ด๋Ÿฐ์• ๊ฐ€ ํ•„์š”ํ•˜๊ณ ~ ์ด๋Ÿฐ๊ฑธ ๋ณด์—ฌ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ํด๋ฆญํ•ด์„œ ๋‚จ์ƒ‰์œผ๋กœ ํ•˜์ด๋ผ์ดํŠธ๋œ ๋ถ€๋ถ„์˜ (*)๋Š” ์ค‘๋ณต์ด๋ผ๋Š” ๋œป์ด๋‹ค

 

 

 

static์˜ index.html์„ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋ฃจํŠธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ๋‹ค. ๊ฐ„๋‹จํ•œ html์ฝ”๋“œ๋ฅผ ์ ์–ด์ฃผ๊ณ  localhost:8080์œผ๋กœ ๋‹ค์‹œ ์ ‘์†ํ•ด๋ณด์•˜๋”๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.

์•„๊นŒ์ฒ˜๋Ÿผ ์˜ค๋ฅ˜ ๋œจ์ง€ ์•Š๊ณ  ์ด๋ ‡๊ฒŒ ์ž˜ ์ž‘๋™ํ•œ๋‹ค.

 

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

hello๋ผ๋Š” ๊ฒฝ๋กœ์— ๋“ค์–ด๊ฐ€๋ฉด ์ปจํŠธ๋กค๋Ÿฌ์—์„œ GetMapping("hello")๊ฐ€ ์„ค์ •๋˜์–ด์žˆ์œผ๋ฏ€๋กœ ์ด ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋œ๋‹ค

๊ทธ๋Ÿฌ๋ฉด ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ• ๊นŒ?

@Controller // controller๊ฐ€ ์›น ์ง„์ž…์ ์ด๋ผ๊ณ  ํ•œ๋‹ค!
public class HelloController {

    @GetMapping("hello") //hello ๊ฒฝ๋กœ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ์–˜๋ฅผ ์‹คํ–‰์‹œ์ผœ์ค€๋‹ค.
    public String hello(Model model){
        model.addAttribute("data","Hello!!");
        return "hello"; //templates์˜ hello.html์œผ๋กœ ๋ Œ๋”๋ง ํ•ด๋ผ!!!!!!!!
        // controller์—์„œ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ !๋ฌธ์ž!๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ?
        // ViewResolver๊ฐ€ ๋งž๋Š” ํ™”๋ฉด์„ ์ฐพ์•„์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค
        // resources:templates/ + {ViewName}+ .html ์ด๋Ÿฐ ํ˜•์‹์œผ๋กœ ์ฐพ๋Š”๋‹ค
        // hello๊ฐ€ viewName์ด ๋˜๋Š” ๋“ฏ ์‹ถ๋‹ค
    }
}

์ด๋Ÿฌ๋ฉด ๋กœ์ปฌํ˜ธ์ŠคํŠธ์—์„œ /hello๋กœ ๋“ค์–ด๊ฐ€๋ฉด ์ด ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ํ–‰ํ•˜๋Š” ์ผ์€ ๋‘๊ฐ€์ง€์ธ๋ฐ 1.๋ชจ๋ธ์˜ dataํ‚ค์— Hello!!๋ผ๋Š” ๊ฐ’ ์ฃผ๊ธฐ, 2. "hello" ๋ฆฌํ„ดํ•˜๊ธฐ

 

ํ•œํŽธ ์ฝ”๋“œ์—๋„ ์ž‘์„ฑํ–ˆ๋“ฏ์ด ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•˜๋ฉด templatesํด๋”์—์„œ ํ•ด๋‹น ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” htmlํŒŒ์ผ ์ฐพ์•„์„œ ์ด ํŒŒ์ผ์„ ํ™”๋ฉด์— ๋„์›Œ์ค€๋‹ค!!

 

<!-- hello.html -->
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org"> <!-- ์—ฌ๊ธฐ์„œ th๋Š” ํ…œํ”Œ๋ฆฐ ์—”์ง„์„ ๋งํ•œ๋‹ค!! ์šฐ๋ฆฌ๋Š” thymeleaf๋ฅผ ์“ฐ๋Š”๊ฒƒ~! -->
<head>
  <title>Hello</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'์•ˆ๋…•ํ•˜์„ธ์š”. ' + ${data}" >์•ˆ๋…•ํ•˜์„ธ์š”. ์†๋‹˜</p> <!-- data์— ๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค -->
</body>
</html>

<!-- data๊ฐ€ model์˜ data๋ผ๋Š” ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค-->

&{data} ์— ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋ธ์— ์ถ”๊ฐ€ํ•ด์คฌ๋˜ data attribute์˜ ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.

 

์ด์ œ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œ์ผœ์„œ hello๋ฅผ ์ณ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹คใ…Žใ…Ž

์šฐ์™• ์„ฑ๊ณต!!

 

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

์ด์ œ๋Š” IntelliJ๊ฐ€ ์•„๋‹ˆ๋ผ cmd ์ฐฝ์—์„œ ์šฐ๋ฆฌ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ํ•ด๋ณผ๊ฒƒ์ด๋‹ค.

// hello-spring์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ ํ›„ ์‹คํ–‰
// IntelliJ์— ์žˆ๋Š” ์„œ๋ฒ„๋Š” ๊บผ์ค€๋‹ค

> gradle.bat build
> cd build/libs

์ด๋Ÿฐ์‹์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ์™„์„ฑ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  build๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ๊ธด๋‹ค

> java -jar hello-spring-0.0.1-SNAPSHOT.jar

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๊ณ  ๋กœ์ปฌํ˜ธ์ŠคํŠธ ์ ‘์†์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

๋ฐฐํฌํ•  ๋•Œ๋Š” ์ด jar ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋œ๋‹ค....(Django ๋ฐฐํฌํ• ๋Š” ์„œ๋ฒ„ ์„ค์น˜ํ•˜๊ณ  ์‚ฝ์งˆํ•˜๊ณ  ์—ฌํ–‰๋„ ๋ชป๊ฐ€๊ณ  ๋‚œ๋ฆฌ๋‚ฌ๋Š”๋ฐ,,, ๋ฌผ๋ก  ๋‚ด๊ฐ€ ๊ฐ์ž์˜€์ง€๋งŒ... ์™• ํŽธํ•œ SpringBoot ๋„ˆ๋ฅผ ์‚ฌ๋ž‘ํ•˜๊ฒŒ ๋ผ์จ,,,,,ํ์ž‰) Django ๋ฐฐํฌ๋ž‘ ์ œ๋Œ€๋กœ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•œ๋ฒˆ AWS ์ธ์Šคํ„ด์Šค๋กœ Spring๋„ ๋ฐฐํฌํ•ด๋ด์•ผ๊ฒ ๋‹น

 

 

์ฐธ๊ณ 

gradlew clean build

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์›๋ž˜์žˆ๋˜ build ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์‚ฌ๋ผ์ง€๊ณ  ์ƒˆ๋กœ ๋นŒ๋“œํ•ด์ค€๋‹ค

 

 

๋”๋ณด๊ธฐ

SOPT ๋™์•„๋ฆฌ ์ง€์›์„ ์œ„ํ•ด์„œ spring boot๋ฅผ ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ์ตœ๊ทผ๊นŒ์ง€ ๋„ˆ๋ฌด ๋ฐ”๋น ์„œ ๊ณต๋ถ€ํ•  ์‹œ๊ฐ„์ด ์—†์—ˆ๋Š”๋ฐ ์ด์ œ๋Š” ์ž์œ ๋กœ์›Œ์ ธ์„œ ๊ณต๋ถ€ ์ง„์งœ ์—ด์‹ฌํžˆ ํ•ด์•ผ์ง€ !!! ์ž๋ฐ” ๋ณต์Šต๋„ ๋‹ค์‹œํ•ด์•ผ๊ฒ ๋‹ค. ์‚ฌ์‹ค ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์œ ๋กœ ๊ณต๋ถ€ํ•˜๋Š”๊ฒŒ ๊ต‰์žฅํžˆ ํž˜๋“  ์ƒํƒœ์ธ๋ฐ, ์–ด๋–ป๊ฒŒ๋“  ์ด๋ ‡๊ฒŒ ๋…ธํŠธ ์ •๋ฆฌํ•˜๋ฉด ๋จธ๋ฆฌ์†์— ์กฐ๊ธˆ์€ ๋“ค์–ด์˜ค๋Š” ๊ฒƒ ๊ฐ™๋‹คใ… ใ…   ๋ฐฑ์—”๋“œ๋Š” Django๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•œ ๊ฒฝํ—˜๊ณผ Node.js๋ฅผ ์ƒํ™œ์ฝ”๋”ฉ ๊ฐ•์ขŒ๋กœ ๊ฑด๋“œ๋ ค๋ณธ๊ฒƒ ๋ฐ–์— ์—†๋Š”๋ฐ, spring boot๋Š” ๋‚ด๊ฐ€ ์ต์ˆ™ํ•œ(๊นŒ๋จน์—ˆ์ง€๋งŒ..) JAVA๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Œ€๊ฐ€ ๋œ๋‹ค. ์ด ์‹œ๋ฆฌ์ฆˆ๋Š” ๊ฝค ์˜ค๋ž˜๊ฐˆ ๊ฒƒ ๊ฐ™๋‹ค!! ์•„๋ฌดํŠผ ํž˜๋‚ด๋ณด์ž ํ™”์ดํŒ… ! >< ๋‚œ ํ• ์ˆ˜ ์žˆ๋‹ค ใ… ใ… ใ… ใ… ใ… ใ… ใ… ใ… 

profile

rosieblue

@Rosieblue

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!