[ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค H2 ์„ค์น˜ ๋ฐ ์—ฐ๋™, JPA ์—ฐ๋™ํ•˜๊ธฐ  ]

 

Spring - [intelliJ,Thymeleaf] MAC, H2๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋Œ“๊ธ€์ฐฝ ๋งŒ๋“ค๊ธฐ(2)

[ ๊ฐ„๋‹จํ•œ ๋Œ“๊ธ€์ฐฝ ๋งŒ๋“ค๊ธฐ (1) ] Spring - [intelliJ,Thymeleaf] ๊ฐ„๋‹จํ•œ ๋Œ“๊ธ€์ฐฝ ๋งŒ๋“ค๊ธฐ(1)[ @PostMapping์œผ๋กœ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ] Spring - [intelliJ,Thymeleaf] @PostMapping์œผ๋กœ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ[

post-this.tistory.com

 

 

 

[ @PostMapping์œผ๋กœ ๋กœ๋˜ ์ˆซ์ž ์ถœ๋ ฅํ•˜๊ธฐ.  ]

 

Spring - [intelliJ,Thymeleaf] @PostMapping์œผ๋กœ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2) ] Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2)[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„

post-this.tistory.com

 

 

 


 

 

๋žœ๋ค ์ˆซ์ž 6๊ฐœ๋ฅผ
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ด์šฉํ•˜์—ฌ ๋ณต์‚ฌํ•˜๊ธฐ.

 

 

 

 

 

1. ๋™์ž‘ํ™”๋ฉด๊ณผ ์ „์ฒด์ฝ”๋“œ

 

 

 

๋™์ž‘ํ™”๋ฉด

 

 

 


์ „์ฒด์ฝ”๋“œ

 

GitHub - hyeong-ing/LuckyLotto: ๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค. Contribute to hyeong-ing/LuckyLotto development by creating an account on GitHub.

github.com

 

 

 

 

 


 

 

 

 

 

2. ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€ ์ƒ๊ฐํ•˜๊ธฐ.

 

 

๊ฐ€์žฅ ๋‚œํ•ญ์„ ๊ฒช์—ˆ๋˜ ๋ถ€๋ถ„์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ตœ๋Œ€ํ•œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋งŒํผ ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ ์ •๋ณด๊ฐ€ ๋„ˆ๋ฌด ์—†์—ˆ๋‹ค. ๊ฒฐ๊ตญ Chat-GPT์˜ ๋„์›€๊นŒ์ง€ ๊ตฌํ•ด๋ดค์ง€๋งŒ... Chat-GPT๋„ ๊ทธ๋ƒฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์“ฐ๋ผ๊ณ  ํ–ˆ๋‹ค. ์ผ๋‹จ ๋ชฉํ‘œํ•œ ๊ธฐ๋Šฅ๊นŒ์ง€ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ–ˆ๊ณ , ์–ด์ฐจํ”ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ์— ๊ธฐํšŒ๋กœ ์‚ผ์•„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ฌธ์ œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์ง€์‹์ด ์ „๋ฌดํ•˜๋‹ค๋Š” ๊ฒƒ. ๊ณต๋ถ€๋ฅผ ํ•˜๋ ค๊ณ  ํ•ด๋„ ๋ฌด์Šจ ๊ตฌ์กฐ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๊ณ  ๋ฌด์—‡๋ณด๋‹ค ๋ณต์‚ฌํ•˜๊ธฐ ๊ธฐ๋Šฅ์€ ๋Œ€์ฒด์ ์œผ๋กœ ํ…์ŠคํŠธ์— ํ•ด๋‹นํ•˜๋Š” ์ •๋ณด ๋ฟ์ด์—ˆ๋‹ค. ๋‚˜๋Š” List์— ์žˆ๋Š” 6๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๋ฐ›์•„ ๋ณต์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์€๊ฑด๋ฐ, ๋ฌธ๋ฒ•์„ ์•„์˜ˆ ๋ชจ๋ฅด๋‹ˆ ์–ด๋–ป๊ฒŒ ์ฐพ์•„๋ณด๊ณ  ์‘์šฉํ•ด์•ผํ• ์ง€ ๋ง‰๋ง‰ํ–ˆ๋‹ค.

 

์„œ๋ก ์ด ๊ธธ์—ˆ๋‹ค. ๋ณ€๋ช…์˜ ์‹œ๊ฐ„์„ ๊ฐ€์ ธ์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฒฐ๋ก ์„ ๋งํ•˜์ž๋ฉด ์ด ๊ธฐ๋Šฅ์€ GPT๊ฐ€ ๋งŒ๋“ค์—ˆ๋‹ค. ์•„์˜ˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•œ ํ›„ ๋‹ค์‹œ ํ”Œ์ ์„ ์‹œ๋„ํ• ๊นŒ๋ผ๋Š” ๊ณ ๋ฏผ๋„ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ด๋ฉด์„œ ์ž์‹ ์— ๋Œ€ํ•œ ๋น ๋ฅธ ๊ฐ๊ด€ํ™”๋Š” ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค ์ƒ๊ฐํ•œ๋‹ค. ํ˜„์žฌ ๋‚˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ๋Šฅ๋ ฅ์ด ์—†๊ณ , ์–ธ์ œ๋‚˜ ๋ˆ„๊ตฐ๊ฐ€์˜ ์ฝ”๋“œ๋ฅผ ๋”ฐ์™€ ๊ณต๋ถ€ํ–ˆ์„๋•Œ ๊ฐ€์žฅ ํฐ ๊ฑธ์Œ์„ ๋‚˜์•„๊ฐ”์œผ๋‹ˆ GPT๊ฐ€ ๋งŒ๋“ค์–ด์ค€ ์ฝ”๋“œ๋ฅผ ํ† ๋Œ€๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณต๋ถ€ํ•ด๋ณด๋ ค ํ•œ๋‹ค.(๋๋‚ด๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ•์˜๋„ ์ˆ˜๊ฐ•ํ•ด๋ด์•ผ๊ฒ ๋‹ค.)

 

๊ฒฐ๋ก  : ์ด ๊ธฐ๋Šฅ์€ GPT๊ฐ€ ๋งŒ๋“ค์—ˆ๋‹ค.

 

 

 

 

โ–ก ๋ณต์‚ฌํ•˜๊ธฐ ์ด๋ฏธ์ง€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ฐ 6๊ฐœ์˜ ์š”์†Œ๋“ค์ด ๋ณต์‚ฌ๋œ๋‹ค.

 

<img src="css/copy.png" alt="copy" class="image">

 

copy.png๋ฅผ ๋„ฃ์—ˆ๋‹ค. ์ด ์ด๋ฏธ์ง€๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ณต์‚ฌํ•˜๊ธฐ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค.

 

List ํ˜•ํƒœ์ธ 6์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ๋ณต์‚ฌ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 


 

 

 

 

 

3.  node.js ์„ค์น˜ํ•˜๊ธฐ. (์ด ๊ธฐ๋Šฅ๋งŒ ์ˆ˜ํ–‰ํ• ๊ฑฐ๋ฉด ์„ค์น˜ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.)

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ๋‚˜๋Š” ๋ฌด์ž‘์ • node.js๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ธฐ๋Šฅ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด ์ด ๋ถ€๋ถ„์€ ์ดํ–‰ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

์Šคํ”„๋งMVC๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ JavaScript ํŒŒ์ผ์˜ ์ •์ ํŒŒ์ผ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฑฐ๊ธฐ๋‹ค ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—๋Š” ThymeLeaf๋ฅผ ์„ค์น˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— node.js๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๋„ node.js ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.

 

 

 

โ–ก ๋งํฌ ๋“ค์–ด๊ฐ€๊ธฐ.

 

https://nodejs.org/en

 

Node.js — Run JavaScript Everywhere

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

 

 

โ–ก ๋ฉ”์ธ ํ™”๋ฉด ์† Download(LTS) ๋ˆ„๋ฅด๊ธฐ

LTS ๋ฒ„์ „์ด Long Temp Support๋กœ ์žฅ๊ธฐ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฒ„์ „์ด๊ธฐ ๋•Œ๋ฌธ์— LTS ๋ฒ„์ „์œผ๋กœ ๋‹ค์šด๋ฐ›์„ ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

 

 

 

 

โ–ก ์„ค์น˜ํ•˜๊ธฐ (ํ•˜๋˜๋Œ€๋กœ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.)

 

 

 

โ–ก ํ„ฐ๋ฏธ๋„์— ๊ฐ€์„œ ์„ค์น˜ ํ™•์ธํ•˜๊ธฐ.

    node -v ์ž…๋ ฅ

 

 

 

โ–ก node.js๋Š” ๋ฌด์—‡์ธ๊ฐ€?

 

node.js๋ž€ Chrome V8 JavaScript ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ JavaScript ๋Ÿฐํƒ€์ž„์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋Ÿฐํƒ€์ž„์€ ํŠน์ • ์–ธ์–ด๋กœ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋œปํ•œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” HTML์— ์ข…์†๋˜์–ด ์žˆ๋Š” ์–ธ์–ด๋กœ HTML ์กฐ์ž‘๊ณผ ๋ณ€๊ฒฝ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•ด์„์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์›๋ž˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ๊ฑด๋ฐ, node.js๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ๊ณณ์—์„œ๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 

node.js๋Š” ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์ฑ„ํŒ…์„œ๋น„์Šค์™€ ๊ฐ™์ด ์š”์ฒญ์ด ํ•œ๋ฒˆ์— ๋งŽ์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ณณ์— ์šฉ์ดํ•˜๋‹ค. ์š”์ฒญ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์€ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์š”์ฒญ์„ ํ•œ๋ฒˆ์— ๋ฐ›์•„ ์ˆœ์„œ๋ฅผ ์ƒ๊ด€ํ•˜์ง€ ์•Š๊ณ  ์†๋„๊ฐ€ ๋น ๋ฅธ ๊ฒƒ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๊ณ ๊ฐ์ด ์ž์‹ ์˜ ์ˆœ์„œ๊ฐ€ ์˜ฌ ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

 

 

 


 

 

 

 

 

4.  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ถ„์„ํ•˜๊ธฐ.

 

document.addEventListener("DOMContentLoaded", () => {

 

document๋Š” ์›นํŽ˜์ด์ง€ ์ž์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. HTML ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ณ ์ž ํ•  ๋•Œ ๋ฌด์กฐ๊ฑด ์จ์•ผํ•œ๋‹ค. addEventListener๋Š” ์–ด๋–ค ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, document.์— ๋ถ™์–ด์žˆ์œผ๋‹ˆ ๋”์— ์–ด๋–ค ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ ค๊ณ  ํ•œ๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด์ œ "DOMContentLoaded"๋ฅผ ๋ณด๋ฉด ๋”์— ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. "DOMCotentLoaded"๋Š” ๋”ํŠธ๋ฆฌ ๊ตฌ์„ฑ์ด ์™„์ „ํžˆ ๋๋‚œ ํ›„ ๋”์— ์ ‘๊ทผํ•˜๋„๋ก ํ•œ๋‹ค. ๊ทธ๋กœ ์ธํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์„ ๋ฐฉ์ง€ํ•ด์ค€๋‹ค.

 

ํ•ฉ์ณ์„œ ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•˜์ž๋ฉด, HTML์— ์ ‘๊ทผํ• ๊ฑด๋ฐ(document) ๋”ํŠธ๋ฆฌ ๊ตฌ์„ฑ์ด ์™„์ „ํžˆ ๋๋‚œ ํ›„ ๋”์— ์ ‘๊ทผํ•˜๋Š”("DOMContentLoaded") ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ฒ ๋‹ค(addEventListener)

 

์—ฌ๊ธฐ์„œ ๋”ํŠธ๋ฆฌ๋Š” HTML์˜ ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์œผ๋กœ, ๋”ํŠธ๋ฆฌ ๊ตฌ์„ฑ์ด ์™„์ „ํžˆ ๋๋‚œ ํ›„๋ผ๋Š” ๊ฒƒ์€ HTML์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์ธ <body> <h1> ๋“ฑ์ด ๋ชจ๋“  ๊ตฌ์„ฑ์„ ์™„๋ฃŒํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋”์€ HTML ํ˜น์€ XML ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์›นํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” HTML ๋ฌธ์„œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ฝ์–ด๋“ค์—ฌ ๊ฐ์ฒด ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด JavaScript ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋ฌธ์„œ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ, ์ถ”๊ฐ€, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋”ํŠธ๋ฆฌ ๊ตฌ์„ฑ์ด ๋๋‚œ ํ›„ ๋”์— ์ ‘๊ทผํ•˜์ž๋Š” ๋ง์€ HTML์˜ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ํŠธ๋ฆฌ๋กœ ๋งŒ๋“  ํ›„์— JavaScript๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ผ ์ •๋„๋กœ ํ•ด์„ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

function copyNumbers()

 

function์€ ํ•จ์ˆ˜๋กœ ์ž๋ฐ”์—์„  ๋ฉ”์„œ๋“œ์™€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ํ•จ์ˆ˜๋กœ copyNumbers๋ฅผ ์ •์˜ํ–ˆ๋Š”๋ฐ, copyNumbers๋Š” ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง€๋ฉฐ ๋™์ž‘์„ ๋ฌถ์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

const numbers = Array.from(document.querySelectorAll(".second h1")).map(el => el.textContent.trim());
const numbersString = numbers.join(" ");

 

const์™€ ํ•จ๊ป˜ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๊ฐ’์ด ํ•ด๋‹น ๋ฒ”์œ„ ๋‚ด์—์„œ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋œ๋‹ค. ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ์„ ์–ธํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ ์–ธ๋œ ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. ์›๋ž˜๋Š” var๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๋‹ค. var์˜ ๊ฒฝ์šฐ ์„ ์–ธ๋œ ๊ฐ’์ด ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฒจ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณค ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ let(์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅ, ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ) ํ˜น์€ const(์—…๋ฐ์ดํŠธ, ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ)๊ฐ€ ํ•„์š”ํ•ด์ง„ ์ด์œ ๊ฐ€ ๋๋‹ค. 

 

document.querySelectorAll(".second h1")์€ HTML์— ์žˆ๋Š” second ๋ถ€๋ถ„์˜ h1์˜ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•œ ํ›„, Array.from์„ ํ†ตํ•ด NodeList๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ ํ›„ map์€ ๊ฐ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•œ ํ›„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด el์€ map์— ์˜ํ•ด ์˜ฎ๊ฒจ์ง„ ๊ฐ ๋”์˜ ์š”์†Œ๊ฐ€ ๋˜๋ฉฐ, second์— ์žˆ๋Š” ๋ชจ๋“  h1์„ ์„ ํƒํ•œ๋‹คํ–ˆ์œผ๋‹ˆ ๊ทธ ์š”์†Œ๋“ค์ด map์— ์˜ํ•ด el๋กœ ์˜ฎ๊ฒจ์ง„ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ el์€ textContent.trim์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

textContent๋Š” <h1> </h1> ํƒœ๊ทธ ์† ํ…์ŠคํŠธ ์ปจํ…์ธ ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. HTML์„ ์‚ดํŽด๋ณด๋ฉด <h1 th:text="${Number1}"> RandomNumber</h1>์œผ๋กœ ๋˜์–ด์žˆ๋‹ค. ์ด ํ…์ŠคํŠธ ์†์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์€ Number1์— ๋“ค์–ด๊ฐ„ ์ˆซ์ž์ผํ…Œ๋‹ˆ ์ˆซ์ž๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. .trim์€ ๋ฌธ์ž์—ด ์ขŒ์šฐ์— ์žˆ๋Š” ๊ณต๋ฐฑ์„ ์—†์• ์ค€๋‹ค. 

 

๋งŒ์•ฝ 1,2,3,4,5,6์ด๋ž€ ์ˆซ์ž๊ฐ€ ๋กœ๋˜ ๋ฒˆํ˜ธ๋กœ ๋‚˜์™”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด ํ˜„์žฌ "1" , "2" , "3" , "4" , "5" , "6" ์ด๋Ÿฐ ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

Array ์ธ์Šคํ„ด์Šค์˜ join( ) ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์‰ผํ‘œ๋‚˜ ์ง€์ •๋œ ๊ตฌ๋ถ„ ๋ฌธ์ž์—ด๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์—ฐ๊ฒฐํ•œ ์ƒˆ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด์ œ "1 2 3 4 5 6"์œผ๋กœ numberString์— ์˜ฎ๊ฒจ์ง€๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ (" ") ๋„์–ด์“ฐ๊ธฐ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ("")๋ผ๊ณ  ์ง€์ •ํ•˜๋ฉด "123456" ํ˜•์‹์œผ๋กœ ๋„์–ด์“ฐ๊ธฐ ์—†์ด ๋‚˜์—ด๋  ๊ฒƒ์ด๋‹ค.

 

 

 

navigator.clipboard.writeText(numbersString).then(() => {
        alert("๋Ÿญํ‚ค ๋กœ๋˜ ์ˆซ์ž ๋ณต์‚ฌ ์™„๋ฃŒ!");
    }).catch(err => {
        console.error("๋ณต์‚ฌ ์‹คํŒจ:", err);
        alert("๋ณต์‚ฌ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.");
    });
}

 

navigator.clipboard.writeText๋Š” Clipboard API๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค. Clipboard API๋Š” Promise ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ฆฝ ๋ณด๋“œ ๋‚ด์šฉ์„ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด API๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์‹œ์ ์— ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ writeText ๋ฉ”์„œ๋“œ๊ฐ€ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋กœ Promise๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ๋‹จ, ๊ถŒํ•œ์ด ์žˆ๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™œ์„ฑํ™” ๋˜์–ด์žˆ๋Š” ์ƒํƒœ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

numberString์˜ write๋ฅผ ์ž˜ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ ๋‹ค์Œ์„  then ๋ฉ”์„œ๋“œ ์ธ์ž๋กœ ๋„˜๊ฒจ์ค€๋‹ค. ์—ฌ๊ธฐ์„  alert์ธ ๊ฒฝ๊ณ  ๋Œ€ํ™” ์ƒ์ž์— ํ‘œ์‹œํ•  ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ์„ค์ •ํ–ˆ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด "๋Ÿญํ‚ค ๋กœ๋˜ ์ˆซ์ž ๋ณต์‚ฌ ์™„๋ฃŒ!" ๋ผ๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค.

 

 catch๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ๋ฐœ์ƒ์ง€์ ์—์„œ alert๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ํ–ˆ๋‹ค. ์˜ค๋ฅ˜๋Š” console.error๋กœ ์ถœ๋ ฅํ•˜๋„๋ก ํ•˜๋Š”๋ฐ, "๋ณต์‚ฌ ์‹คํŒจ"๋ผ๋Š” ๋ฉ”์‹œ์ง€๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณด๊ฒŒ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  err์— ์‹ค์ œ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ๊ฐ์ฒด๋ฅผ ๋‹ด๋Š”๋‹ค. alert์— ๋‹ด๊ธด "๋ณต์‚ฌ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค." ๋ฉ”์‹œ์ง€๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ฒŒ๋œ๋‹ค. 

 

 

 

const copyImage = document.querySelector("img[alt='copy']");
if (copyImage) {
    copyImage.addEventListener("click", copyNumbers);
}

 

const๋Š” ์ž๋ฐ”์—์„œ final๊ณผ ๋น„์Šทํ•˜์—ฌ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค.(์ฐธ์กฐํ˜•์€ ์ˆ˜์ •๊ฐ€๋Šฅ) ์ด๋ฏธ์ง€ ํƒœ๊ทธ ์ค‘ alt ์†์„ฑ์ด copy๋ผ๊ณ  ์ง€์ •๋œ ์ฟผ๋ฆฌ๋ฅผ ์„ ํƒํ•˜์—ฌ copyImage๋ผ๊ณ  ๋ณ€์ˆ˜๋ช…์„ ๋ถ™์—ฌ์คฌ๋‹ค. ๋งŒ์•ฝ copyImage ๊ฐ์ฒด๊ฐ€ click์ด๋ผ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์œ„์—์„œ ์ •์˜ํ•œ function์ธ copyNumbers๋ฅผ ์‹œํ–‰ํ•˜๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค.

 

์‰ฝ๊ฒŒ ๊ฐ„์ถ”๋ฆฌ๋ฉด copyImage๋Š” alt๋ฅผ copy๋ผ๊ณ  ์ง€์ •ํ•œ ๊ฒƒ์ด๊ณ  ์ด๊ฒŒ ๋ˆŒ๋ฆฌ๋ฉด copyNumbers ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ผ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

 

Q. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์ž๋ฐ”๋ž‘์€ ๋‹ค๋ฅด๊ฒŒ ์˜จ์ ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์ด ์กฐ๊ธˆ ๋‹ค๋ฅธ ๊ฒƒ ๊ฐ™๋‹ค.

 

A. ๋ณดํ†ต ์ž๋ฐ”์—์„œ ์˜จ์ ์€ ๊ฐ์ฒด์˜ ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋„ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š”๋ฐ ์ฒด์ด๋‹์ด๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ๋” ์ถ”๊ฐ€๋œ๋‹ค. ์ฒด์ด๋‹์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋–ค ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๊ทธ ๋ฐ˜ํ™˜๋œ ๊ฐ’์„ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ์— ๋ฐ”๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด chocolate.sell(2); chocolate.buy(1); ๋ผ๊ณ  ๊ฐ€์ •ํ•œ ๊ฒฝ์šฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” chocolate.sell(2).buy(1);์œผ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 


 

 

 

 

5.  HTML์— ๋งŒ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ฐ๊ฒฐํ•˜๊ธฐ.

 

 

โ–ก ๊ฒฝ๋กœ ํ™•์ธํ•˜๊ธฐ.

 

static๊ณผ css๊ฐ€ ๋”ฐ๋กœ ๋ถ„๋ฆฌ๋˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์ผ๋‹จ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” ์ €์ ˆ๋กœ ํ•ฉํ•ด์กŒ๋‹ค. js ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ์•ˆ๋งŒ๋“ค๊ณ  css์™€ ๊ฐ™์ด ๋„ฃ์–ด์„œ ๊ทธ๋Ÿฐ๊ฑด์ง€ ์ดˆ๋ฐ˜์— ๊ฒฝ๋กœ ์ธ์‹์„ ์ž˜ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ js ๋””๋ ‰ํ† ๋ฆฌ ํ•˜์œ„์— copy.js๋ฅผ ๋„ฃ์—ˆ๋‹ค.

 

 

โ–ก ๊ฒฝ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ.

<head>
    <meta charset="UTF-8">
    <title>๋Ÿญํ‚ค๋น„ํ‚ค ๋กœ๋˜</title>
    <link rel="stylesheet" href="css/style.css" type="text/css">
    <script src="css/js/copy.js" defer></script>
</head>

 

 

 

 


 

 

 

 

6.  ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ

 


โ–ก
 ์ดˆ๊ธฐ ๊ตฌ์ƒ

 

  ์ดˆ๋ฐ˜ ๊ตฌ์ƒ์—์„œ๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•  ์˜ˆ์ •์œผ๋กœ ๋Œ“๊ธ€์ฐฝ์€ ์—†์—ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ดํ•ด๋„๋ฅผ ํ‚ค์šฐ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ์ค‘๊ฐ„์— ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค. ๋น„์Šทํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ตœ๋Œ€ํ•œ ๋…ธ๋ ฅํ–ˆ๋‹ค. ์ž˜ ์•ˆ๋ ์ง€๋„ ๋ชจ๋ฅธ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์ดˆ๋ฐ˜์— ๊ธฐ๋Œ€ํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์ข‹์€ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

โ–ก ๋ณ€ํ™”

 


(1)

 

 

(2)

 

 

(3)

 

 

 

 

โ–ก ๋งˆ๋ฌด๋ฆฌํ•˜๋Š” ๋ง

 

 ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ๋งŒ ์•„๋‹ˆ์—ˆ๋‹ค๋ฉด ๋” ๋นจ๋ฆฌ ๋๋ƒˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋ธ”๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋ฉด ์ •๋ง ๋งŽ์€ ๊ฐœ๋…์„ ๋ฐฐ์šฐ๊ณ  ์–ด๋–ค ๊ตฌ์กฐ์ธ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ๊ฒŒ๋˜๋Š” ์ด์ ์€ ํ™•์‹คํ•˜๋‹ค. ํ•˜๋‚˜ ์ž‘์„ฑํ•˜๋Š”๋ฐ ๋ช‡์‹œ๊ฐ„์”ฉ ๊ฑธ๋ฆฌ๊ฑฐ๋‹ค ๊ฐ€๋” ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š๋Š” ๊ฐœ๋…์— ๋ง‰ํžˆ๋ฉด... ์ •๋ง 2-3์ผ ์ •๋„ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ต‰์žฅํžˆ ์‰ฌ์šด ํ”„๋กœ์ ํŠธ์˜€์ง€๋งŒ ๊ทธ๋งŒํผ ์–ด๋–ค์‹์œผ๋กœ ์ด๋ค„์ง€๋Š”์ง€ ํ™•์‹คํ•˜๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฑฐ ๊ฐ™๋‹ค.

 ์Šคํ”„๋งMVC ๊ฐ•์˜๋ฅผ ๋“ฃ๊ธฐ ์ „ ๊ฐ„๋‹จํ•˜๊ณ  ์งง์€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ด๋ณด๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์ •๋ง ์ž˜ํ•œ ์„ ํƒ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์ด์ œ ์Šคํ”„๋งMVC ๊ฐ•์˜๋„ ๋“ฃ๊ณ , ์ž๋ฐ”์™„์ „์ •๋ณต ๋ธ”๋กœ๊ทธ๋„ ์—ด์‹ฌํžˆ ์ž‘์„ฑํ•˜๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋„ ์ˆ˜๊ฐ•ํ•ด๋ด์•ผ๊ฒ ๋‹ค.




 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 

 

- node.js ์„ค์น˜

 

[mac OS] node.js ์„ค์น˜ํ•˜๊ธฐ

๐Ÿ“Node.js๋ž€? - Node.js๋Š” Chrome V8 JavaScript ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ JavaScript ๋Ÿฐํƒ€์ž„์ž…๋‹ˆ๋‹ค. ๐Ÿ“macOS์—์„œ Node.js ์„ค์น˜ ๋ฐฉ๋ฒ• 1. ์‚ฌ์ดํŠธ (https://nodejs.org/en ) ์ ‘์† Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaSc

favonius.tistory.com

 

 

- Node.js

 

[๊ฐœ๋ฐœ ๊ธฐ๋ณธ ์ง€์‹] Node.js๋ž€?

"Node.js๋Š” Chrome V8 JavaScript ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ JavaScript ๋Ÿฐํƒ€์ž„์ž…๋‹ˆ๋‹ค" ?? ๐Ÿค”๊ทธ๋ž˜์„œ ๋ญ”๋ฐ์š”?

velog.io

 

 

- documet

 

์ฝ”๋”ฉ๊ต์œก ํ‹ฐ์”จํ”ผ์Šค์ฟจ

4์ฐจ์‚ฐ์—…ํ˜๋ช…, ์ฝ”๋”ฉ๊ต์œก, ์†Œํ”„ํŠธ์›จ์–ด๊ต์œก, ์ฝ”๋”ฉ๊ธฐ์ดˆ, SW์ฝ”๋”ฉ, ๊ธฐ์ดˆ์ฝ”๋”ฉ๋ถ€ํ„ฐ ์ž๋ฐ” ํŒŒ์ด์ฌ ๋“ฑ

tcpschool.com

 

 

- addEventListener

 

[JAVASCRIPT] addEventListener()

addEventListener()๋Š” documnet ์š”์†Œ์— event๋ฅผ ๋ถ€์—ฌํ•  ๋•Œ ์‚ฌ์šฉ. addEventListener(event, ์‹คํ–‰ํ•  ํ•จ์ˆ˜) ๋กœ ์ •์˜ํ•œ๋‹ค. ์ด 3๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. button.addEventListener('์ด๋ฒคํŠธ', ํ•จ์ˆ˜๋ช…) button.addEventListener('

ghrnwjd.tistory.com

 

 

- dom

 

[JavaScript] DOM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

JavaScript๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜์˜ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•ด์„œ ๋“ฃ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ์ด ๊ฐ์ฒด๋“ค์ด ...

blog.naver.com

 

 

- DomContentLoaded

 

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] DOMContentLoaded ์ด๋ฒคํŠธ

์•ˆ๋…•ํ•˜์„ธ์š”! ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ DOMContentLoaded ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.๋”ํŠธ๋ฆฌ ๋ถ„์„์ด ๋๋‚˜๋ฉด ๋ฐœ์ƒ์ฆ‰, ๋”ํŠธ๋ฆฌ๊ฐ€ ๋‹ค ๋งŒ๋“ค์–ด์ง„ ํ›„์— ๋”์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ๋•Œ๋ฌธ์—, ๋”์ด ์ƒ์„ฑ๋˜๊ธฐ

velog.io

 

 

- event

 

Javascript event ๋‹ค๋ฃจ๊ธฐ(eventListener๋ฅผ ์“ฐ๋Š” ์ด์œ )

event๋ž€?? event๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์€?? event listener vs event handler??

velog.io

 

 

- eventListener

 

JavaScript ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ(eventListener)

๋‚˜.. ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ ๋ชจ๋ฅด๋„ค โœ addEventListener EventTarget ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ. ์ง€์ •ํ•œ ์œ ํ˜•์˜ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์„ค์ •ํ•œ๋‹ค. = ํ˜ธ์ถœ ์‹œ ์ธ์ž๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋Œ€์ƒ Element, Do

pottatt0.tistory.com

 

 

- ๋”ํŠธ๋ฆฌ

 

DOM ํŠธ๋ฆฌ

 

ko.javascript.info

 

 

- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋… ๋ชจ์Œ

 

JavaScript | MDN

JavaScript (JS)๋Š” ๊ฐ€๋ฒผ์šด, ์ธํ„ฐํ”„๋ฆฌํ„ฐ ํ˜น์€ just-in-time ์ปดํŒŒ์ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ์ผ๊ธ‰ ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์›น ํŽ˜์ด์ง€๋ฅผ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋กœ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์ง€๋งŒ, Node.js, Apache CouchDB, Adobe Acrobat์ฒ˜๋Ÿผ

developer.mozilla.org

 

 

- trim

 

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ] trim()

trim() : ๋ฌธ์žฅ(๋ฌธ์ž์—ด, string)์—์„œ, ์–‘๋์— ์žˆ๋Š” ๊ณต๋ฐฑ๋ฌธ์ž๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•œ๋‹ค. ์ต์Šคํ”Œ๋กœ๋Ÿฌ(ie) 9 ์ด์ƒ & ๊ทธ์™ธ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. "trim()"์œผ๋กœ, " "๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด, "textContent"๋‚˜

tonks.tistory.com

 

 

- map

 

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] javascript map() ์‚ฌ์šฉํ•˜๊ธฐ

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] javascript map() ์‚ฌ์šฉํ•˜๊ธฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ for๋ฌธ์˜ ๋‚จ์šฉ์„ ๋ง‰๊ธฐ์œ„ํ•ด ๋งŒ๋“ค์–ด๋‚ธ ๋ฐฐ์—ดํ•จ์ˆ˜! ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ์ˆœํ™˜ํ•˜๋ฉฐ ์–ด๋– ํ•œ ๊ฐ€๊ณต์„ ๊ฐ€ํ•˜๊ฑฐ๋‚˜, ๋ฐฐ์—ด์š”์†Œ ์•ˆ์˜ ์š”์†Œ๋ฅผ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜ ํ•  ๋•Œ

devinserengeti.tistory.com

 

 

- clipboard API

 

Clipboard API ์‚ฌ์šฉํ•˜๊ธฐ

๊ธฐ์กด์— ์›จ์ด๋ธŒ์˜จ์—์„œ ์—˜๋ฆฌ๋จผํŠธ์˜ ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ๋Š” ๊ฐ™์€ ํƒญ ๋‚ด์—์„œ๋งŒ ๊ฐ€๋Šฅํ–ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๊ธฐ์กด์—๋Š” ํด๋ฆฝ๋ณด๋“œ๊ฐ€ ์•„๋‹Œ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ์ธ Vuex๋ฅผ ํ™œ์šฉํ•ด ๋ณต์‚ฌ๊ฐ€ ๋œ ์—˜๋ฆฌ๋จผํŠธ์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌ ํ–ˆ

velog.io

 

 

- ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

 

๐Ÿ“š ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ(Exception)

์˜ˆ์™ธ (exception) ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์˜ˆ์™ธ(exception)๋ž€ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜์—ฌ ๋” ์ด์ƒ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์„ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌธ๋ฒ•์ ์ธ ์˜ค๋ฅ˜์ด๊ฑฐ๋‚˜ ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†

inpa.tistory.com

 

 

- ์ฒด์ด๋‹

 

[JavaScript] Method Chaining (๋ฉ”์„œ๋“œ ์ฒด์ด๋‹)

๊ณผ์ œ๋ฅผ ํ•˜๋˜ ์ค‘ ํ•จ์ˆ˜์˜ return๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์ด ์—†๋Š”๋ฐ๋„ this๋ฅผ returnํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ํ™•์žฅ์„ฑ์„ ์œ„ํ•ด return์„ ํ•ด๋‘” ๊ฒƒ์ธ๊ฐ€? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋Š”๋ฐ ๊ฒ€์ƒ‰ํ•ด๋ณด์•„๋„ ๋ช…ํ™•ํ•œ ํ•ด๋‹ต์„ ์ฐพ์ง€ ๋ชปํ–ˆ

developerntraveler.tistory.com

 

 

 

[ ๊ฐ„๋‹จํ•œ ๋Œ“๊ธ€์ฐฝ ๋งŒ๋“ค๊ธฐ (1) ]

 

Spring - [intelliJ,Thymeleaf] ๊ฐ„๋‹จํ•œ ๋Œ“๊ธ€์ฐฝ ๋งŒ๋“ค๊ธฐ(1)

[ @PostMapping์œผ๋กœ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ] Spring - [intelliJ,Thymeleaf] @PostMapping์œผ๋กœ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2) ] Spring - [intelliJ,Thymeleaf] ๋กœ๋˜,

post-this.tistory.com

 

 

 

 


 

 

H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ
๋Œ“๊ธ€ ๊ด€๋ฆฌํ•˜๊ธฐ.

 

 

 

1. H2 ์„ค์น˜ํ•˜๊ธฐ.

 

 

โ–ก ์•„๋ž˜ ๋งํฌ ๋“ค์–ด๊ฐ€๊ธฐ.

 

https://h2database.com/html/main.html

 

H2 Database Engine

H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size     Supp

h2database.com

 

 

โ–ก mac์€ All Platforms ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ.

 

 

 

 

โ–ก ์••์ถ•ํ’€์–ด์ฃผ๊ธฐ.

 

 

 

โ–ก ํ„ฐ๋ฏธ๋„ ๋“ค์–ด๊ฐ€๊ธฐ.

 

1. ์••์ถ•์„ ํ’€์–ด์ค€ ํŒŒ์ผ์˜ ์œ„์น˜๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

    : cd ๊ฒฝ๋กœ/bin

 

2. ๊ถŒํ•œ ๋ถ€์—ฌ

    : chmod 755 h2.sh

 

3. ์ฝ˜์†” ์ ‘์†

    : ./h2.sh

 

 

 


 

 

 

 

2. ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๊ธฐ.

 

โ–ก build.gradle์— H2 ์˜์กด์„ฑ ์ฃผ์ž…

runtimeOnly 'com.h2database:h2'

 

 

 

โ–ก build.gradle์— jpa ์˜์กด์„ฑ ์ฃผ์ž…

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

 

 

 


 

 

 

3. application.properties ์ž‘์„ฑํ•˜๊ธฐ.

 

โ–ก  DataSource ์„ค์ •ํ•˜๊ธฐ.

spring.application.name=LuckyLotto

spring.datasource.url=jdbc:h2:file:./data/mydb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

 

h2๋Š” ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด๋‹ค. ๊ทธ๋ƒฅ ์‰ฝ๊ฒŒ ์ž๋ฐ”์™€ ์•ˆ์„ฑ๋งž์ถคํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์ฃผ๋กœ ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. h2๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ง€์›ํ•˜๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ธ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋„์šฐ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žฌ๊ฐ€๋™๋  ๋•Œ๋งˆ๋‹ค ์ดˆ๊ธฐํ™”๊ฐ€ ๋œ๋‹ค.

 

url = ์„ ์„ค์ •ํ•˜์—ฌ ๋‚˜์ค‘์— h2 ํ”„๋กœ๊ทธ๋žจ ์ฐฝ์— ์ ์–ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. driver ์ฝ”๋“œ๋Š” Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉํ•  JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ง€์ •ํ•˜๋Š” ์„ค์ •์ด๋‹ค. sa๋Š” ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด๊ณ  password๋Š” ๊ทธ๋ƒฅ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋‹ค. 

 

 

 

โ–ก  DataSource ์„ค์ •ํ•˜๊ธฐ.

spring.jpa.hibernate.ddl-auto=update
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

 

hibernate๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•˜๋ฉฐ update๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ ํ…Œ์ด๋ธ”์ด ์—†์œผ๋ฉด ์ƒ์„ฑํ•˜๊ณ  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด ์ˆ˜์ •ํ•˜๋„๋ก ํ•œ๋‹ค. ํ˜„์žฌ๋Š” ๊ฐœ๋ฐœ ์ค‘์ด๋‹ˆ update๋ผ๊ณ  ์ ์—ˆ์ง€๋งŒ, ๋งŒ์•ฝ ์šด์˜์„ ํ•˜๊ฒŒ๋œ๋‹ค๋ฉด validate๋‚˜ none์„ ๊ถŒ์žฅํ•œ๋‹ค. 

 

console.enabled๋กœ ์ฝ˜์†”์„ ํ™œ์„ฑํ™”ํ•œ๋‹ค. ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด entity์— ์ ์–ด๋‘” id์™€ content ์š”์†Œ๋“ค์ด ๋ณด์ด์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. console.path๋ฅผ ํ†ตํ•ด ์ฝ˜์†”์— ์ ‘๊ทผํ•  URL์„ ์ง€์ •ํ•œ๋‹ค.

 

 

 


 

 

 

4. h2 ๋“ค์–ด๊ฐ€๊ธฐ.

 

โ–ก  ๋ธŒ๋ผ์šฐ์ €์— h2 ํ”„๋กœ๊ทธ๋žจ ์ ‘์†ํ•˜๊ธฐ.

 

http://localhost:8080/h2-console

 

h2-console์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๊ฒฝ๋กœ ์ด๋ฆ„์œผ๋กœ ํ–ˆ์œผ๋ฉด ๊ทธ ์ด๋ฆ„์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

 

 

โ–ก  ์„ค์ •ํ•œ ์ •๋ณด ๋„ฃ๊ธฐ.

JDBC URL: jdbc:h2:file:./data/mydb

User Name: sa

ํŒจ์Šค์›Œ๋“œ๋Š” ์„ค์ • ์•ˆํ–ˆ์œผ๋‹ˆ ๋„˜์–ด๊ฐ€๋ฉด ๋œ๋‹ค.

 

 


 

 

 

5. h2 ์‚ฌ์šฉํ•˜๊ธฐ.

 

โ–ก  ๋Œ“๊ธ€์„ ๋‚จ๊ฒผ๋‹ค.

 

 

โ–ก  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™•์ธํ•ด๋ณด๊ธฐ.

 

1. ์ „์ฒด ์กฐํšŒํ•˜๊ธฐ.

SELECT * FROM COMMENT_LIST;

 

 

2. id๊ฐ€ 21๋ฒˆ์ธ ๋Œ“๊ธ€ ์‚ญ์ œํ•ด๋ณด๊ธฐ.

DELETE FROM COMMENT_LIST WHERE id = 21;

 

ํŽ˜์ด์ง€์—์„œ๋„ ์‚ญ์ œ๋œ ๊ฑธ ํ™•์ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 


 

 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 

 

 

 

- H2์— ๋Œ€ํ•˜์—ฌ

 

H2 Database ๋ž€? ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ๋ฒ•?

H2 Database ๋ž€? H2๋Š” ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด๋‹ค. ์žฅ์  ๋”ฐ๋กœ ์„ค์น˜๊ฐ€ ํ•„์š”์—†๋‹ค ์šฉ๋Ÿ‰์ด ๋งค์šฐ ๊ฐ€๋ณ๋‹ค ์›น์šฉ ์ฝ˜์†”(์ฟผ๋ฆฌํˆด) ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์šฉ ๋กœ์ปฌDB๋กœ ์‚ฌ์šฉ ์šฉ์ด ํŠน์ง• JAVA๋กœ ์ž‘์„ฑ

yjkim-dev.tistory.com

 

 

 

- H2์— ๋Œ€ํ•˜์—ฌ

 

h2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์น˜ ๋ฐ ์‹คํ–‰๋ฐฉ๋ฒ• ์ •๋ฆฌ

๊ฝค ๊ฐ€๋ฒผ์šด DB์ด๊ธฐ์— ์‹ค๋ฌด์—์„œ local์— ์„ค์น˜ํ•ด์„œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค๋Š” h2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.๋‹จ์ ์œผ๋กœ๋Š” ๋กœ์ปฌ์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปดํ“จํ„ฐ ๋‹ค ๋„๋ฉด ๋‚ ์•„๊ฐ‘๋‹ˆ๋‹ค.  ๐Ÿ˜‡ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”.

gray-tree.tistory.com

 

 

 

- H2 ์—ฐ๋™๋ฐฉ๋ฒ•

 

[Spring Boot] H2 ์—ฐ๋™ ๋ฐฉ๋ฒ•

๐Ÿ’ก build.gradle์— dependency ์ถ”๊ฐ€ ๐Ÿ’ก application.properties ํ˜•์‹ ๐Ÿ’ก application.yml ํ˜•์‹

velog.io

 

 

 

- H2 ์‚ฌ์šฉ์„ค์ •

 

Springboot + H2 Console ์‚ฌ์šฉ ์„ค์ •

H2 Console์ด๋ž€? - ์ž‘์€ ์šฉ๋Ÿ‰(2M)์˜ ์ž‘๊ณ  ๋น ๋ฅธ DB - JDBC API ์ง€์› - ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ Console ์ง€์› - ์ธ ๋ฉ”๋ชจ๋ฆฌ(In-Memory) ๊ธฐ๋ฐ˜ Server ๋ชจ๋“œ์™€ Embedded ๋ชจ๋“œ ์ง€์› ์ธ ๋ฉ”๋ชจ๋ฆฌ(In-Memory) DB ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €

jamie95.tistory.com

 

 

 

 

[ @PostMapping์œผ๋กœ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ]

 

Spring - [intelliJ,Thymeleaf] @PostMapping์œผ๋กœ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2) ] Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2)[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„

post-this.tistory.com

 

 

 


 

 

๋Œ“๊ธ€์„ ์ €์žฅํ•˜์—ฌ
์ตœ๊ทผ ๋Œ“๊ธ€ 10๊ฐœ๋งŒ ํ™”๋ฉด์— ์ถœ๋ ฅ๋œ๋‹ค.


 

 

1. ๋™์ž‘ํ™”๋ฉด๊ณผ ์ „์ฒด์ฝ”๋“œ

 

 

 

๋™์ž‘ํ™”๋ฉด

 

 

 

 

 

์ „์ฒด์ฝ”๋“œ

 

GitHub - hyeong-ing/LuckyLotto: ๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค. Contribute to hyeong-ing/LuckyLotto development by creating an account on GitHub.

github.com

 

 

 

 


 

 

 

 

2. ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€ ์ƒ๊ฐํ•˜๊ธฐ ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป

 

+ ์ด๊ฒƒ์ €๊ฒƒ ์‹œ๋„ํ•ด๋ณด๋ฉด์„œ ๋งŒ๋“ ๊ฑฐ๋ผ, DI๋‚˜ ํด๋ฆฐ์ฝ”๋“œ๋ฅผ ์ง€ํ‚ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ„๋‹จํ•œ ๋Œ“๊ธ€์ฐฝ์„ ๋งŒ๋“ค๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

 

โ–ก ๋Œ“๊ธ€์€ ๊ฐ€์žฅ ์ตœ์‹ ์ธ 10๊ฐœ๋งŒ ์ถœ๋ ฅ๋œ๋‹ค.

     โ–ป  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊บผ๋‚ผ๋•Œ DESC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 10๊ฐœ๋งŒ ๋ณด์ด๋„๋ก ํ•œ๋‹ค.

 

โ–ก 25์ž ์ด์ƒ์€ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

     โ–ป  ๊ธ€์ด 1์ž ์ด์ƒ 25์ž ์ดํ•˜๋กœ ์ €์žฅ๋˜๊ฒŒ ์กฐ๊ฑด์„ ์ œ์‹œํ•œ๋‹ค.

     

โ–ก repository(DB)์™€ ์—ฐ๊ฒฐํ•  entity, Controller, ๋Œ“๊ธ€์„ ์ฒ˜๋ฆฌํ•  Service๋ฅผ ๋งŒ๋“ค๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

 


 

 

 

 

 

3. ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ

 

โ–ก  ๋Œ“๊ธ€์„ ์ž…๋ ฅํ•  ๊ณต๊ฐ„ ๋งŒ๋“ค๊ธฐ.

<form th:action="@{/save}" method="get">
    <input class="write" type="text" name="content" 
    		placeholder ="์งง์€ ๋Œ“๊ธ€ ๋‚จ๊ธฐ๊ธฐ (25์ž์ด๋‚ด)" maxlength="25">
    <button class="save" type="submit"> ์ €์žฅ </button>
</form>

 

input ํƒœ๊ทธ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ์„ ๋ฐ›๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. type์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์žˆ๋‹ค. text, password, radio ๋“ฑ ์žˆ๊ณ  ๊ทธ ์ค‘ ๊ฐ„๋‹จํ•œ ๋Œ“๊ธ€์„ ์ €์žฅํ•˜๋‹ˆ ์†์„ฑ์€ text๋กœ ํ•ด์คฌ๋‹ค. placeholder๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ฐฝ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „ ์•„๋ž˜์ฒ˜๋Ÿผ ๊ธ€์ž๊ฐ€ ๋ณด์ด๋„๋ก ํ•ด์ค€๋‹ค.

 

input์— ๋‹ด๊ธด ๋‚ด์šฉ์€ content๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ณด๋‚ด์ง€๊ฒŒ ๋œ๋‹ค. form์ด ๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•˜๋Š”๋ฐ action์— ์ ์€ save๊ฐ€ ์žˆ๋Š” ๊ณณ์œผ๋กœ(์ปจํŠธ๋กค๋Ÿฌ) ์ „์†กํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 

โ–ก ๋Œ“๊ธ€์ด ๋ณด์—ฌ์ง€๋Š” ๊ณต๊ฐ„ ๋งŒ๋“ค๊ธฐ.

<div class="commentBox">
    <li class="font" th:each="comment : ${comments}" th:text="${comment.content}">
        comment
    </li>
</div>

 

li ํƒœ๊ทธ๋Š” HTML ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ๋˜๋Š” ์•„์ดํ…œ์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฒ€์€์ƒ‰ ์ž‘์€ ์›์ด ํ‘œ์‹œ๋œ๋‹ค${comment.contetn)๋กœ ํ™”๋ฉด์— ํ‘œ์‹œํ•  ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™”๋‹ค. ์ด ๋‚ด์šฉ์€ ์ด 10๊ฐœ ๋Œ“๊ธ€๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ, each ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ํ™”๋ฉด์— ์ฐจ๋ก€๋กœ ์ถœ๋ ฅํ•ด์ค€๋‹ค. 

 

 

 

 

 


 

 

 

 

4. ๊ตฌ์กฐ ์„ค๋ช…

 

๊ถ๊ทน์ ์œผ๋กœ ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉด ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์ €์žฅ์ด ๋˜๋„๋ก ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ €์žฅ๋œ ๋Œ“๊ธ€์„ ๋ฐ›์•„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊นŒ์ง€ ์ €์žฅํ•ด์ค„ controller๊ฐ€ ํ•„์š”ํ•˜๋‹ค. controller๋Š” save๋ผ๋Š” ์•ค๋“œํฌ์ธํŠธ๋กœ ๋Œ“๊ธ€์„ ๋ฐ›์„ ๊ฒƒ์ด๋‹ค. ๋Œ“๊ธ€์—๋Š” ์กฐ๊ฑด์ด ์žˆ์—ˆ๋‹ค. 1์ž ์ด์ƒ 25์ž ์ดํ•˜๋ผ๋Š” ์กฐ๊ฑด์ด์—ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ด ๋ถ€๋ถ„์€ service๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•  ๊ฒƒ์ด๋‹ค. service์— ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์กฐ๊ฑด์ด ๋งž์œผ๋ฉด ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์ €์žฅ์ด ๋˜๋„๋กํ•œ๋‹ค.

๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์ €์žฅ๋œ ๋Œ“๊ธ€ 10๊ฐœ๋ฅผ ๊บผ๋‚ด ํ™”๋ฉด์— ์ถœ๋ ฅํ•  ๊ฒƒ์ด๋‹ค. ๋Œ“๊ธ€ 10๊ฐœ์˜ ์กฐ๊ฑด์€ ๊ฐ€์žฅ ์ตœ์‹ ์— ์ž‘์„ฑ๋œ ๊ฒƒ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ 10๊ฐœ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์กฐ๊ฑด ์ค‘ ๊ฐ€์žฅ ์ตœ์‹ ์— ์ž‘์„ฑ๋œ ๊ฒƒ์ด๋ผ๋Š” ์กฐ๊ฑด์— ๋งž์ถฐ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•  ๊ฒƒ์ด๋‹ค.(๋‚ด๋ฆผ์ฐจ์ˆœ DESC๋กœ) ๋‚˜๋จธ์ง€ ์กฐ๊ฑด์œผ๋กœ 10๊ฐœ๋งŒ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด ๋‚จ์•„์žˆ๋‹ค. 10๊ฐœ๋งŒ ์ถœ๋ ฅ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ page๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋•Œ ์ด ๋ฉ”์„œ๋“œ๋Š” service์— ์ž‘์„ฑํ•œ๋‹ค. service์— return ๊ฐ’์„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ฐ›์•„(๋‚ด๋ฆผ์ฐจ์ˆœ) 10๊ฐœ๋งŒ ์ถœ๋ ฅ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ ํ›„ controller์˜ model์„ ํ†ตํ•ด ๋ฐ›์•„ ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋„๋ก ํ•  ๊ฒƒ์ด๋‹ค.

 

 

 


 

 

 

 

5. Entity์™€ Repository ์ž‘์„ฑํ•˜๊ธฐ.

 

โ–ก Repository

package com.LottoWeb.LuckyLotto.DB;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;


import java.util.List;

public interface BoardRepository extends JpaRepository<Comment, Long> {

    Page<Comment> findAllByOrderByIdDesc(Pageable pageable);
}

 

Jpa๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์ด์šฉํ•œ Jpa๊ธฐ๋Šฅ์€ ๋Œ“๊ธ€์„ ์ €์žฅํ•ด์ฃผ๋Š” save์™€ ๋Œ“๊ธ€์„ ์กฐํšŒํ•˜๋Š” page ๊ทธ๋ฆฌ๊ณ  ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด  CRUD ์ง€์›์ด ์žˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” findAllByOrderByIdDesc๋กœ, ๋ชจ๋“  ๊ฒƒ์„ ์กฐํšŒํ•˜๊ณ  ๊ธฐ์ค€์€ ์•„์ด๋””๋กœ ํ•˜๋ฉฐ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋‚˜์—ดํ•œ๋‹ค ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Page<Comment> ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

โ–ก Entity

package com.LottoWeb.LuckyLotto.DB;

import jakarta.persistence.*;
import lombok.*;


@Entity //๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋งคํ•‘ํ•œ๋‹ค.
@Getter
@NoArgsConstructor (access = AccessLevel.PROTECTED) //ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” ๋””ํดํŠธ ์ƒ์„ฑ์ž ์ƒ์„ฑ
@Table(name = "Comment_List")
public class Comment {

    @Id //์—”ํ‹ฐํ‹ฐ์˜ ์ฃผ์š” ์‹๋ณ„์ž
    @GeneratedValue(strategy = GenerationType.IDENTITY) //์—”ํ‹ฐํ‹ฐ์˜ ์‹๋ณ„์ž์˜ ๊ฐ’์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑ
    private Long id;

    // ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ ํ•„๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋Ÿผ์— ๋งคํ•‘๋  ๋•Œ ์ œ์•ฝ์„ ๊ฑธ์—ˆ๋‹ค.
    // 25์ž ๊ธธ์ด!
    @Column(length = 25)
    private String content;

    // ๋Œ“๊ธ€ content๋กœ ๋ฐ›์•„์˜จ ๊ฒƒ์„ ํ•„๋“œ์— ๋„˜๊ธฐ๋Š” ์ƒ์„ฑ์ž.
    public Comment(String content) {
        this.content = content;
    }

    /*
    @Builder
    public Comment(Long id, String content) {
        this.id = id;
        this.content = content;
    }
    */

}

 

์—”ํ‹ฐํ‹ฐ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์œผ๋กœ ์–ด๋–ค ์ •๋ณด๋“ค์ธ ์ธ์Šคํ„ด์Šค(๋Œ“๊ธ€์ด ํ•˜๋‚˜๋ฉด ์—”ํ‹ฐํ‹ฐ ์„ฑ๋ฆฝ ๋ถˆ๊ฐ€)๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์ด ๋˜์–ด์•ผํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์œ ์ผํ•œ ์‹๋ณ„์ž๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค. ๋ฐ˜๋“œ์‹œ ์†์„ฑ์„ ํฌํ•จํ•ด์•ผํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์œ ์ผํ•œ ์‹๋ณ„์ž๋กœ Id๋ฅผ ๋ถ€์—ฌํ–ˆ๋‹ค. ์ด๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†๋Š” ๊ฒƒ์„ ์‹๋ณ„์ž๋กœ ๊ณจ๋ผ์•ผํ•œ๋‹ค. ์ด๋ฆ„์ด๋‚˜, ๋Œ“๊ธ€์„ ์‹๋ณ„์ž๋กœ ๊ณ ๋ฅด๋ฉด ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์†์„ฑ์œผ๋กœ content๋ฅผ ๋„ฃ์—ˆ๋‹ค. ์ฆ‰ Comment ์—”ํ‹ฐํ‹ฐ์— content์ธ ๋Œ“๊ธ€ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. 

 

ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฌ์šด ์ฝ”๋“œ๋‹ค. ๊ทธ์ € ๋Œ“๊ธ€์„ ๊บผ๋‚ด ์กฐํšŒ๋งŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— @setter๋‚˜ @Builder๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— JPA๋ฅผ ์ƒ์†ํ–ˆ๊ธฐ๋•Œ๋ฌธ์— JPA ๋ฆฌํ”Œ๋ ‰์…˜ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ“๊ธ€์„ ์กฐํšŒํ•˜๋Š”๋ฐ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ๋Œ“๊ธ€์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ๋” ๋‹ค์–‘ํ•œ ์†์„ฑ์ด ์ƒ์„ฑ๋œ๋‹ค๋ฉด @Builder๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋ฉด ์ข‹๋‹ค. @setter๋Š” ์ˆ˜์ •์ด ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์–ด์„œ ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

 

 


 

 

 

 

 

6. ๋Œ“๊ธ€ ์ €์žฅํ•˜๊ธฐ

 

 

โ–ก Controller ์ž‘์„ฑํ•˜๊ธฐ.

@GetMapping("/save")
 public String saveComment(@RequestParam("content") String content) {
     boardService.saveComment(content);
     return "redirect:/board";
 }

 

save ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด saveComment ๋ฉ”์„œ๋“œ์™€ ์—ฐ๊ฒฐํ•ด์ฃผ์—ˆ๋‹ค. ์•„๊นŒ html์„ ์ž‘์„ฑํ–ˆ์„๋•Œ, ๋Œ“๊ธ€์„ content๋กœ ๋ณด๋ƒˆ๋‹ค. ์ด content๋ฅผ ๋ฐ›์•„์„œ boardService๋กœ ๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด @RequestParam์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. @RequestParam์€ ๋Œ“๊ธ€ content๋ฅผ ๋ฐ›๊ณ  String ํƒ€์ž…์˜ content์— ๋„ฃ์–ด boardService ํด๋ž˜์Šค์˜ saveComment ๋ฉ”์„œ๋“œ๋กœ ๋ณด๋‚ธ๋‹ค. ์‹ค์ œ๋กœ ๋ฐ›์•„์˜ค๋Š” ์ด๋ฆ„๊ณผ ๊ฐ’์˜ ์ด๋ฆ„์ด ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ("content")๋Š” ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค.

 

@RequestParam์„ ์‚ฌ์šฉํ•˜๋ฉด HttpServletRequest์˜ request.getParameter๋กœ ๋ฐ›์•„์ค˜์•ผํ•˜๋Š” ๊ฒƒ์„ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ @RequestParam์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด...?

@GetMapping("/save")
public saveComment(HttpServletRequest request) {
    String content = request.getParameter("content");   
    boardService.saveComment(content);   
    return "redirect:/board";
 }

 

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•˜๋‚˜ ๋ฐ–์— ์—†์ง€๋งŒ, ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฒฝ์šฐ @RequestParam์ด ์—„์ฒญ ํšจ์œจ์ ์ผ ๊ฒƒ์ด๋‹ค.

 

 

 

โ–ก Service ์ž‘์„ฑํ•˜๊ธฐ.

public void saveComment(String content) {
    if( content.length() >= 1 && content.length() <= 25 )
        boardRepository.save(new Comment(content));
}

 

๋Œ“๊ธ€์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ์ €์žฅ๋˜๊ธฐ ์ „, ์กฐ๊ฑด์— ๋งž๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. if๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ content์˜ ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ 25 ์ดํ•˜๋ฉด Comment ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ content๋ฅผ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์ €์žฅํ•˜๋„๋ก ์ž‘์„ฑํ–ˆ๋‹ค. ์•ž์„œ์„œ Entity์ธ Comment ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋’€๋‹ค. Comment ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ content(๋Œ“๊ธ€)๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ํ•„๋“œ์— ์ €์žฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งคํ•‘ํ•œ๋‹ค.

 

 

 

 

 


 

 

 

7. ๋Œ“๊ธ€ ์กฐํšŒํ•˜๊ธฐ.

 


โ–ก Service
 ์ž‘์„ฑํ•˜๊ธฐ.

public Page<Comment> get10Comments() {
    Pageable pageable = PageRequest.of(0,10);
    return boardRepository.findAllByOrderByIdDesc(pageable);

}

 

Jpa์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜ pageable๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ“๊ธ€์„ ๋‚˜ํƒ€๋‚ผ ๊ฒƒ์ด๋‹ค. ๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ get10Comments, ๋ฐ˜ํ™˜ํƒ€์ž…์€ Page<Comment>๊ฐ€ ๋œ๋‹ค. ํ•œ ํŽ˜์ด์ง€์— ๋Œ“๊ธ€ 10๊ฐœ๋งŒ ๋‚˜ํƒ€๋‚ด๋„๋ก ํ• ๊ฑฐ๋‹ˆ๊นŒ PageRequest.of(int page, int size)๋กœ page๊ฐ€ ๊ฐ€์ ธ์˜ฌ ํŽ˜์ด์ง€ ๊ทธ๋ฆฌ๊ณ  ํ•œ ํŽ˜์ด์ง€์— ํฌํ•จ๋  ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ์—์„œ ๋ฐ˜ํ™˜ํƒ€์ž…์„ Page๋กœ ์„ค์ •ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— List ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•ด๋„ ์ƒ๊ด€์—†๋‹ค. (์•„์˜ˆ pageable์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.)

 

 

 

โ–ก Controller ์ž‘์„ฑํ•˜๊ธฐ.

@GetMapping("/board")
public String boardPage(Model model) {
    model.addAttribute("comments", boardService.get10Comments());
    return "board";
}

 

์ฒซ ํ™”๋ฉด์ด ๋“ค์–ด๊ฐ€๋ฉด ์ €์žฅํ•œ ๋Œ“๊ธ€์ด ๋‚˜ํƒ€๋‚˜๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํƒ€์ž„๋ฆฌํ”„์˜ Model์„ ํ†ตํ•ด ๋Œ“๊ธ€์„ ๋ฐ›์•„์˜ฌ ๊ฒƒ์ด๋‹ค.  ๋ฐฉ๊ธˆ Service ํด๋ž˜์Šค์— get10Comments( ) ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ–ˆ๋‹ค. ๋ฉ”์„œ๋“œ๋กœ ๋ฐ›์•„์˜จ ๊ฐ’(๋ฐ์ดํ„ฐ) comments๋ฅผ ๋ทฐ์ธ ํƒ€์ž„๋ฆฌํ”„๋กœ ์ „๋‹ฌํ•œ๋‹ค.

 

@GetMapping("/save")
 public String saveComment(@RequestParam("content") String content) {
     boardService.saveComment(content);
     return "redirect:/board";
 }

 

๋Œ“๊ธ€์ด ์ €์žฅ๋˜์ž๋งˆ์ž ํ™”๋ฉด์— ๋ฐ”๋กœ ๋ณด์ด๋„๋ก ํ•˜๊ณ  ์‹ถ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด redirect:๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ /board๋กœ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋ณด๋‚ด๋„๋ก ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์œ„ ์ฝ”๋“œ @GetMapping("/board")๋กœ ์•ค๋“œํฌ์ธํŠธ๋ฅผ ๋ฐ›์•„ ์ƒˆ๋กœ์šด comments๋ฅผ ๋ฐ›์•„ ํƒ€์ž„๋ฆฌํ”„๋กœ ์ „๋‹ฌํ•˜๊ฒŒํ•œ๋‹ค.

 

 

โ–ก html ์‚ดํ”ผ๊ธฐ.

<div class="commentBox">
    <li class="font" th:each="comment : ${comments}" th:text="${comment.content}">
        comment
    </li>
</div>

 

board.html ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ฒ ๋‹ค. ๋Œ“๊ธ€์„ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ comments๋กœ ๋ณด๋ƒˆ๊ณ , comments์˜ ์—ฌ๋Ÿฌ ๋Œ“๊ธ€์„ each ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด comment๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ๊ฐ ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ th:text="${comment.content}"๊ฐ€ ์žˆ๋‹ค. comment ํด๋ž˜์Šค์— ์žˆ๋Š” content ํ•„๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์ข€ ๋” ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด๊ฒ ๋‹ค. comments๋Š” 10๊ฐœ์˜ ๋ญ‰ํ……์ด ๋Œ“๊ธ€์ด๋‹ค. ๊ทธ๊ฑธ comment ๋ณ€์ˆ˜๋กœ 1comment 2comment... ์ด๋ ‡๊ฒŒ ๋ถ€์—ฌ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋‚˜์—ด๋œ ๊ฒƒ๋“ค ์•ˆ์— ์‹ค์ œ ๋Œ“๊ธ€์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๋น„์œ ๋ฅผ ๋“ค์ž๋ฉด comments๊ฐ€ ์ขŒ์„ ํ•œ ์ค„์ด ๋˜๊ณ , comment๋Š” ์ขŒ์„ ํ•˜๋‚˜ ํ•˜๋‚˜์— ์•‰๋Š” ์‚ฌ๋žŒ์ด ๋˜๊ณ , comment.content๋Š” ๊ทธ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„ํ‘œ ํ˜น์€ ์ธ์  ์‚ฌํ•ญ์ด ๋˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ณด๋ฉด ์‰ฌ์šธ ๊ฒƒ ๊ฐ™๋‹ค. ์ผ๋‹จ ๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค.

 

 

 


 

 

[ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค H2 ์„ค์น˜ ๋ฐ ์—ฐ๋™, JPA ์—ฐ๋™ํ•˜๊ธฐ ]

 

Spring - [intelliJ,Thymeleaf] MAC, H2๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋Œ“๊ธ€์ฐฝ ๋งŒ๋“ค๊ธฐ(2)

[ ๊ฐ„๋‹จํ•œ ๋Œ“๊ธ€์ฐฝ ๋งŒ๋“ค๊ธฐ (1) ] Spring - [intelliJ,Thymeleaf] ๊ฐ„๋‹จํ•œ ๋Œ“๊ธ€์ฐฝ ๋งŒ๋“ค๊ธฐ(1)[ @PostMapping์œผ๋กœ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ] Spring - [intelliJ,Thymeleaf] @PostMapping์œผ๋กœ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ[

post-this.tistory.com

 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 

 

 

- paging ์ถœ์ฒ˜

 

JPA Paging (ํŽ˜์ด์ง€ ๋‚˜๋ˆ„๊ธฐ)

ํ˜„์žฌ 2๊ฐœ์˜ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค. > ๋‘ ํ”„๋กœ์ ํŠธ ๋ชจ๋‘ ๊ธ€ ๋˜๋Š” ์˜์ƒ์„ ํŽ˜์ด์ง•ํ•ด์„œ ํ”„๋ก ํŠธ์— ๋ฟŒ๋ ค์ฃผ๋Š” API๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค. > ๊ทธ๋ž˜์„œ ์ด๋ฒˆ์— PageRequest๋ฅผ ์‚ฌ์šฉํ•ด ํŽ˜์ด์ง• ํ•˜๋Š” ๊ฒƒ์„ ๊ณต๋ถ€ํ–ˆ๊ณ  ๊ณต์œ ํ•˜๊ณ 

velog.io

 

 

 

- Pageable ์ถœ์ฒ˜

 

[JPA] Spring Data Jpa + Pageable๋กœ Pagination ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ

์ด๋ฒˆ์ฃผ๋Š” ๋…์„œ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค. ๋ฆฌ๋ทฐ ๊ธ€์„ ํŠน์ • ์กฐ๊ฑด์œผ๋กœ ๋ฝ‘์•„์„œ ์ •๋ ฌ ๊ธฐ์ค€์„ ์„ ํƒํ•˜์—ฌ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•œ๋‹ค.์ „์ฒด ๋ฆฌ๋ทฐ๊ธ€์„ ์กฐํšŒํ•˜๊ฑฐ๋‚˜, ๋‚ด๊ฐ€

velog.io

 

 

 

- ์—”ํ‹ฐํ‹ฐ ์ถœ์ฒ˜ 

 

[DB] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”ํ„ฐํ‹ฐ(Entity)๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

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

coding-factory.tistory.com

 

 

 

- NoargsConstructor ์ถœ์ฒ˜

 

@NoargsConstructor(AccessLevel.PROTECTED) ์™€ @Builder

@NoargsConstructor(AccessLevel.PROTECTED) ์™€ @Builder๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ• ๋•Œ ์ฃผ์˜ํ•  ์ ์— ๋Œ€ํ•ด์„œ ์„œ์ˆ ํ•ฉ๋‹ˆ๋‹ค. "์™œ" ์•ˆ๋˜๋Š”์ง€์™€ "์™œ" ์ด๋ ‡๊ฒŒ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์ง‘์ค‘ํ•˜์—ฌ ์„œ์ˆ ํ•ฉ๋‹ˆ๋‹ค. 1. ์™œ NoargsConstructor(Access

cobbybb.tistory.com

 

 

 

- NoargsConstructor ์ถœ์ฒ˜

 

๋กฌ๋ณต @All/NoArgsConstructor ์ œ๋Œ€๋กœ ์•Œ๊ณ  ์‚ฌ์šฉํ•ด๋ณด์ž.

๋ฌธ๋“ ์ „ ํšŒ์‚ฌ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ @AllArgsConstructor, @NoArgsConstructor ๋“ฑ ์—ฌ๋Ÿฌ ์–ด๋…ธํ…Œ์ด์…˜์ด ํ•œํด๋ž˜์Šค์— ๊ฐ™์ด ์ž‘์„ฑ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณธ์ ์ด์žˆ๋‹ค.Lombok์€ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ์™€ ์ž‘์—…์„ ์ค„์—ฌ์ฃผ๋Š” ์ข‹์€ ๋ผ

velog.io

 

 

 

- @builder ์ถœ์ฒ˜

 

[Java] ๋นŒ๋” ํŒจํ„ด(Builder Pattern)์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒ์„ฑ์ž ํŒจํ„ด, ์ •์  ๋ฉ”์†Œ๋“œ ํŒจํ„ด, ์ˆ˜์ •์ž ํŒจํ„ด, ๋นŒ๋” ํŒจํ„ด ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ์—๋Š” ๋ฐ˜๋“œ์‹œ ๋นŒ๋” ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”

mangkyu.tistory.com

 

 

 

- Entity ์ถœ์ฒ˜

 

[SpringBoot] Entity๋ž€? + @Table, @NoArgsConstructor, @AllArgsConstructor

๐Ÿ’ก Entity๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ์•ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž. Entity(์—”ํ‹ฐํ‹ฐ)๋ž€? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์˜์†์ ์œผ๋กœ ์ €์žฅ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์—”ํ‹ฐํ‹ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

dahlia15.tistory.com

 

 

 

 

- Entity์™€ Repository ์ถœ์ฒ˜

 

[Spring] Spring Entity, Repository ์„ค๋ช…

Spring Entity, Repository๋Š” DB์™€ ๊ด€๋ จ๋œ ํ•ญ๋ชฉ๋“ค ์ค‘ ๋ช‡ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋Š” DAO, DTO, VO, Transaction ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์ด ์œ ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Repository์— ๋Œ€ํ•ด์„œ ์ฐธ๊ณ ํ•˜๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

workshop-6349.tistory.com

 

 

 

- Getter ์ถœ์ฒ˜

 

[OOP] Getter์™€ Setter๋Š” ์ง€์–‘ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค

๋ชฉ์ฐจ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์–ผ๋งˆ ์ „ ์‚ฌ๋‚ด์—์„œ Getter์™€ Setter๋ฅผ ํ•จ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ์„ธ๋ฏธ๋‚˜๊ฐ€ ์žˆ์—ˆ๋‹ค. Setter์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” ์›Œ๋‚™ ๋งŽ์ด ์•Œ๋ ค์ ธ์žˆ์—ˆ์ง€๋งŒ Getter์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” ์ž˜ ํ•˜์ง€ ์•Š

colabear754.tistory.com

 

 

 

- Jpa ์ถœ์ฒ˜

 

[Spring JPA] JPA ๋ž€?

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” JPA(Java Persistence API)๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๋ ค๊ณ ํ•œ๋‹ค. JPA๋Š” ์ž๋ฐ” ์ง„์˜์—์„œ ORM(Object-Relational Mapping) ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ์ด๋‹ค. ๊ทธ ๋ง์€ ์ฆ‰, ์‹ค์ œ์ ์œผ๋กœ ๊ตฌํ˜„๋œ๊ฒƒ์ด

dbjh.tistory.com

 

 

 

- Jpa ์ถœ์ฒ˜

 

[JAVA] - JPA๋ž€? ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ(์˜ˆ์ œ์ฝ”๋“œ ์™„๋ฒฝ์ •๋ฆฌ)

๐Ÿง‘๐Ÿป‍๐Ÿซ ๊ฐ„๋‹จ ์ •๋ฆฌ JPA๋Š” ์ž๋ฐ”์˜ ORM๊ธฐ์ˆ ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” API์ด๋‹ค. JpaRepository๋ฅผ ์ƒ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฉ”์„œ๋“œ ์ด๋ฆ„๋งŒ ์ ์–ด๋†“์œผ๋ฉด ์•Œ์•„์„œ ๋‹ค ์ฒ˜๋ฆฌ(๊ตฌํ˜„์ฒด ์ƒ์„ฑ, ์ฟผ๋ฆฌ๋ฌธ ๊ตฌํ˜„ ๋“ฑ)ํ•ด

ccomccomhan.tistory.com

 

 

 

- save ์ถœ์ฒ˜

 

๋‚ด๊ฐ€ repository.save()๋ฅผ ํ†ตํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ €์žฅ์‹œ์ผฐ๋˜ ์ด์œ 

๊ทธ ๋•Œ ๋‹น์‹œ์—๋Š” Spring์€ ๋ฌผ๋ก  Java์— ๋Œ€ํ•œ ๊ฐœ๋…๋„ ๋งค์šฐ ์•ฝํ•  ๋•Œ๋ผ ์ง€๊ธˆ๋„ ์•ฝํ•˜์ง€๋งŒ > > > ๋ ˆํผ๋Ÿฐ์Šค์˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•˜๊ธฐ์— ๊ธ‰๊ธ‰ํ–ˆ๋‹ค. > > ๋‹น์‹œ์˜ ๋‚˜๋Š” ํ•ด๋‹น ๊ฐœ๋…์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์ดํ•ด๋ณด๋‹ค๋Š” ๊ธฐ

velog.io

 

 

 

- save ์ถœ์ฒ˜

 

Spring Data JPA - Save Method ๋™์ž‘ ๋ฐฉ์‹

Spring Data JPA์—์„œ ์ œ๊ณตํ•˜๋Š” JpaRepository.save(T); [T๋Š” Entity]์˜ ๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. JPA์—์„œ์˜ save ๋ฉ”์„œ๋“œ ๊ตฌํ˜„์ฒด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. // SimpleJpaRepository.java [JPA ๊ตฌํ˜„์ฒด] @Tra

wangtak.tistory.com

 

 

 

- CRUD ์ถœ์ฒ˜

 

[Spring] JPA์˜ ๊ธฐ๋ณธ CRUD๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž !

JPA (Java Presistence API) ์ž๋ฐ” ์ง„์˜์—์„œ ORM ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ์Œ์ด๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ Hibernate, Spring JPA ๊ฐ€ ์žˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด JPA๋Š” ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ”์„ ์ž๋™์œผ๋กœ ๋งคํ•‘์‹œ์ผœ์„œ, ์ฟผ๋ฆฌ๋ฌธ ์ž‘

wooj-coding-fordeveloper.tistory.com

 

 

 

- findAllByOrderByIdDesc ์ถœ์ฒ˜

 

JPA - findAllByOrderByIdDesc

findAll์„ ํ•˜๋ฉด์„œ Orderby๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค. https://docs.spring.io/spring-data/jpa/docs/2.3.3.RELEASE/reference/html/#jpa.repositories And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2 Or findByLastnameOrFirstname

mymoney1.tistory.com

 

 

 

 

 

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2) ]

 

Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2)

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ[ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ ] Spring - [intelliJ] ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ[ Hello,World

post-this.tistory.com

 

 


 

 

@PostMapping์„ ์ด์šฉํ•˜์—ฌ
๋กœ๋˜ ๋ฒˆํ˜ธ ๊ณ„์† ์ถœ๋ ฅํ•˜๊ธฐ.



1. ๋™์ž‘ํ™”๋ฉด๊ณผ ์ „์ฒด์ฝ”๋“œ

 

 

๋™์ž‘ํ™”๋ฉด

 

 

 

 

 

์ „์ฒด์ฝ”๋“œ

 

GitHub - hyeong-ing/LuckyLotto: ๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค. Contribute to hyeong-ing/LuckyLotto development by creating an account on GitHub.

github.com

 

 

 

package com.LottoWeb.LuckyLotto.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.*;

@Controller
public class RandomController {

    java.util.Random rd = new java.util.Random();

    @GetMapping("/")
    public String firstPage() {
        return "button";
    }

    

    @GetMapping("/Random1")
    public String random1(Model model) {

        Set<Integer> lottoSet = new TreeSet<>();

        while(true) {
            int ranNum = rd.nextInt(45)+1;
            lottoSet.add(ranNum);

            if(lottoSet.size() == 6) {
                break;
            }
        }

        List<Integer> lottoList = new ArrayList<>(lottoSet);

        model.addAttribute("Number1",lottoList.get(0));
        model.addAttribute("Number2",lottoList.get(1));
        model.addAttribute("Number3",lottoList.get(2));
        model.addAttribute("Number4",lottoList.get(3));
        model.addAttribute("Number5",lottoList.get(4));
        model.addAttribute("Number6",lottoList.get(5));


        return "button1";
    }

    @PostMapping("/Random1")
    public String updateRandom(Model model) {

        Set<Integer> lottoSet = new TreeSet<>();

        while(true) {
            int ranNum = rd.nextInt(45)+1;
            lottoSet.add(ranNum);

            if(lottoSet.size() == 6) {
                break;
            }
        }

        List<Integer> lottoList = new ArrayList<>(lottoSet);

        model.addAttribute("Number1",lottoList.get(0));
        model.addAttribute("Number2",lottoList.get(1));
        model.addAttribute("Number3",lottoList.get(2));
        model.addAttribute("Number4",lottoList.get(3));
        model.addAttribute("Number5",lottoList.get(4));
        model.addAttribute("Number6",lottoList.get(5));


        return "button1";
    }

}

 

 

 

 


 

 

 

 

2. ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€ ์ƒ๊ฐํ•˜๊ธฐ ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป

 

์ „์— ํ–ˆ๋˜ ์ฝ”๋“œ๋Š” @GetMapping๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋˜๋ฒˆํ˜ธ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ @PostMapping์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋ฐ”๊ฟ€ ๊ฒƒ์ด๋‹ค.

 

 

[ ๋ณ€๊ฒฝ์‚ฌํ•ญ ]

 

โ–ก @GetMapping์œผ๋กœ ์ฒ˜์Œ ๊ฐ’์„ ์ถœ๋ ฅ์‹œํ‚จ๋‹ค.

โ–ก @PostMapping์„ ์ด์šฉํ•˜์—ฌ ๊ทธ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

 

 

 

 


 

 

 

 

3. @GetMapping์œผ๋กœ ์ฒซ ์ถœ๋ ฅํ•˜๊ธฐ.

 

โ–ก ์ฒ˜์Œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์ƒˆ๋กœ์šด html์„ ๋ณด๋‚ด๋Š” GET์š”์ฒญ ์ฒ˜๋ฆฌ.

@GetMapping("/Random1")
public String random1(Model model) {

    Set<Integer> lottoSet = new TreeSet<>();

    while(true) {
        int ranNum = rd.nextInt(45)+1;
        lottoSet.add(ranNum);

        if(lottoSet.size() == 6) {
            break;
        }
    }

    List<Integer> lottoList = new ArrayList<>(lottoSet);

    model.addAttribute("Number1",lottoList.get(0));
    model.addAttribute("Number2",lottoList.get(1));
    model.addAttribute("Number3",lottoList.get(2));
    model.addAttribute("Number4",lottoList.get(3));
    model.addAttribute("Number5",lottoList.get(4));
    model.addAttribute("Number6",lottoList.get(5));


    return "button1";
}

 

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—๋Š” ์›ํ˜• ๋ชจ์–‘์ด ์—†๋Š” button.html ํ™”๋ฉด๊ณผ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค ๋žœ๋ค ์ˆซ์ž๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” button1.html ํ™”๋ฉด์ด ์žˆ๋‹ค. ์ƒˆ๋กœ์šด ํ™”๋ฉด์„ ๋“ค์–ด๊ฐ€๋ ค๋ฉด GET ์š”์ฒญ์œผ๋กœ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๋ฌด์กฐ๊ฑด ์ฒซ ํ™”๋ฉด์„ ๋ฐ›๋Š” ๊ฒƒ์œผ๋กœ @GetMapping์ด ์žˆ์–ด์•ผํ•˜๋Š” ์ด์œ ๋‹ค. 

 

ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์ƒˆ๋กœ์šด ํ™”๋ฉด์„ ์š”์ฒญํ•˜๋Š” ๋™์‹œ์—, ๋žœ๋ค ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„ ๊ทธ๊ฒƒ์„ ์›ํ˜• ์œ„์— ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ๋‹ค.

 

 

 

 


 

 

 

 

 

4. @PostMapping์œผ๋กœ ๊ฐ’ ๋ณ€๊ฒฝํ•˜๊ธฐ.

   @PostMapping("/Random1")
    public String updateRandom(Model model) {

        Set<Integer> lottoSet = new TreeSet<>();

        while(true) {
            int ranNum = rd.nextInt(45)+1;
            lottoSet.add(ranNum);

            if(lottoSet.size() == 6) {
                break;
            }
        }

        List<Integer> lottoList = new ArrayList<>(lottoSet);

        model.addAttribute("Number1",lottoList.get(0));
        model.addAttribute("Number2",lottoList.get(1));
        model.addAttribute("Number3",lottoList.get(2));
        model.addAttribute("Number4",lottoList.get(3));
        model.addAttribute("Number5",lottoList.get(4));
        model.addAttribute("Number6",lottoList.get(5));


        return "button1";
    }

 

๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค ์š”์ฒญ์ด ๋‹ค์‹œ ๊ฐ€๊ฒŒ๋˜๋ฉด @PostMapping์ด ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•œ๋‹ค. ๋‚˜๋จธ์ง€ ์ฝ”๋“œ๋Š” ๋˜‘๊ฐ™๋‹ค. @PostMapping์€ ์ƒˆ Form ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜, ํŠน์ • ๋ฆฌ์†Œ์Šค ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. Rest API์—์„œ ๊ฐ’์€ ์—…๋ฐ์ดํŠธํ•˜๋Š”๋ฐ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํ•˜๋‚˜๋Š” @PostMapping, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” @PutMapping์ด ๋œ๋‹ค.

 

๋‘˜์˜ ์ฐจ์ด๋Š” @PostMapping์€ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. @PutMapping์€ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ๋Š” ์‰ฌ์šด ์ฝ”๋“œ๋ผ์„œ, ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. @GetMapping์€ GET๋ฐฉ์‹์œผ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ๋งŒ ํ•œ๋‹ค. ์„œ๋ฒ„์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ๊ฐ’์„ ๊ณ„์†์ ์œผ๋กœ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ–ˆ์„ ๋•Œ, ํ™”๋ฉด์„ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค์–ด @GetMapping์ด ๊ณ„์† ๋‹ค๋ฅธ ํ™”๋ฉด์œผ๋กœ ์š”์ฒญ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค.

 

 


 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 

 

- @GetMapping๊ณผ @PostMapping ์ถœ์ฒ˜

 

[Spring] Spring Framework์—์„œ์˜ @PostMapping๊ณผ @GetMapping: REST API์˜ ํ•ต์‹ฌ ์š”์†Œ

์•ˆ๋…•ํ•˜์„ธ์š”! ์ด๋ฒˆ์—๋Š” Spring Framework์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ธ @PostMapping๊ณผ @GetMapping์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜๋“ค์€ REST API ๊ฐœ๋ฐœ์—์„œ ํ•ต์‹ฌ ์š”์†Œ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ

jjangadadcodingdiary.tistory.com

 

 

 

 

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ]

 

 

Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2)

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ[ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ ] Spring - [intelliJ] ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ[ Hello,World

post-this.tistory.com

 

 


 

 

๋„ค์žŽํด๋กœ๋ฒ„ ์ด๋ฏธ์ง€ ๋„ฃ๊ณ ,
๊ธ€์”จ์ฒด ๋ฐ”๊พธ๊ธฐ

 

 

 

 

 

1. ์ด๋ฏธ์ง€์™€ ์ „์ฒด์ฝ”๋“œ

 

 

์ด๋ฏธ์ง€

 

 

 

์ฝ”๋“œ

 

 

GitHub - hyeong-ing/LuckyLotto: ๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค. Contribute to hyeong-ing/LuckyLotto development by creating an account on GitHub.

github.com

 

 

 

 

 


 

 

 

 

 

 

2. ์ด๋ฏธ์ง€ ๋„ฃ๊ธฐ

 

ํƒ€์ž„๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด, HTML ์ด๋ฏธ์ง€ ๋„ฃ๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•๊ณผ ๋‹ค๋ฅด๋‹ค. 

 

 

โ–ก ์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ๋‹ค์šด๋ฐ›๊ธฐ.

 

ํด๋กœ๋ฒ„ ์•„์ด์ฝ˜, ๋กœ๊ณ , ๊ธฐํ˜ธ – PNG, SVG ๋ฌด๋ฃŒ ๋‹ค์šด๋กœ๋“œ

 

icons8.kr

 

 

 

โ–ก ํ•ด๋‹น ์ด๋ฏธ์ง€๋Š” static.css์— ๋„ฃ๊ธฐ.

 

๋ณธ์ธ์€ ์ฒ˜์Œ์— ์ด๋ฏธ์ง€๋ฅผ css์— ๊ฒฝ๋กœ๋ฅผ ๋„ฃ๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์„ ํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณ„์†ํ•ด์„œ ์ด๋ฏธ์ง€๊ฐ€ ์ œ๋Œ€๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š์•˜๋‹ค. ๊ณ ๋ฏผ์„ ํ•˜๋‹ค๊ฐ€ ํƒ€์ž„๋ฆฌํ”„์™€ ์—ฐ๊ด€์ด ์žˆ๋‚˜ ์‹ถ์–ด ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ, ํƒ€์ž„๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉ ์ค‘์ผ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด ํ†ตํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.

 

์ด๋ ‡๊ฒŒ static.css์— ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

 

.lucky {
    display:inline-block;
}

 

ํ•ด๋‹น ์‚ฌ์ง„์„ ๋‚˜์—ดํ•˜๊ธฐ ์œ„ํ•ด style.css์— display(ํ™”๋ฉด์— ์–ด๋–ป๊ฒŒ ๋ณด์ด๊ณ  ์‹ถ์€์ง€)์— inline-block;(๋‚˜์—ด๋˜๋„๋ก)์„ ์ ์—ˆ๋‹ค.

 

 

<img th:src="@{/css/lucky.png}" alt="Lucky" class="lucky">
<img th:src="@{/css/lucky.png}" alt="Lucky" class="lucky">
<img th:src="@{/css/lucky.png}" alt="Lucky" class="lucky">

 

์›ํ•˜๋Š” ์œ„์น˜์— th:src="@{/css/lucky.png}"๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ alt๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋ณด์—ฌ์ง€์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋‚˜ํƒ€๋‚˜๋Š” ์ด๋ฏธ์ง€ ๋Œ€์ฒด ์ •๋ณด์ด๋ฉฐ, class๋Š” style.css์— ์ €์žฅ๋œ ์†์„ฑ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

 

 

 

 

 


 

 

 

 

 

3. ๊ธ€์”จ์ฒด ๋ฐ”๊พธ๊ธฐ

 

๊ธ€์”จ์ฒด๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ์ดํŠธ์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์‚ฌ์ดํŠธ ์™ธ์—๋„ ์–ด๋„๋น„ ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ์žˆ๋‹ค. ์—ฌ๊ธฐ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ธ€์”จ์ฒด๋งˆ๋‹ค ๊ณต์œ ๋  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฅด๋‹ˆ ์ž˜ ํ™•์ธํ•ด๋ณด๊ณ  ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋˜ ์‚ฌ์ดํŠธ๋งˆ๋‹ค ๊ธ€์”จ์ฒด ์ ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

 

 

๋ˆˆ๋ˆ„

 

๋ˆˆ๋ˆ„

์ƒ์—…์šฉ ๋ฌด๋ฃŒ ํ•œ๊ธ€ ํฐํŠธ ์‚ฌ์ดํŠธ

noonnu.cc

 

 

์‚ฐ๋Œ๊ตฌ๋ฆ„

 

 

์ €์ž‘๊ถŒ ๊ฑฑ์ •์—†๋Š” ๋ฌด๋ฃŒํฐํŠธ | ์‚ฐ๋Œ๊ตฌ๋ฆ„

๋ถ€๋ฆฌ ์„ธ๋กœํš์˜ ์ฒ˜์Œ์— ๋ถ€๋ฆฌ๊ฐ€ ์žˆ๋Š” ํฐํŠธ ๊ฐˆ๋ž˜. ๋ช…์กฐ์ฒด์™€ ๋ฐ”ํƒ•์ฒด๋ฅผ ํฌ๊ด„ํ•œ๋‹ค. ์„ธ๋กœํš์„ ์•„๋ž˜๋กœ ๊ธ‹๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ (์ผ๋ฐ˜์ ์œผ๋กœ) ์™ผ์ชฝ ์ƒ๋‹จ์—์„œ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๋กœ ์กฐ๊ธˆ ๊ธ‹๋‹ค ์ˆ˜์ง ์•„๋ž˜๋กœ ๋‚ด๋ ค ๊ทธ์„ ๋•Œ ์ƒ

www.sandollcloud.com

 

 

๋„ค์ด๋ฒ„

 

๋„ค์ด๋ฒ„ ๊ธ€๊ผด ๋ชจ์Œ

๋„ค์ด๋ฒ„๊ฐ€ ๋งŒ๋“  150์—ฌ์ข…์˜ ๊ธ€๊ผด์„ ํ•œ๋ฒˆ์— ๋งŒ๋‚˜๋ณด์„ธ์š”

hangeul.naver.com

 

 

 

โ–ก  ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ•œ ๊ธ€์”จ์ฒด๋Š” ๋ˆˆ๋ˆ„์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๋‹ค.

 

๋ˆˆ๋ˆ„ - ํ•™๊ต์•ˆ์‹ฌ ๋‘ฅ๊ทผ๋ฏธ์†Œ

 

๋ˆˆ๋ˆ„

ํ•™๊ต์•ˆ์‹ฌ ๋‘ฅ๊ทผ๋ฏธ์†Œ - Keris(ํ•œ๊ตญ๊ต์œกํ•™์ˆ ์ •๋ณด์›)

noonnu.cc

 

 

 

โ–ก  ์šฐ์ธก์— ๋ณด๋ฉด ์›นํฐํŠธ๋กœ ์‚ฌ์šฉ์ด ์žˆ๋‹ค. ์˜†์— ๋„ค๋ชจ๋‚œ ๊ฑธ ๋ˆŒ๋Ÿฌ ๋ณต์‚ฌ ํ›„, style.css์— ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•œ๋‹ค.

 

 

 

โ–ก ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์— ์ ์šฉํ•˜๊ธฐ.


body {
    font-family: 'HakgyoansimDunggeunmisoTTF-B';
}

 

body์˜ ๊ธ€์”จ์ฒด๋ฅผ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด style.css์— ์œ„์˜ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค.

 

 

 

โ–ก ๋ฒ„ํŠผ๋„ ๊ธ€์”จ์ฒด ๋ฐ”๊ฟ”์ฃผ๊ธฐ.

.btn {
    background-color: #AC72E5;
    color: white;
    border: none;
    border-radius:20px;
    width:200px;
    height:60px;
    font-size:40px;
    text-align: center;
    cursor: pointer;
    font-family: 'HakgyoansimDunggeunmisoTTF-B';
}

 

body ์•ˆ์— ๋ฒ„ํŠผ์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ, ๋ฒ„ํŠผ ๊ธ€์”จ์ฒด๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ font-family๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฒ„ํŠผ๋„ ๊ธ€์”จ์ฒด๋ฅผ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค.

 

 

 

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ]

 

Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ

[ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ ] Spring - [intelliJ] ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ[ Hello,World ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [IntelliJ] Hello World ์ถœ๋ ฅํ•˜๊ธฐ[ Spring MVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค

post-this.tistory.com

 

 


 

 

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด
๊ณ„์†ํ•ด์„œ ๋žœ๋คํ•œ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

1. ๋™์ž‘ํ™”๋ฉด๊ณผ ์ „์ฒด์ฝ”๋“œ

 

 

๋™์ž‘ํ™”๋ฉด

 

 

 

์ „์ฒด์ฝ”๋“œ

 

 

GitHub - hyeong-ing/LuckyLotto: ๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค. Contribute to hyeong-ing/LuckyLotto development by creating an account on GitHub.

github.com

 

 

 

 

 


 

 

 

 

 

 

2. ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€ ์ƒ๊ฐํ•˜๊ธฐ ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป

 

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด 6๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ๋žœ๋ค์œผ๋กœ ์ถœ๋ ฅ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

์›ํ•˜๋Š” ์ด๋ฏธ์ง€์— ๋งž์ถฐ ๋งŒ๋“ค๋ฉด์„œ, ๋ฒ„ํŠผ์„ ์—ฐ์†์ ์œผ๋กœ ๋ˆ„๋ฅด๋ฉด ์ˆซ์ž๊ฐ€ ๊ณ„์† ๋ฐ”๋€Œ๋Š” ๊ตฌ์กฐ๋กœ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์–ด์กŒ๋‹ค.

์ตœ๋Œ€ํ•œ ์•„๋Š” ์ง€์‹ ์„ ์—์„œ ์ƒ๊ฐํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 

 

[ ์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ]

 

 

 

 

 

[ ๋ณ€๊ฒฝ์‚ฌํ•ญ ]

 

โ–ก ์›ํ˜• ๋ชจํ˜• ์•ˆ์— ๊ฐ๊ฐ 6๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ถœ๋ ฅ๋˜๊ธฐ.

     โ–ป  TreeSet์œผ๋กœ ๋ฐ›์€ ์ˆซ์ž๋ฅผ ๋”ฐ๋กœ ๋ฐ›์•„์•ผํ•œ๋‹ค.

     โ–ป  ์—ฌ์ „ํžˆ ์ค‘๋ณตX๊ณผ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ์œ ์ง€๋˜์–ด์•ผํ•œ๋‹ค.

     โ–ป  ArrayList๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

โ–ก ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ณ„์†ํ•ด์„œ ์ˆซ์ž ๋ณ€๊ฒฝ๋˜๊ธฐ.

     โ–ป  @GetMapping์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค.

     โ–ป  ๋ฌดํ•œ ์ˆœํ™˜ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด๋ณด๋ฉด ๋˜์ง€์•Š์„๊นŒ?

 

 

 

 

 


 

 

 

 

 

3. ์›ํ˜•์„ ๋งŒ๋“ค๊ณ  ๊ฐ ์›ํ˜•์— ๋กœ๋˜ ์ˆซ์ž ๋‹ด๊ธฐ.

 

โ–ก TreeSet์œผ๋กœ ๋‹ด์€ ๋žœ๋ค ์ˆซ์ž๋ฅผ ArrayList๋กœ ๋ณ€ํ˜•ํ•œ๋‹ค.

 

Random1.java

List<Integer> lottoList = new ArrayList<>(lottoSet);

model.addAttribute("Number1",lottoList.get(0));
model.addAttribute("Number2",lottoList.get(1));
model.addAttribute("Number3",lottoList.get(2));
model.addAttribute("Number4",lottoList.get(3));
model.addAttribute("Number5",lottoList.get(4));
model.addAttribute("Number6",lottoList.get(5));

 

 

TreeSet์˜ ํŠน์„ฑ์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด์„œ, ์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ๋ฐฐ์—ด์ด ์ด๋ค„์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง„ ์›ํ•˜๋Š” ๋ถ€๋ถ„์ด์—ˆ์ง€๋งŒ, Set์€ ๊ฐ ์ธ๋ฑ์Šค๋กœ ์š”์†Œ๋“ค์„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ์— 6๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋”ฐ๋กœ๋”ฐ๋กœ ์›ํ˜• ์•ˆ์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ArrayList<>๋กœ Set์ธ lottoSet์„ ๋ณ€ํ™˜์‹œ์ผฐ๋‹ค. ArrayList๋Š” ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํŠน์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‚˜์—ด๋˜์–ด์žˆ์„ lottoSet์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ด์ค„๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ๋‹ค. (๋ณธ๋ž˜ ArrayList๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋ฉฐ ๋“ค์–ด์˜จ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ๋ถ€ํ„ฐ ๋žœ๋ค ์ˆซ์ž๋ฅผ ArrayList๋กœ ๋ฐ›์ง€ ์•Š์•˜๋‹ค.)

 

์ด์ œ ArrayList๋กœ ๋ณ€ํ˜•๋œ lottoList๋ฅผ ๋‚˜๋ˆ ์„œ html์— ์žˆ๋Š” ๋ณ€์ˆ˜์— ๋ณด๋‚ผ ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ๋ณ€์ˆ˜๋Š” Number1 ~  Number6์ด ๋œ๋‹ค.

 

 

 

โ–ก  style.css์— ๋“ค์–ด๊ฐ„๋‹ค.

.circle-red {
    display:inline-block;
    width:80px;
    height:80px;
    border-radius:50%;
    background-color:#F5A9A9;
    text-align:center;
}

 

[๋นจ-์ฃผ-๋…ธ-์ดˆ-ํŒŒ-๋‚จ] ์ˆœ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋ณด์ด๋„๋ก display์— inline-block์„ ์ ์–ด์ฃผ์—ˆ๋‹ค. display๋Š” ์–ด๋–ป๊ฒŒ ํ‘œ์‹œํ• ์ง€ ๊ฒฐ์ •ํ•  ๋•Œ ์“ด๋‹ค. ์—ฌ๊ธฐ์„œ inline-block์€ block์˜ ๋ชจ์–‘์€ ์œ ์ง€๋˜๋ฉด์„œ ์˜†์œผ๋กœ ๋‚˜์—ดํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. border-radius๋Š” ํ…Œ๋‘๋ฆฌ ๊ตด๊ณก์œผ๋กœ 50%๋กœ ์„ค์ •ํ•˜์—ฌ ์›ํ˜•์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. 100%๋กœ ํ•˜๋ฉด width์™€ height์˜ ๋น„์œจ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ ํƒ€์›ํ˜•์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ 50%๋Š” ๋น„์œจ์ด ๋‹ฌ๋ผ๋„ ์˜จ์ „ํ•œ ์›ํ˜•์œผ๋กœ ๋ณด์—ฌ์ง„๋‹ค.

 

์—ฌ๊ธฐ์„œ background-color๋งŒ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋ฉด ์ด 6๊ฐœ์˜ ์›ํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 

 

โ–ก ๋งŒ๋“  ์›ํ˜•์— lottoList์— ์žˆ๋Š” ์ธ๋ฑ์Šค ์ˆซ์ž ๋„ฃ๊ธฐ.

 

button1.html

<div class="circle-red">
    <h1 th:text="${Number1}"> RandomNumber </h1>
</div>

 

๋ณ€์ˆ˜ Number1์€ ๋™์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์˜ํ•˜๋‹ˆ th๋ฅผ ์„ ์–ธํ•œ๋‹ค. ์•„๊นŒ Random1.java์— ์žˆ๋˜ lottoList์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜์—ฌ Number1์— ๊ฐ’์„ ๋ณด๋‚ด์ค„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“  ๋‹ค๋ฅธ ์ƒ‰์˜ ์›ํ˜•์„ class๋กœ ์ •์˜ํ•˜๊ณ  ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋‚˜๋จธ์ง€ ์ธ๋ฑ์Šค๋„ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ด๋‹ค.

 

 

 


 

 

 

 

4. ์ˆœํ™˜๊ตฌ์กฐ ๋งŒ๋“ค๊ธฐ.

 

์ „์—๋Š” ๋žœ๋ค ๋ฒˆํ˜ธ๋ฅผ ๋”ฑ ํ•œ ๋ฒˆ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ณ„์†ํ•ด์„œ ๋žœ๋ค ์ˆซ์ž๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค. 

 

์•Œ๊ณ ์žˆ๋Š” ๊ฐœ๋…์—์„œ ์›ํ•˜๋Š” ๋ชฉํ‘œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด, ์ˆซ์ž๊ฐ€ ๋ณด์—ฌ์งˆ ํ™”๋ฉด 3๊ฐœ์™€ Controller 3๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด ์ˆœํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ๋‹ค. Button1์—์„œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์ปจํŠธ๋กค๋Ÿฌ์ธ Random1๋กœ ๋„์ฐฉํ•œ๋‹ค. ๊ทธ ํ›„ ์‹คํ–‰๋œ ๋ฉ”์„œ๋“œ์˜ ๊ฐ’์€ Button2๋กœ ๋ณด๋‚ธ๋‹ค. Button2์—์„œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด Random2 ์ปจํŠธ๋กค๋Ÿฌ๋กœ ํ–ฅํ•˜๊ณ  ๋ฉ”์„œ๋“œ์˜ ๊ฒฐ๊ณผ๋Š” Button3์œผ๋กœ ๊ฐ€๊ฒŒ๋œ๋‹ค. Button3์—์„œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด Random1๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ค๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ ํ›„ Random1์—์„œ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋Š” Button1์—์„œ ์ถœ๋ ฅ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

 

<form th:action="@{/Random1}" method = "get">
    <button class="btn" type="submit" > ๋ฒ„ํŠผ </button>
</form>

 

utton1.html์—์„œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด Random1 ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง„ Controller๋กœ ์ „์†ก๋œ๋‹ค. 

 

@GetMapping("/Random1")
public String randomPage1(Model model) 

๊ทธ๋Ÿผ Random1.java์— ์žˆ๋Š” GetMapping("/Random1")์œผ๋กœ ๋ฐ›๊ฒŒ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด randomPage1 ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

Set<Integer> lottoSet = new TreeSet<>();

while(true) {
    int ranNum = rd.nextInt(45)+1;
    lottoSet.add(ranNum);

    if(lottoSet.size() == 6) {
        break;
    }
}

List<Integer> lottoList = new ArrayList<>(lottoSet);

model.addAttribute("Number1",lottoList.get(0));
model.addAttribute("Number2",lottoList.get(1));
model.addAttribute("Number3",lottoList.get(2));
model.addAttribute("Number4",lottoList.get(3));
model.addAttribute("Number5",lottoList.get(4));
model.addAttribute("Number6",lottoList.get(5));


return "button2";

 ๋žœ๋ค์œผ๋กœ ์ˆซ์ž 6๊ฐœ๋ฅผ TreeSet์œผ๋กœ ๋ฐ›๊ณ  ArrayList๋กœ ๋ณ€ํ™˜ ํ›„, ๊ฐ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜์—ฌ ๋ณ€์ˆ˜์— ๋„ฃ์–ด button2๋กœ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

<div class="circle-red">
    <h1 th:text="${Number1}"> RandomNumber </h1>
</div>

<div class="circle-orange">
    <h1 th:text="${Number2}"> RandomNumber </h1>
</div>

<div class="circle-yellow">
    <h1 th:text="${Number3}"> RandomNumber </h1>
</div>

<div class="circle-green">
    <h1 th:text="${Number4}"> RandomNumber </h1>
</div>

<div class="circle-blue">
    <h1 th:text="${Number5}"> RandomNumber </h1>
</div>

<div class="circle-darkblue">
    <h1 th:text="${Number6}"> RandomNumber </h1>
</div>

 ์ด์ œ ๋ฐ›์•„๋‘” ๋ณ€์ˆ˜๊ฐ€ button2.html๋กœ ์ „๋‹ฌ๋˜์–ด ์ถœ๋ ฅ๋œ๋‹ค.

 

<form th:action="@{/Random2}" method = "get">
    <button class="btn" type="submit" > ๋ฒ„ํŠผ </button>
</form>

๊ทธ ํ›„ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Random2 ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง„ Controller๋ฅผ ์ฐพ๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ๊ณ„์† ๋ฐ˜๋ณต๋˜๋Š” ๊ตฌ์กฐ๋‹ค. ๋งˆ์ง€๋ง‰ Random3๋Š” button1์œผ๋กœ ์ถœ๋ ฅ๋˜๋ฉฐ  button1์˜ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด Random1์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด button2์— ๊ฒฐ๊ณผ๊ฐ’์ด ์ถœ๋ ฅ๋˜๊ฒŒ ๋œ๋‹ค.

 

 


 

[ ๋„ค์žŽํด๋กœ๋ฒ„ ์ด๋ฏธ์ง€ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ธ€์”จ์ฒด ์ ์šฉ ]

 

Spring - [HTML,CSS,Thymeleaf] ์ด๋ฏธ์ง€ ๋„ฃ๊ธฐ, ๋ˆˆ๋ˆ„ ๊ธ€์”จ์ฒด ์‚ฌ์šฉํ•˜๊ธฐ

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ]  Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2)[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ

post-this.tistory.com

 

 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 


 

 

- List์™€ Set ์ฐจ์ด

 

List, Set ์–ด๋–ค ๊ฒƒ์„ ์“ฐ๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•œ๊ฐ€

๋ฐฐ๊ฒฝ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ(์—ฌ๊ธฐ์— ์ •๋ฆฌ)๋ฅผ ํ’€๋‹ค๊ฐ€ LinkedList ์™€ HashSet ์˜ contains() ์†๋„ ์ฐจ์ด๊ฐ€ ํฌ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ง์ ‘ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ณ  ์ด๋ฅผ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์†๋„ ๋น„๊ต 10000000์˜ ์ˆซ์ž๋ฅผ ArrayList, Lin

hanul-dev.netlify.app

 

 

 

- Set์„ ArrayList๋กœ ๋ณ€ํ™˜ ์ถœ์ฒ˜

 

[Java] HashSet์„ ArrayList๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

[Java] HashSet์„ ArrayList๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ HashSet set = new HashSet(); for (int i = 0; i < T; i++) { set.add(br.readLine()); } ArrayList list = new ArrayList(set); ์ค‘๋ณต๋˜๋Š” ๊ฐ’์„ ์ œ์™ธํ•˜๊ณ  ์ €์žฅํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด๋•Œ HashSe

kim6394.tistory.com

 

 

 

- Set ์ถœ์ฒ˜

 

์ž๋ฐ”[JAVA] : Set - HashSet / TreeSet / LinkedHashSet ์•Œ์•„๋ณด๊ธฐ.

- Set - ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ. ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. - ์ธ๋ฑ์Šค๋กœ ์š”์†Œ๋“ค์„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚˜์˜ ํŒ๋งค์‚ฌ์ดํŠธ์˜ ํ•˜๋ฃจ ๋ฐฉ๋ฌธ์ž ์ˆ˜(์ค‘๋ณต ์ ‘์†์„ ์ œ์™ธํ•œ)๋ฅผ ๊ตฌํ•˜

doompok.tistory.com

 

 

 

- ArrayList ๊ตฌ์กฐ ์ถœ์ฒ˜

 

๐Ÿงฑ ์ž๋ฐ” ArrayList ๊ตฌ์กฐ & ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ

ArrayList ์ปฌ๋ ‰์…˜ ์ž๋ฐ”์˜ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ ‘ํ•œ๋‹ค๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋ฐฐ์šฐ๋Š” ์ปฌ๋ ‰์…˜์ด ArrayList ์ผ ๊ฒƒ์ด๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ(Data Structure) ์ด๋ผ๊ณ  ํ•ด์„œ ๋ฌด์–ธ๊ฐ€ ๋ฐฉ๋Œ€ํ•˜๊ฒŒ ๋Š๊ปด์ ธ ์ ‘๊ทผ์ด ์–ด๋ ค์šธ ๊ฒƒ ์ฒ˜๋Ÿผ ๋Š๋ผ๊ฒ ์ง€

inpa.tistory.com

 

 

 

- display ์ถœ์ฒ˜

 

[html/css] display ์†์„ฑ (inline, block, none, inline-block ์ฐจ์ด), visibility ์†์„ฑ(visible, hidden, collapse ์ฐจ์ด)

display ์†์„ฑ (inline, block, none ์ฐจ์ด), visibility ์†์„ฑ(visible, hidden, collapse ์ฐจ์ด) ์˜ค๋Š˜ ์•Œ์•„ ๋ณผ ์†์„ฑ์€, ์–ด๋–ค ์š”์†Œ๋ฅผ ํ™”๋ฉด์— ๋ณด์ด๊ฑฐ๋‚˜ ์ˆจ๊ธธ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” display์™€ visibilty ์†์„ฑ์ž…๋‹ˆ๋‹ค. *display์™€ visibilty ์ฐจ์ด

aboooks.tistory.com

 

 

 

- border-radius ์ฐจ์ด

 

border-radius 50% vs 100%

1. border-radius 50% vs 100% ์šฐ๋ฆฌ๋Š” border-radius: 50%๋ฅผ ์ง€์ •ํ•˜์—ฌ ์›์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํƒ€์ธ์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด 50%, 100% ๋“ฑ 2๊ฐ€์ง€๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ์“ฐ๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด border-radius: 50%, 100%์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ? (

mong-blog.tistory.com

 

 

 

 

 

 

[ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ ]

 

Spring - [intelliJ] ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ

[ Hello,World ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [IntelliJ] Hello World ์ถœ๋ ฅํ•˜๊ธฐ[ Spring MVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜

post-this.tistory.com

 

 


 

 

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด
๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ

 

 

 

 

1. ๋™์ž‘ํ™”๋ฉด๊ณผ ์ „์ฒด์ฝ”๋“œ

 

๋™์ž‘ํ™”๋ฉด

 

 

 

์ž๋ฐ”์ฝ”๋“œ

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.*;

@Controller
public class RandomNum {

    Random rd = new Random();
    Set<Integer> lottoSet = new TreeSet<>();

    @GetMapping("/")
    public String firstPage() {
        return "button";
    }

    @GetMapping("/Random")
    public String randomPage(Model model) {

        while(true) {
            int ranNum = rd.nextInt(45)+1;
            lottoSet.add(ranNum);

            if(lottoSet.size() == 6) {
                break;
            }
        }

        model.addAttribute("Number",lottoSet);

        return "button";
    }


}

 

 

html ์ฝ”๋“œ

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ</title>
    <link rel="stylesheet" href="css/style.css" type="text/css">


</head>

<body>

<div class="top">
    <div class="center">
        <h1> <b> ๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ๊ธฐ </b> </h1>
        <h1> Lotto</h1>


        <div class="numPadding">
            <h1 th:text="${Number}"> RandomNumber </h1>
         </div>

        <div class="padding">
            <form th:action="@{/Random}" method = "get">
                <button class="btn" type="submit" > ๋ฒ„ํŠผ </button>
            </form>
        </div>
    </div>
</div>

</body>
</html>

 

 

css ์ฝ”๋“œ

.top {
    margin-top: 100px;
    margin-bottom: 100px;
    margin-left: 50px;
    margin-right: 50px;
}

.padding {
    padding-top:100px;
    padding-bottom:10px;
    padding-left:auto;
    padding-right:auto;
}

.numPadding {
    padding-top:100px;
    padding-bottom:0px;
    padding-left:0px;
    padding-right:0px;
}


.center {
    text-align: center;
}

.btn {
    background-color: #AC72E5;
    color: white;
    border: none;
    border-radius:20px;
    width:200px;
    height:60px;
    font-size:40px;
    text-align: center;
    cursor: pointer;
}

 

 

 

 


 

 

 

 

2. ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€ ์ƒ๊ฐํ•˜๊ธฐ ๐Ÿง˜๐Ÿป‍โ™€๏ธ

 

 

๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ๋ฌธ์žฅ์ด ์ถœ๋ ฅ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์กฐ๊ธˆ๋งŒ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พธ๋ฉด ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ๋ฅผ ์ถœ๋ ฅ๋˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 

[ ๋ณ€๊ฒฝ์‚ฌํ•ญ ]

 

โ–ก ํ…์ŠคํŠธ์™€ ๋ฒ„ํŠผ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๊ธฐ.

     โ–ป  css๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ.

 

โ–ก ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅ (์ค‘๋ณตX, ์˜ค๋ฆ„์ฐจ์ˆœ)

    โ–ป  java.util.Random ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ

 

 

 

 


 

 

 

 

 

3. ์ฒซ๋ฒˆ์งธ๋กœ ๋ณด์—ฌ์ค„ ํ™”๋ฉด ๋Œ€์ถฉ ๋งŒ๋“ค๊ธฐ.

 

๋””๋ ‰ํ† ๋ฆฌ ์ฐธ๊ณ 

 

 

 

โ–ก Controller ๋””๋ ‰ํ† ๋ฆฌ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์— RandomNum ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ.

 

 

โ–ก RandomNum ํด๋ž˜์Šค์— ์ฒซ ํ™”๋ฉด ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ.

 

@GetMapping("/")
public String firstPage() {
    return "button";
}

 

์ €๋ฒˆ ์˜ˆ์ œ์—์„œ ์„ค๋ช…์„ ์ ์–ด๋‘์—ˆ์ง€๋งŒ, ์งง๊ฒŒ ์„ค๋ช…ํ•ด๋ณด๊ฒ ๋‹ค. ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด @GetMapping์€ ๊ด„ํ˜ธ ์•ˆ์— ์žˆ๋Š” ๊ฒฝ๋กœ์™€ ์š”์ฒญ ๊ฒฝ๋กœ๊ฐ€ ๋งž๋Š”์ง€ ๋ณด๊ณ , ๋งž์œผ๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ์—์„  ("/")๋กœ ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ค๋ฉด button.html์„ ๋ฐ˜ํ™˜ํ•˜๋ผ๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

 

 

 

โ–ก  button.html์— ๊ธฐ๋ณธ ๋™์ž‘ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ.

<head>
    <meta charset="UTF-8">
    <title>๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ</title>
</head>

 

title์€ ํƒญ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

<body>
     <h1> <b> ๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ๊ธฐ </b> </h1>
     <h1> Lotto</h1>

     <h1 th:text="${Number}"> RandomNumber </h1>
        
     <form th:action="@{/Random}" method = "get">
            <button class="btn" type="submit" > ๋ฒ„ํŠผ </button>
     </form>

</body>

 

body ์•ˆ์— ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๊ธธ ์›ํ•˜๋Š” ๋ฌธ์žฅ๊ณผ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์—ˆ๋‹ค. $Number์—๋Š” ๋žœ๋ค์œผ๋กœ ์ถœ๋ ฅํ•œ 6๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ๋‚˜ํƒ€๋‚  ๊ณต๊ฐ„์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์•„๋ž˜ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด get ๋ฐฉ์‹์œผ๋กœ Controller์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค.

 

์ด ์ฝ”๋“œ์˜ ๋™์ž‘ ๋ฐฉ์‹์€ ์ด์ „์— ์ž‘์„ฑํ•œ Hello,World์— ์ž์„ธํ•˜๊ฒŒ ์ ์–ด๋†จ๋‹ค. ํ•˜์ง€๋งŒ ๋ณต์Šตํ• ๊ฒธ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…์„ ๋ง๋ถ™์—ฌ๋ณด๊ฒ ๋‹ค. ํƒ€์ž„๋ฆฌํ”„๋Š” ์ˆœ์ˆ˜ํ•œ html์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๋™์ ์ธ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜์˜๋˜์–ด์•ผํ•  ์ฝ”๋“œ์— th๋ฅผ ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค.

 

๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ๊ธฐ์™€ Lotto๋Š” ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค. ํ…์ŠคํŠธ๋กœ ํ™”๋ฉด์— ๊ทธ์ € ์ถœ๋ ฅ๋˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฒ„ํŠผ์˜ ๊ฒฝ์šฐ, ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด /Random์ด๋ผ๋Š” ๊ฒฝ๋กœ๋ฅผ get ๋ฐฉ์‹์œผ๋กœ Controller์—๊ฒŒ ๋ณด๋‚ธ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋™์ ์œผ๋กœ ์›€์ง์ด๊ฒŒ ๋˜๋ฏ€๋กœ form์— th๊ฐ€ ๋ถ™๊ฒŒ๋œ ๊ฒƒ์ด๋‹ค. ๊ทธ ์œ„์˜ ์ฝ”๋“œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ์ฒซ ํ™”๋ฉด์—์„  ๋žœ๋คํ•œ ์ˆซ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ ํ™”๋ฉด์— ์ˆซ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜์•ผํ•œ๋‹ค. ์ด๊ฒŒ ๋ฐ”๋กœ ๋™์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์˜ํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ${Number}์— th๊ฐ€ ๋ถ™์€ ๊ฒƒ์ด๋‹ค.

 

์ž ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฒซ ํ™”๋ฉด ํŽ˜์ด์ง€๋ฅผ ๋„์› ๋‹ค.

 

 

 

 


 

 

 

 

 

3. css ๋งŒ๋“ค๊ธฐ.

 

์ด ๋ถ€๋ถ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์กฐ๊ธˆ ํ—ค๋งธ๋‹ค.

 

 

 

 

โ–ก  resources ์•ˆ์— static ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.

 

โ–ก  static ์•ˆ์— css ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.

 

โ–ก  ๊ทธ๋Ÿฌ๋ฉด ์ €๋ ‡๊ฒŒ static.css๊ฐ€ ์™„์„ฑ๋œ๋‹ค. 

 

โ–ก  static.css ๋ฐ‘์— file - style.css๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

 

 

 

3. css ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ.

 

 

โ–ก  ๋ชจ๋“  ์š”์†Œ ์ค‘์•™์— ๋ฐฐ์—ดํ•˜๊ธฐ.

.center {
    text-align: center;
}

 

 

 

โ–ก  margin์œผ๋กœ ์—ฌ๋ฐฑ์„ ์ด ์„ธ ๊ฐœ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ์„ธ๊ตฌ์—ญ์œผ๋กœ ์—ฌ๋ฐฑ์„ ์„ค์ •ํ•  ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ first๋Š” [๋กœ๋˜๋ฒˆํ˜ธ์ƒ์„ฑ๊ธฐ-Lotto-๋žœ๋ค์ˆซ์ž 6๊ฐœ-๋ฒ„ํŠผ]์„ ๊ฐ์‹ผ ๋ฐ– ๋ถ€๋ถ„์— ์—ฌ๋ฐฑ์„ ๋„ฃ์„ ๊ฒƒ์ด๊ธฐ์—, ์ƒํ•˜์ขŒ์šฐ์— ์›ํ•˜๋Š” ์—ฌ๋ฐฑ์˜ ํฌ๊ธฐ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค.

 

.first {
    margin-top: 100px;
    margin-bottom: 100px;
    margin-left: 50px;
    margin-right: 50px;
}

.second {
    margin-top: 100px;
    margin-bottom: 0px;
    margin-left: 0px;
    margin-right: 0px;
}

.third {
    margin-top: 200px;
    margin-bottom: 0px;
    margin-left: 0px;
    margin-right: 0px;
}

 

 

 

 

 

โ–ก  ๋ฒ„ํŠผ ์ปค์Šคํ…€ํ•˜๊ธฐ.

.btn {
    background-color: #AC72E5;
    color: white;
    border: none;
    border-radius:20px;
    width:200px;
    height:60px;
    font-size:40px;
    text-align: center;
    cursor: pointer;
}

 

background-color๋Š” ์ž์‹ ์ด ์›ํ•˜๋Š” ๋ฐฐ๊ฒฝ์ƒ‰์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค. ๊ฒ€์ƒ‰์ฐฝ์— ์ปฌ๋Ÿฌ์ฐจํŠธ๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋‹ค์–‘ํ•œ ์‚ฌ์ดํŠธ๊ฐ€ ๋œฌ๋‹ค. ์•„๋ฌด ๊ณณ์— ๋“ค์–ด๊ฐ€ ์›ํ•˜๋Š” ์ปฌ๋Ÿฌ๋ฅผ ์„ ํƒํ•˜์—ฌ HEX ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค. color๋Š” ๊ธ€์ž ์ƒ‰์ƒ์ด ๋˜๊ณ  ์ด๊ฒƒ๋„ ์›ํ•˜๋Š” ์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค. border๋Š” ํ…Œ๋‘๋ฆฌ, border-radius๋Š” ํ…Œ๋‘๋ฆฌ์˜ ๊ณก์„ ์„ ์˜๋ฏธํ•œ๋‹ค. ์•ฝ๊ฐ„ ๋‘ฅ๊ทผ ๋ฒ„ํŠผ์„ ์›ํ•ด์„œ 20px๋กœ ์ ์–ด์ฃผ์—ˆ๋‹ค. width์™€ height๋Š” ๋ฒ„ํŠผ ๋„ˆ๋น„์™€ ๋†’์ด๊ฐ€ ๋˜๊ณ , font-size๋Š” ๊ธ€์ž ํฌ๊ธฐ, text-align์€ ๊ธ€์ž ์ค‘์•™๋ฐฐ์—ด์„ ์˜๋ฏธํ•œ๋‹ค. cursor๋Š” ๋ฒ„ํŠผ ์œ„์— ๋ˆŒ๋ €์„ ๋•Œ ๋งˆ์šฐ์Šค ๋ชจ์–‘์ด ๋ณ€๊ฒฝ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ปค์„œ ๋ชจ์–‘ ๋ณ€๊ฒฝ

 

 

 

 


 

 

 

 

4. html์— css ์ ์šฉ์‹œํ‚ค๊ธฐ.

 

 

โ–ก  html์— css ์—ฐ๊ฒฐํ•˜๊ธฐ.

<head>
    <meta charset="UTF-8">
    <title>๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ</title>
    <link rel="stylesheet" href="css/style.css" type="text/css">
</head>

 

head์— ๋งŒ๋“ค์–ด๋‘” css๋ฅผ link๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•  ๊ฒƒ์ด๋‹ค. rel์€ ์†์„ฑ ๊ฐ’์œผ๋กœ ๋ฐ˜๋“œ์‹œ ์ ์–ด์ค˜์•ผํ•œ๋‹ค. ๊ฐ’์œผ๋กœ "stylesheet"๋ฅผ ์ ์—ˆ๋‹ค. ์˜๋ฏธ๋Š” ๋งํฌ๋œ ํŒŒ์ผ์„ ์Šคํƒ€์ผ์‹œํŠธ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๊ณ  ์•Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. href๋Š” ์Šคํƒ€์ผ์‹œํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ ์–ด์ฃผ๊ณ  type์—” ๋งํฌ๋œ ํŒŒ์ผ์˜ ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค. 

 

 

 

โ–ก  css ์ ์šฉ์‹œํ‚ค๊ธฐ.

<div class="first">
    <div class="center">
        <h1> <b> ๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ๊ธฐ </b> </h1>
        <h1> Lotto</h1>


        <div class="second">
            <h1 th:text="${Number}"> RandomNumber </h1>
         </div>

        <div class="third">
            <form th:action="@{/Random}" method = "get">
                <button class="btn" type="submit" > ๋ฒ„ํŠผ </button>
            </form>
        </div>
    </div>
</div>

 

css์—์„œ .first์— ์„ค์ •ํ•œ margin(์—ฌ๋ฐฑ)์„ ๋ชจ๋“  ์š”์†Œ์— ์ ์šฉ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ๋กœ ์ ์–ด์ฃผ์—ˆ๋‹ค. css ์š”์†Œ๋ฅผ ์ ์šฉ์‹œํ‚ฌ๋•Œ ์ง€์ •ํ•œ ์ด๋ฆ„์—์„œ ์˜จ์ ์„ ๋บ€ ์ด๋ฆ„์„ class=" "์— ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ์ด์–ด์„œ ๋ชจ๋“  ์š”์†Œ์— ์ ์šฉ์‹œํ‚ฌ ๊ฐ€์šด๋ฐ ์ •๋ ฌ์„ ๊ทธ ๋‹ค์Œ์œผ๋กœ ์ ์–ด ๊ธฐ๋ณธ์ ์ธ ํ…Œ๋‘๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์ด ์•ˆ์— ๋“ค์–ด๊ฐˆ ์š”์†Œ๋“ค์€ ๊ฐ€์šด๋ฐ ์ •๋ ฌ์„ ํฌํ•จํ•˜์—ฌ ์ƒ•ํ•˜ 100px, ์ขŒ•์šฐ 50px๊ฐ€ ๋„์–ด์ ธ์„œ ์‹œ์ž‘๋  ๊ฒƒ์ด๋‹ค. 

 

๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ๊ฐ€ Lotto์™€ ๋–จ์–ด์ ธ์„œ ์œ„์น˜ํ•˜๊ธธ ์›ํ•˜๋ฏ€๋กœ ์ƒ 100px๋งŒ ๋„์–ด์ง„ .second๋ฅผ class์— ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ ํ›„ 6๊ฐœ์˜ ๋žœ๋ค ์ˆซ์ž์™€ ๋ฒ„ํŠผ์ด ์ผ์ •๊ฐ„๊ฒฉ ๋–จ์–ด์ง€๊ธธ ์›ํ•˜๋‹ˆ .third๋ฅผ ์ ์–ด ๊ฐ์‹ธ์ค€๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฒ„ํŠผ์—๋Š” <button class="btn"...>์„ ์ ์–ด css๋ฅผ ์ ์šฉ์‹œํ‚จ๋‹ค.

 

 

 

 


 

 

 

 

5. ๋žœ๋คํ•œ ์ˆซ์ž ๋‚˜์˜ค๋„๋ก ์ถœ๋ ฅํ•˜๊ธฐ.

 

โ–ก ์ „์ฒด์ฝ”๋“œ

@Controller
public class RandomNum {

    Random rd = new Random();
    Set<Integer> lottoSet = new TreeSet<>();

    @GetMapping("/")
    public String firstPage() {
        return "button";
    }

    @GetMapping("/Random")
    public String randomPage(Model model) {

        while(true) {
            int ranNum = rd.nextInt(45)+1;
            lottoSet.add(ranNum);

            if(lottoSet.size() == 6) {
                break;
            }
        }

        model.addAttribute("Number",lottoSet);

        return "button";
    }


}

 

 

 

 

โ–ก ๋žœ๋ค์„ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜ ์ •์˜

Random rd = new Random();
Set<Integer> lottoSet = new TreeSet<>();

 

Java์—์„œ ์ œ๊ณตํ•˜๋Š” Random ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ rd๋ผ๊ณ  ๋ณ€์ˆ˜๋ช…์„ ๋„ฃ์—ˆ๋‹ค. ์ดˆ๋ฐ˜์— ์–ด๋–ค ์‹์œผ๋กœ ๋งŒ๋“ค์ง€ ๊ตฌ์ƒํ•  ๋•Œ, ์ค‘๋ณต์ด ์—†์œผ๋ฉด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ ๋ฐฐ์—ด๋กœ ๋‚˜์˜ค๋Š” ๊ฑธ ์›ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ TreeSet์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. TreeSet์€ ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ํด๋ผ์Šค์ธ๋ฐ, ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ ์ค‘ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ๋กœ ์ด๋ค„์ ธ์žˆ๋‹ค. ์•„๋งˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฅผ ํ•˜๊ฑฐ๋‚˜, ์ˆ˜์—…์„ ๋“ค์€ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋“ค์–ด๋ดค์„ ๊ฒƒ์ด๋‹ค. 

 

Set ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง„ ์•Š์ง€๋งŒ, ์ €์žฅ ์ˆœ์„œ๋Š” ์ƒ๊ด€ํ•˜์ง€ ์•Š๋Š”๋‹ค. HashSet์„ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ๋˜๋ฒˆํ˜ธ์ถœ๋ ฅ์—์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ œ๋Œ€๋กœ ์ด๋ค„์ง€์ง€ ์•Š๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ TreeSet์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ€๋ชจ๋…ธ๋“œ์™€ ์™ผ์ชฝ ๋…ธ๋“œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‚˜์—ด๋œ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‚˜์ค‘์— ์˜ฌ๋ ค๋ณด๋„๋ก ํ•˜๋ฉฐ, ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋ธ”๋กœ๊ทธ๋ฅผ ์ถœ์ฒ˜์— ๋‚จ๊ฒจ๋†“๊ฒ ๋‹ค.

 

 

๊ทธ๋ ‡๊ฒŒ TreeSet์„ ์ด์šฉํ•˜์—ฌ ๋žœ๋ค ์ˆซ์ž๋ฅผ lottoSet์— ์ €์žฅ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

 

 

 

โ–ก ๋žœ๋ค์œผ๋กœ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ณ  ๋ฐ˜ํ™˜ํŽ˜์ด์ง€์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ.

@GetMapping("/Random")
public String randomPage(Model model) {

    while(true) {
        int ranNum = rd.nextInt(45)+1;
        lottoSet.add(ranNum);

        if(lottoSet.size() == 6) {
            break;
        }
    }

    model.addAttribute("Number",lottoSet);

    return "button";
}

 

@GetMapping์— ๋“ค์–ด์˜ฌ ๊ฒฝ๋กœ๋ฅผ ์ ์–ด์ค€๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ์—์„  /Random์ด๋ผ ์ ์—ˆ๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๊ฒŒ ๋˜๋ฉด form์—์„œ Random ๊ฒฝ๋กœ๋ฅผ get ๋ฐฉ์‹์œผ๋กœ Controller์—๊ฒŒ ๋ณด๋‚ด๋„๋ก ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์š”์ฒญ ๊ฒฝ๋กœ์— ๋งž๊ฒŒ ์ˆ˜ํ–‰ํ•  ๋ฉ”์„œ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด @GetMapping์— /Random์„ ์ž‘์„ฑํ–ˆ๋‹ค.

 

์ž ์ด์ œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด randomPage ๋ฉ”์„œ๋“œ๋Š” ์ˆ˜ํ–‰๋  ๊ฒƒ์ด๋‹ค. ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ์ธ while๋ฌธ์œผ๋กœ ๊ฐ„๋‹ค. lottoSet์˜ ํฌ๊ธฐ๊ฐ€ 6์ด ์•„๋‹ˆ๋ผ๋ฉด while์€ ๊ณ„์† true์ผ ๊ฒƒ์ด๊ณ , ๋žœ๋คํ•œ ์ˆซ์ž๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ nextInt(45)+1์˜ ์˜๋ฏธ๋Š”, 45 = 0 ~ 44๊นŒ์ง€์˜ ์ด 45๊ฐœ, +1 = 1์”ฉ ๋”ํ•œ 1 ~ 45๋กœ ๋ฐ”๊พผ ๊ฒƒ์ด ๋œ๋‹ค.

 

๋žœ๋ค ์ˆซ์ž์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰์„ ํ•˜๊ฒŒ๋˜๋ฉด for๋ฌธ์ด ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  for๋ฌธ์œผ๋กœ ์ž‘์„ฑ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” while๋ฌธ ์‚ฌ์šฉ์„ ์ž˜ ์•ˆํ•ด๋ด์„œ while๋ฌธ์œผ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค. for๋ฌธ ์ฝ”๋“œ๋Š” ์•„๋ž˜์— ์˜ฌ๋ ค๋†“๊ฒ ๋‹ค.

 

์ด์ œ ๋งˆ์ง€๋ง‰์œผ๋กœ Model์„ ์ด์šฉํ•˜์—ฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ์˜ ๋ฐฐ์—ด์„ ๋ทฐ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋ณด๋‚ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. Model์— ๊ด€ํ•œ ์„ค๋ช…๋„ ์•ž์— ํ–ˆ๋˜ Hello,World!์— ์ ์–ด๋’€๋‹ค. ์—ฌ๊ธฐ์„œ ๋ณต์Šตํ•  ๊ฒธ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, ๋ฐ์ดํ„ฐ๋ฅผ ๋ทฐ๋กœ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ html์— ์žˆ๋Š” Number์— lottoSet์„ ๋ณด๋‚ด๊ณ  return์„ ํ†ตํ•ด ๋‹ค์‹œ button ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

 

 

 

โ–ก for๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์ž‘์„ฑํ•œ Controller

package com.LottoWeb.LuckyLotto.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.*;

@Controller
public class RandomNum {

    Random rd = new Random();
    Set<Integer> lottoSet = new TreeSet<>();

    @GetMapping("/")
    public String firstPage() {
        return "button";
    }

    @GetMapping("/Random")
    public String randomPage(Model model) {

        for(int i=1; lottoSet.size() < 6; i++ ){
            int ranNum = rd.nextInt(45)+1;
            lottoSet.add(ranNum);
        }

        model.addAttribute("Number",lottoSet);

        return "button";
    }


}

 

 

 

 


 

 

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ (2) ]

 

Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2)

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ[ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ ] Spring - [intelliJ] ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ[ Hello,World

post-this.tistory.com

 

 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 


 

 

 

- TreeSet ์ถœ์ฒ˜

 

[Java/์ž๋ฐ”] TreeSet ์‚ฌ์šฉ๋ฒ•

TreeSet์€ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ(binary search tree)๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ •๋ ฌ, ๊ฒ€์ƒ‰, ๋ฒ”์œ„๊ฒ€์ƒ‰(range search)์— ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์ด๋ฉฐ TreeSet์€ ์ด์ง„

hstory0208.tistory.com

 

 

 

- ๋žœ๋ค ์ˆซ์ž ์ƒ์„ฑ ์ถœ์ฒ˜ (while)

 

[JAVA] ๋žœ๋ค ์ˆซ์ž(๋‚œ์ˆ˜) ์ƒ์„ฑํ•˜๊ธฐ - Random , Math

๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด๋ด…์‹œ๋‹ค ๐Ÿ˜Ž์˜ค๋Š˜์€ ์ž๋ฐ”์—์„œ ๋žœ๋ค ์ˆซ์ž ๋งŒ๋“œ๋Š” ๋ฒ•์„ ์•Œ์•„๋ด…์‹œ๋‹ค. ๊ฐœ๋…์ž๋ฐ”์—์„œ ๋‚œ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.Random ํด๋ž˜์Šค ์‚ฌ์šฉMath.random() ์ฐจ์ด์ 1. Random ํด๋ž˜์Šค๋Š” int, long,

e-you.tistory.com

 

 

 

- html๊ณผ link ์—ฐ๊ฒฐ ์ถœ์ฒ˜

 

HTML <link> rel, type, href

: HTML Link ์š”์†Œ๋Š” ํ˜„์žฌ ๋ฌธ์„œ์™€ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค์™€์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ์š”์†Œ๋Š” ์Šคํƒ€์ผ ์‹œํŠธ์— ๋งํฌํ•˜๋Š” ๋ฐ์— ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. rel="์†์„ฑ ๊ฐ’" : ์š”์†Œ์— ๋ฐ˜๋“œ์‹œ ๋ช…์‹œ๋˜์–ด์•ผ ํ•˜๋Š” ํ•„์ˆ˜ ์†์„ฑ

junbucks7.tistory.com

 

 

 

- ์Šคํƒ€์ผ ์‹œํŠธ ์ถœ์ฒ˜

 

์Šคํƒ€์ผ ์‹œํŠธ๋ž€?

์ œ1์žฅ ์Šคํƒ€์ผ ์‹œํŠธ๋ž€? ใ… ์Šคํƒ€์ผ ์‹œํŠธ๋Š” ๊ธ€๊ผด์˜ ํฌ๊ธฐ๋‚˜ ๋ชจ์–‘, ์ปฌ๋Ÿฌ ๊ทธ๋ฆฌ๊ณ  ๋ฌธ๋‹จ ์„ค์ •์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ์Šคํƒ€์ผ...

blog.naver.com

 

 

 

- ์ปฌ๋Ÿฌ์ฐจํŠธ ์ถœ์ฒ˜

 

colorate | ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž๋ฅผ์œ„ํ•œ ์ƒ‰ ๊ตฌ์„ฑํ‘œ ๋„๊ตฌ.

colorate๋Š” ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์˜๊ฐ์„ ์ฃผ๋Š” ์ƒ‰ ๊ตฌ์„ฑํ‘œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ƒ‰์ฑ„ ์ž‘์—…์„ ์œ„ํ•œ ์ž๋ฃŒ๋กœ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

colorate.azurewebsites.net

 

 

 

- CSS ํ…์ŠคํŠธ ๊ฐ€์šด๋ฐ ์ •๋ ฌ ์ถœ์ฒ˜

 

[HTML/CSS] DIV ์•ˆ์˜ ํ…์ŠคํŠธ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๊ธฐ (๊ฐ€๋กœ, ์„ธ๋กœ)

์ด๋ฒˆ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด div ์•ˆ์— ์žˆ๋Š” text๋ฅผ ๊ฐ€๋กœ, ์„ธ๋กœ๋กœ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•ˆ๋…•ํ•˜์„ธ์š” .my-div { border : 1px solid blue; height : 200px; } 1. ๊ฐ€๋กœ๋กœ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๊ธฐ ์—ฌ๊ธฐ์—์„œ ์†Œ๊ฐœ

hianna.tistory.com

 

 

 

- CSS ๋ฒ„ํŠผ ํฌ๊ธฐ ์กฐ์ • ์ถœ์ฒ˜

 

[HTML/CSS] ๋ฒ„ํŠผ ํฌ๊ธฐ ์กฐ์ •ํ•˜๊ธฐ (padding)

๋ฒ„ํŠผ์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ width, height ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, padding ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํŠผ ํฌ๊ธฐ ์กฐ์ •ํ•˜๊ธฐ (width, height) ๋จผ์ € width, height๋กœ ๋ฒ„ํŠผ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

hianna.tistory.com

 

 

 

- ๋ฒ„ํŠผ ์ปค์Šคํ…€ ์ถœ์ฒ˜

 

์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฒ„ํŠผ ๊ฐ€์šด๋ฐ ์ •๋ ฌ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

ํŽธ์˜์ƒ ํด๋ž˜์Šค A, B๋กœ ์„ค๋ช…. 1. ํƒœ๊ทธ๋กœ ์—ฌ๋Ÿฌ ๋ฒ„ํŠผ(ํด๋ž˜์Šค B)๋“ค์„ ๊ฐ์‹ธ๋ฉด์„œ ํด๋ž˜์Šค(A) ์ง€์ •ํ•ด์ฃผ๊ณ  2. ํด๋ž˜์Šค A์˜ ์Šคํƒ€์ผ(css)์— text-align: center๋กœ ์ค‘์•™์ •๋ ฌํ•˜๊ณ  3. ํด๋ž˜์Šค B์˜ ์Šคํƒ€์ผ(css)์— inline-block ์†์„ฑ

mangocoding-journal.tistory.com

 

 

 

[ Hello,World ์ถœ๋ ฅํ•˜๊ธฐ ]

 

Spring - [IntelliJ] Hello World ์ถœ๋ ฅํ•˜๊ธฐ

[ Spring MVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜๋‹ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์œผ๋กœ ์•Œ์•„์•ผํ•˜๋Š”

post-this.tistory.com

 


 

 

 

๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World!
๐ŸŒง๏ธ

 

 

 

 

1. ๋™์ž‘ํ™”๋ฉด๊ณผ ์ฝ”๋“œ

 

 

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด

 

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="UTF-8">
    <title>๊ฐ„๋‹จํ•œ ๋ฒ„ํŠผ ์˜ˆ์ œ</title>
</head>

<body>
<h2 th:text="${message}">message</h2>

<form th:action="@{/hello}" method="get">
    <button type="submit">๋ฒ„ํŠผ</button>
</form>

</body>

</html>

 

 

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Controller
public class HelloController {


    @GetMapping("/")
    public String empty() {
        return "button";
    }

    @GetMapping("/hello")
    public String helloWorld(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "button";
    }

}

 

 

 

 


 

 

 

 

 

2. ํƒ€์ž„๋ฆฌํ”„ dependencies ์ถ”๊ฐ€ํ•˜๊ธฐ.

 

ํƒ€์ž„๋ฆฌํ”„(Thymeleaf)์— ๋Œ€ํ•ด์„œ ์„ค๋ช…์„ ๊ฐ„๋žตํ•˜๊ฒŒ ํ•ด๋ณด์ž๋ฉด, ์ˆœ์ˆ˜ํ•œ HTML์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ทฐ ํƒฌํ”Œ๋ฆฟ์„ ๊ฑฐ์น˜๋ฉด ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ผํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ˆœ์ˆ˜ํ•œ HTML์„ ์œ ์ง€ํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋„ค์ธ„๋Ÿด ํ…œํ”Œ๋ฆฟ(natural templates) ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ณดํ†ต Spring MVC์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

 

โ–ก build.gradle๋ฅผ ์ฐพ์•„ ๋ˆ„๋ฅธ๋‹ค.

 

 

 

โ–ก ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค.

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

 

 

 

โ–ก dependencies์— ๋ถ™์—ฌ๋„ฃ๋Š”๋‹ค.

 

 

 

โ–ก ์ƒˆ๋กญ๊ฒŒ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด ์ฝ”๋ผ๋ฆฌ(?)๋ฅผ ๋ˆŒ๋Ÿฌ์ค€๋‹ค.

 

 

 

โ–ก ์ œ๋Œ€๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

 

 

 

 


 

 

 

 

 

3. HTML์„ ํ†ตํ•ด ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ.

 

 

โ–ก ์ „์ฒด ์ฝ”๋“œ

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="UTF-8">
    <title>๊ฐ„๋‹จํ•œ ๋ฒ„ํŠผ ์˜ˆ์ œ</title>
</head>

<body>
<h2 th:text="${message}">message</h2>

<form th:action="@{/hello}" method="get">
    <button type="submit">๋ฒ„ํŠผ</button>
</form>

</body>

</html>

 

 

 

โ–ก resources ๋ฐ‘์— ์žˆ๋Š” templates์— button.html์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

    • ๋งŒ์ผ ์—†๋‹ค๋ฉด templates๋ฅผ directory๋กœ ๋จผ์ € ๋งŒ๋“ค์–ด์ค€ ํ›„ ํ•˜์œ„์— button.html์„ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

 

 

 

โ–ก HTML์„ ํƒ€์ž„๋ฆฌํ”„ ํ†ตํ•ด์„œ ์ž‘๋™๋˜๋„๋ก ํ•ด์ค€๋‹ค.

<html lang="en" xmlns:th="http://www.thymeleaf.org">

 

๋’ค์— xmlns:th="htttp://www/thymeleaf.org" ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

โ–ก ํƒ€์ดํ‹€ ์ž‘์„ฑํ•˜๊ธฐ.

<title>๊ฐ„๋‹จํ•œ ๋ฒ„ํŠผ ์˜ˆ์ œ</title>

 

 

 

 

โ–ก <body> ์ž‘์„ฑํ•˜๊ธฐ.

 

์ž‘์„ฑํ•˜๊ธฐ ์ „์— ์•Œ์•„์•ผ ํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค. ๋ฐ”๋กœ th๋ผ๋Š” ๊ฒƒ์ธ๋ฐ, th๋Š” ํƒ€์ž„๋ฆฌํ”„๋กœ ๋™์ ์œผ๋กœ ์ž‘์šฉํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์— ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ์ฆ‰ ํƒ€์ž„๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ xmlns:th="htttp://www/thymeleaf.org"์„ ์ •์˜ํ•˜๊ณ , ๋™์ ์œผ๋กœ ์ž‘์šฉํ•ด์•ผํ•  ๋ถ€๋ถ„์— th๋ฅผ ์ ์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ๋ถ€๋ถ„์€ ์ˆœ์ˆ˜ํ•œ HTML์„ ์œ ์ง€ํ•˜๋ฉฐ ๋™์ ์œผ๋กœ ๋ณ€ํ™”ํ•ด์ค„ ๊ฒƒ์ด๋‹ค.

 

<h2 th:text="${message}">message</h2>

 

์ฒซ ํ™”๋ฉด์—” ๋ฒ„ํŠผ๋งŒ ์žˆ๊ณ  ํ…์ŠคํŠธ๊ฐ€ ์—†์—ˆ๋‹ค. ๋‘๋ฒˆ์งธ ํ™”๋ฉด์—์„œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ›„ ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด ๋ถ€๋ถ„์€ ๋™์ ์œผ๋กœ ์›€์ง์ธ ๊ฒƒ์ด๋‹ˆ th๋ฅผ ๋ถ™์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค.

 

HTML์€ ${message}๋ฅผ ํ†ตํ•ด Controller์™€ ์—ฐ๊ฒฐํ•  ๊ฒƒ์ด๋‹ค. ${ }๋Š” ๋ณ€์ˆ˜ ํ‘œํ˜„์‹์ด๋ฉฐ Controller์—์„œ ์ „๋‹ฌ๋œ message๋ผ๋Š” ๋ณ€์ˆ˜๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Controller์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ message๋กœ ์ „๋‹ฌํ•˜์—ฌ h2 ๋ถ€๋ถ„์— ์›ํ•˜๋Š” ํ…์ŠคํŠธ๊ฐ€ ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

 

 

 

 

 

โ–ก <form> ์ž‘์„ฑํ•˜๊ธฐ.

 

form์€ ์ฃผ๋กœ ์‚ฌ์šฉ์ž์˜ ์˜๊ฒฌ์ด๋‚˜ ์ •๋ณด๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด ์ž…๋ ฅํ•  ํฐ ํ‹€์„ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. form์€ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋ณด๋‚ด์ง„ ๋ฐ์ดํ„ฐ๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅธ ์›นํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋œ๋‹ค. 

<form th:action="@{/hello}" method="get">
    <button type="submit">๋ฒ„ํŠผ</button>
</form>

 

form์—์„œ th๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด๋ฉด action=@{/hello}์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผํ•œ๋‹ค. ์•„๊นŒ ๋ณ€์ˆ˜ ํ‘œํ˜„์‹์ธ $์™€ ๋‹ค๋ฅด๊ฒŒ @๋กœ ๋ชจ์–‘์ด ๋‹ค๋ฅด๋‹ค. @{ }๋Š” URL ํ‘œํ˜„์‹์œผ๋กœ ์ฃผ๋กœ ๋งํฌ๋‚˜ form์—์„œ action๊ณผ ํ•จ๊ป˜ ์“ฐ์ธ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด action์€ ๋ฌด์—‡์ผ๊นŒ? action์€ form์„ ์ „์†กํ•  ์„œ๋ฒ„์ชฝ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ข€ ๋” ์ง๊ด€์ ์ด๊ฒŒ ๋งํ•ด๋ณด์ž๋ฉด Controller์—์„œ GetMapping(๋“ค์–ด์˜จ ๊ฒฝ๋กœ์— ๋งž์ถฐ ๋ฐ˜ํ™˜ํ•  ํŽ˜์ด์ง€๋ฅผ ์ „์†ก)์— ์‚ฌ์šฉํ•  '๋“ค์–ด์˜จ ๊ฒฝ๋กœ'์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. 

 

๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด์ž. action์€ Controller์˜ ๋ฉ”์„œ๋“œ ์ค‘ ์–ด๋Š ๊ฒƒ๊ณผ ์—ฐ๊ฒฐํ• ์ง€, ์ฆ‰ ์ด form์ด action ์†์„ฑ์„ ํ†ตํ•ด ์–ด๋Š ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์™€ ์—ฐ๊ฒฐํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด action์— ์ ์€ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด form์ด ์„œ๋ฒ„์— ์ „์†กํ•˜๋Š” ๋™์ ์ธ ์›€์ง์ž„์„ ๊ฐ€์ง€๊ธฐ์— th๋ฅผ ๋ถ™์—ฌ ํƒ€์ž„๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์—ฐ๊ฒฐํ•œ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ด๋•Œ ์ด ์ •๋ณด๋ฅผ ์ „์†กํ•  ๋•Œ ์–ด๋–ค ๋ฐฉ์‹์„ ์„ ํƒํ• ์ง€ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋‹ค. get ๋ฐฉ์‹๊ณผ post ๋ฐฉ์‹์ด ์žˆ๋Š”๋ฐ, ์ด์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ๋ธ”๋กœ๊ทธ์— ๋”ฐ๋กœ ์ •๋ฆฌํ•ด๋†จ์œผ๋‹ˆ ๊ฐ„๋žตํ•˜๊ฒŒ๋งŒ ์„ค๋ช…ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค. get์€ URL์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ์ „์†กํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ฃผ์†Œ์ฐฝ์„ ๋ณด๋ฉด ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

hello?๋ผ๊ณ  ์ ํ˜€์žˆ๋‹ค.



 

 

[ GET๊ณผ POST ]

 

SpringBoot - GET๊ณผ POST ๊ทธ๋ฆฌ๊ณ  @GetMapping

[ @Controller์™€ @RestController ] Spring - @Controller์™€ @RestController ๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ์ฝ”๋“œ[ SpringMVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€!

post-this.tistory.com

 

 

์ด์ œ ๋ฒ„ํŠผ์„ ์•Œ์•„๋ณด๊ฒ ๋‹ค.

<form th:action="@{/hello}" method="get">
    <button type="submit">๋ฒ„ํŠผ</button>
</form>

 

๋ฒ„ํŠผ์„ ๋งŒ๋“œ๋Š”๋ฐ type์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. type์€ 3๊ฐœ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”๋ฐ submit , button , reset ์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ์ˆœ์ˆ˜ํ•œ HTML์„ ๊ฐ€์ง€๊ณ  ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ํด๋ฆญ(onclick)์ด๋ผ๋Š” ๋™์ž‘์ด ํฌํ•จ๋˜์–ด์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์•ผ ๋” ํšจ์œจ์ ์ด๋‹ค. ๊ทธ๋ž˜์„œ submit๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ onclick์ด ์—†์–ด๋„ submit์œผ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด form ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ƒฅ ์ „์†ก์‹œํ‚จ๋‹ค.(๋งŒ์•ฝ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ํ•จ๊ป˜ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด button type์œผ๋กœ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.)

 

 

 


 

 

 

4. HelloController

 

 

โ–ก ์ „์ฒด ์ฝ”๋“œ

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Controller
public class HelloController {


    @GetMapping("/")
    public String empty() {
        return "button";
    }

    @GetMapping("/hello")
    public String helloWorld(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "button";
    }

}

 

 

 

โ–ก  ์ฒ˜์Œ ๋“ค์–ด๊ฐ”์„ ๋•Œ ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ.

@GetMapping("/")
public String empty() {
    return "button";
}

 

GetMapping("/")์—์„œ "/"๋Š” ๋ฃจํŠธ ๊ฒฝ๋กœ๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ค๋ฉด button ํ™”๋ฉด์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์•„๊นŒ ์œ„์— ์žˆ๋˜ HTML์„ ๋‹ค์‹œ ์‚ดํŽด๋ณด์ž. ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์•ผ ๋ฉ”์„ธ์ง€๊ฐ€ ํ˜ธ์ถœ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. ๊ฒฝ๋กœ๋ฅผ ๋ณด๋ฉด ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์— ๋“ค์–ด์™”์„ ๊ฒฝ์šฐ(์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์€)์— ํ•ด๋‹นํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์•„์ง ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ธฐ ์ „์ด๋‹ˆ, ๋™์ ์ธ th๋กœ ์ž‘์„ฑํ•œ ๋ถ€๋ถ„์„ ์ œ์™ธํ•˜๋ฉด submit ํƒ€์ž…์œผ๋กœ ์„ค์ •ํ•ด๋‘” ๋ฒ„ํŠผ๋งŒ ๋„์›Œ์ค˜์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

 

๋ฒ„ํŠผ๋งŒ ์žˆ์œผ๋ฉด์„œ, ๋ฃจํŠธ ๊ฒฝ๋กœ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

โ–ก  ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ธ์„ ๊ฒฝ์šฐ, ๋ฉ”์„ธ์ง€๋ฅผ ๋„ฃ์–ด ํ™”๋ฉด ๋ฐ˜ํ™˜ํ•˜๊ธฐ.

@GetMapping("/hello")
public String helloWorld(Model model) {
	model.addAttribute("message", "Hello, World!");
	return "button";
}

 

HTML์—์„œ submit ๋ฐฉ์‹์„ ํ†ตํ•ด, ๋ˆ„๋ฅด๋ฉด ๋ฐ”๋กœ form์ด ์ „์†ก๋˜๋Š” button์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ  /hello ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง„ action์„  Get ์š”์ฒญ์œผ๋กœ ์ „์†ก๋˜๋ฉด, ์—ฌ๊ธฐ @GetMapping("/hello")์—์„œ ๋ฐ›์•„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. 

 

Model์ด ์žˆ๋‹ค. Model์€ SpringMVC์—์„œ ๋ทฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค. ์ฆ‰ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ทฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. Model์€ ํƒ€์ž„๋ฆฌํ”„, JSP์™€ ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ ์—”์ง„๊ณผ ๊ด€๊ณ„์—†์ด ์ž‘๋™๋œ๋‹ค. model์€ Model ํƒ€์ž…์œผ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ addAtrribute๋ฅผ ํ†ตํ•ด ์†์„ฑ์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ์—์„œ ํ‚ค๋Š” message, ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ’์€ Hello, World!๋ผ๊ณ  ์ •ํ–ˆ๋‹ค.

 

์ด์ œ ์ด ์†์„ฑ์€ ๋‹ค์‹œ button์ด๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ HTML๋กœ ์ „๋‹ฌ๋  ๊ฒƒ์ด๋‹ค. HTML ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด๋ฉด ${message}์ด ๋ถ€๋ถ„์— Hello, World!๊ฐ€ ์˜ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

 


 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 


 

 

 

 

- ํƒ€์ž„๋ฆฌํ”„ ์ถœ์ฒ˜

 

Thymeleaf(ํƒ€์ž„๋ฆฌํ”„)๋ž€ ? ํƒ€์ž„๋ฆฌํ”„์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์•Œ์•„๋ณด๊ธฐ

Thymeleaf(ํƒ€์ž„๋ฆฌํ”„)๋ž€ ? ํƒ€์ž„๋ฆฌํ”„๋Š” JSP, Freemarker์™€ ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ ์—”์ง„์˜ ์ผ์ข…์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ HTML ๋ Œ๋”๋ง (SSR) ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ HTML์„ ๋™์ ์œผ๋กœ ๋ Œ๋”๋ง ํ•˜๋Š” ์šฉ

hstory0208.tistory.com

 

 

 

- ํƒ€์ž„๋ฆฌํ”„ ์ถœ์ฒ˜

 

์Šคํ”„๋ง ํƒ€์ž„๋ฆฌํ”„(Thymleaf) ํ•œ๋ˆˆ์— ์ •๋ฆฌํ•˜๊ธฐ

ํƒ€์ž„๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์ „์— ํ™•์ธํ•ด์•ผํ•  ์ •๋ณด 1.ํƒ€์ž„๋ฆฌํ”„ ์˜์กด์„ฑ์ด ์ œ๋Œ€๋กœ ์ฃผ์ž…๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ํƒ€์ž„๋ฆฌํ”„๋ฅผ '์ œ๋Œ€๋กœ' ์“ฐ๋ ค๋ฉด ์‹œ์ž‘ํ•˜๊ธฐ์ „์— ํƒ€์ž„๋ฆฌํ”„๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์น˜๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜์ž. 2. M

taehoung0102.tistory.com

 

 

 

- form ์ถœ์ฒ˜

 

HTML : ํผ(form) ์ดํ•ด

ํผ์€ ์•Œ๊ฒŒ ๋ชจ๋ฅด๊ฒŒ ์›น์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์˜๊ฒฌ์ด๋‚˜ ์ •๋ณด๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด ์ž…๋ ฅํ•  ํฐ ํ‹€์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํผ์€ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์„œ๋ฒ„๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ „์†กํ•œ ๋ฐ์ด

www.nextree.co.kr

 

 

 

-form๊ณผ GET ์ถœ์ฒ˜

 

[Html] form ํƒœ๊ทธ์™€ input ์š”์†Œ๋“ค, GET / POST ๋ฐฉ์‹

โšก๏ธ form html์˜ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ธ form์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Œ์— ์žˆ์–ด์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. form ํƒœ๊ทธ ์•ˆ์— ์‚ฝ์ž…ํ•œ submit ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ๋™๋˜๋ฉด, ์ •์˜๋œ method ์†์„ฑ type์œผ๋กœ action์„ ํ†ตํ•ด ๋ชฉ

lasbe.tistory.com

 

 

 

 

 

 

[ Spring MVC์— ๋Œ€ํ•˜์—ฌ ]

 

Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜๋‹ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์œผ๋กœ ์•Œ์•„์•ผํ•˜๋Š” ๊ฐœ๋…์„ ์ฐจ๊ทผ์ฐจ๊ทผ ์ •๋ฆฌํ•ด๋ณผ๊นŒ ํ•œ๋‹ค.๋‘๋‘ฅ, Spring MVC๋ž€?์•„๋งˆ ์ •๋ณด์ฒ˜

post-this.tistory.com

 

 


 

 

 

์•„์ฃผ ๊ฐ„๋‹จํ•œ ์‹ค์Šต์„ ํ•ด๋ณผ๊นŒํ•œ๋‹ค.

 

 

Hello, World ์ถœ๋ ฅํ•˜๊ธฐ
๐ŸŽƒ




1. Spring initializr ์ƒ์„ฑํ•˜๊ธฐ.

 

https://start.spring.io/

 

 

โ–ก  Dependencies - SpringWeb ์„ ํƒํ•˜๊ธฐ.

โ–ก  Java ํ•ด๋‹นํ•˜๋Š” ๋ฒ„์ „์— ์„ ํƒํ•˜๊ธฐ.

 

 

 

 

โœ”๏ธŽ  [Mac ๊ธฐ์ค€] ์ž๋ฐ” ๋ฒ„์ „์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด?

 

  • ํ„ฐ๋ฏธ๋„์— ๋“ค์–ด๊ฐ„๋‹ค.
  • ํ„ฐ๋ฏธ๋„์— java --version ์ด๋ผ๊ณ  ์น˜๋ฉด๋œ๋‹ค.
    โ–ธ openjdk 17.0.11์œผ๋กœ ํ™•์ธ๋๋‹ค.
  • ๋งŒ์•ฝ ์•ˆ๋œฌ๋‹ค๋ฉด java ์„ค์น˜๊ฐ€ ์•ˆ๋˜์–ด์žˆ์œผ๋‹ˆ, ์„ค์น˜ํ•ฉ์‹œ๋‹ค!

 

 


 

 

 

 

2. GENERATE ๋ˆŒ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

โ–ก ํ•˜๋‹จ ๋งจ ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

 

 

3. ์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ IntelliJ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ.

 

โ–ก Open์„ ๋ˆŒ๋Ÿฌ์ฃผ๊ธฐ.

 

โ–ก ์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์ฐพ๋Š”๋‹ค.
โ–ก build.gradle์„ ์„ ํƒํ•˜์—ฌ ์—ด์–ด์ค€๋‹ค.

 

 

 

โ–ก Open as Project๋ฅผ ์„ ํƒํ•˜์—ฌ ์—ด์–ด์ค€๋‹ค.

 

 

 

 

 


 

 

 

 

4. HelloController๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

 [ ์ปจํŠธ๋กค๋Ÿฌ ๋งŒ๋“œ๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ ]

 

-

 

โ–ก com.pratice.HelloWorld์— ๋งˆ์šฐ์Šค ์™ผ์ชฝ์„ ํด๋ฆญํ•œ๋‹ค.

 

 

โ–ก Class - HelloController๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

 

โ–ก  HelloController๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

 

 

 

 


 

 

 

 

5. HelloController์— HelloWorld๊ฐ€ ์ถœ๋ ฅ๋˜๋„๋ก ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ.

 

@RestController
public class HelloController {

    @GetMapping("")
    public String helloWorld() {
        return "Hello, World";
    }

}

 

@RestController

:  ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด, Hello, World๋ผ๋Š” ๋ฌธ์žฅ์ด ์›น์‚ฌ์ดํŠธ์— ์ถœ๋ ฅ๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด(JSON์œผ๋กœ) ์–ด๋…ธํ…Œ์ด์…˜(@)์„ ์ ์–ด์ค€๋‹ค.

 

@GetMapping("")

: ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ, ("")์— ์š”์ฒญ ๋ฐ›์„ URL์„ ์ ๋Š”๋‹ค. ํ˜„์žฌ ์ ํ˜€์žˆ์ง€ ์•Š์œผ๋‹ˆ localhost:8080์ด ๋œ๋‹ค.

 

 

 

 

[ @RestController ์„ค๋ช… ]

 

Spring - @Controller์™€ @RestController ๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ์ฝ”๋“œ

[ SpringMVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜๋‹ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์œผ๋กœ ์•Œ์•„์•ผํ•˜๋Š”

post-this.tistory.com

 

 

 

[ @GetMapping ์„ค๋ช… ]

 

SpringBoot - GET๊ณผ POST ๊ทธ๋ฆฌ๊ณ  @GetMapping

[ @Controller์™€ @RestController ] Spring - @Controller์™€ @RestController ๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ์ฝ”๋“œ[ SpringMVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€!

post-this.tistory.com

 

 

 


 

 

 

 

6. localhost:8080, ๊ฒฐ๊ณผ ๋ณด๊ธฐ.

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 

 


 

 

- Hello World ์ถœ์ฒ˜

 

์Šคํ”„๋ง๋ถ€ํŠธ๋Š” ์ฒ˜์Œ์ด๋ผ #1 "Hello, world" ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ๊นŒ์ง€

Hello, world

velog.io

 

 

- GetMapping ์ถœ์ฒ˜

 

[spring] @Controller์™€ @GetMapping

์ด๋ฒˆ์—๋Š” mapping์„ ํ†ตํ•ด์„œ ๊ฐ„๋‹จํ•œ html ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ ๊ณผ์ • ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋งคํ•‘์„ ํ†ตํ•ด Controller๊ฐ€ ํŠน์ • View

coding-nyan.tistory.com

 

 

- RestController ์ถœ์ฒ˜

 

3.2. RestController ์‚ฌ์šฉํ•˜๊ธฐ · SpringBoot

 

dorothy-koo.gitbooks.io

 

+ Recent posts