[ ๋ฐ์ดํฐ๋ฒ ์ด์ค H2 ์ค์น ๋ฐ ์ฐ๋, JPA ์ฐ๋ํ๊ธฐ ]
[ @PostMapping์ผ๋ก ๋ก๋ ์ซ์ ์ถ๋ ฅํ๊ธฐ. ]
๋๋ค ์ซ์ 6๊ฐ๋ฅผ
์๋ฐ์คํฌ๋ฆฝํธ ์ด์ฉํ์ฌ ๋ณต์ฌํ๊ธฐ.
1. ๋์ํ๋ฉด๊ณผ ์ ์ฒด์ฝ๋
๋์ํ๋ฉด
์ ์ฒด์ฝ๋
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 ์ค์น๊ฐ ํ์ํ์ง ์๋ค.
โก ๋งํฌ ๋ค์ด๊ฐ๊ธฐ.
โก ๋ฉ์ธ ํ๋ฉด ์ 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 ๊ฐ์๋ ๋ฃ๊ณ , ์๋ฐ์์ ์ ๋ณต ๋ธ๋ก๊ทธ๋ ์ด์ฌํ ์์ฑํ๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ๋ ์๊ฐํด๋ด์ผ๊ฒ ๋ค.
๐ชฝ
"ํ๋ฆฐ ๋ด์ฉ์ด ์์ ์ ์์ต๋๋ค."
[ ๋ธ๋ก๊ทธ์ ์ด ๋ด์ฉ๋ค์ ์ถ์ฒ๋ ์๋์ ์ ์ด๋ํ ๋
๋ค์ด๊ฐ์ ์ฝ์ด๋ณด์๋ฉด ๋์ฑ ๋์์ด ๋์ค ๋ฏ ํฉ๋๋ค ]
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ ๋ชจ์