๊ฐœ๋ฐœ/JavaScript

์˜ˆ์ „์— ์–ธ์  ๊ฐ€ ๋ฉด์ ‘์„ ๋ณด๋ฉด์„œ ๋“ค์—ˆ๋˜ ์งˆ๋ฌธ ์ค‘์— ํ•˜๋‚˜์ด๋‹ค.  "typescript์—์„œ type๊ณผ interface์˜ ์ฐจ์ด์ ์„ ์•„์‹œ๋‚˜์š”?" ๊ณตํ†ต์ typeํƒ€์ž…์— ๋Œ€ํ•œ ์ด๋ฆ„์„ ์ง€์–ด์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. type Home { living : string; bed : string;} interfacetype๊ณผ ๋™์ผํ•˜๊ฒŒ ํƒ€์ž…์— ๋Œ€ํ•œ ์ด๋ฆ„์„ ์ง€์–ด์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. interface Home{ living: string; bed: string;}  ๋‘˜ ๋‹ค ํƒ€์ž…์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘์— ํ•˜๋‚˜๋กœ ๊ต‰์žฅํžˆ ์œ ์‚ฌํ•˜๋‹ค. ๋‘˜ ์ค‘์— ํ•˜๋‚˜๋งŒ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ ์ฐจ์ด์ ๋„ ์กด์žฌํ•œ๋‹ค.    ์ฐจ์ด์  1. ํ™•์žฅ ๋ฐฉ์‹ ๋น„๊ต  interface ๋Š” extends๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์„œ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์กด์˜ interface์— ์ถ”๊ฐ€ํ•ด์„œ ํ™•์žฅ๋œ๋‹ค. i..
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด์šฉ๋˜๋Š” ๋ฐฐ์—ด๊ณผ ์ด๋ฅผ loop์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ forEach()์™€ map()์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.  forEach()Array ์ธ์Šคํ„ด์Šค forEach() ๋ฉ”์„œ๋“œ๋Š” ์ˆœํšŒ ๋ฉ”์„œ๋“œ๋กœ ๊ฐ ๋ฐฐ์—ด ์š”์†Œ์— ๋Œ€ํ•ด ์ œ๊ณต๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰ํ•œ๋‹ค.๋ฐ˜ํ•œ ๊ฐ’์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.ํ˜ธ์ถœ๋˜๋Š” ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์ง€๋งŒ, ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ์ œ๊ณต๋˜๋Š” ํ•จ์ˆ˜๋Š” ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ๋‹ค.๊ทธ๋Ÿฌ๋‚˜ ๋ฐฐ์—ด์˜ length๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ฒ˜์Œ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์ €์žฅ๋œ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•ด์•ผํ•จ.๊ทธ๋ฆฌ๊ณ  ๋ฃจํ”„๋ฅผ ์ค‘์ง€ํ•˜๊ฑฐ๋‚˜ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. const array1 = ['a', 'b', 'c'];array1.forEach((element) => console.log(element));// Expected output: "a"..
๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋งŽ์ด ๋ดค์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ค‘๋‹จ์‹œํ‚ค๋Š” ์ฝ”๋“œ๋ž๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ์ด๋ฒคํŠธ ์ „๋‹ฌ๋ฐฉ์‹์— ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. e.preventDefault() ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ณ ์œ ์˜ ์ด๋ฒคํŠธ ๋™์ž‘์„ ์ค‘๋‹จ์‹œํ‚ต๋‹ˆ๋‹ค. e.stopPropagation() ์ค‘์ฒฉ๋˜์–ด์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ๋“ค ์ค‘์—์„œ ํ•˜์œ„์—์„œ ์ƒ์œ„๋กœ ์ด๋ฒคํŠธ๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ์ค‘๋‹จ์‹œํ‚ต๋‹ˆ๋‹ค. ์ฆ‰, ๊ณ ์œ  ์ž์‹ ๋งŒ์˜ ์ด๋ฒคํŠธ๋งŒ์„ ๊ฐ์ง€ํ•˜๋„๋กํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ’ก localStorage vs Cookie ๋งŒ๋ฃŒ์‹œ๊ฐ„ ์„ค์ •ํ•˜๊ธฐ ๋กœ๊ทธ์ธํ•  ๋•Œ jwt web token์„ ๋ฐ›์•„์„œ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•ด ๋‘๊ณ  api ํ˜ธ์ถœ์„ ํ•  ๋•Œ๋งˆ๋‹ค ๊บผ๋‚ด ์“ธ ๋•Œ๊ฐ€ ๋งŽ๋‹ค. ๋”ฐ๋กœ ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์ •ํ•ด๋†“๊ณ  ์“ฐ์ง€๋Š” ์•Š์•˜๋Š”๋ฐ, ์ด๋ฒˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋กœ์ง์ด ์ˆ˜์ •๋˜๊ณ  ํ•˜๋ฉด์„œ ํ† ํฐ ์ž์ฒด๋ฅผ ์ง€์›Œ๋‚ด์„œ ์ž๋™๋กœ๊ทธ์•„์›ƒ์„ ์‹œ์ผœ๋ฒ„๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚œ ๊ณ ๋ฏผ์— ๋น ์กŒ๋‹ค. ์›๋ž˜ localStorage์— ํ† ํฐ์„ ์ €์žฅํ•ด๋‘๊ณ  ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, localStorage์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์ฟ ํ‚ค๋‚˜ sessionStorage์— ์ €์žฅํ•ด์„œ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฑธ๊นŒ? ๋ผ๋ฉฐ ์ด๋ฆฌ์ €๋ฆฌ ๊ฒ€์ƒ‰์„ ํ•ด๋ณด์•˜๋‹ค. ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์ €์žฅํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋˜ ๋‹ค๋ฅธ ๊ณ ๋ฏผ์— ๋น ์กŒ๋‹ค. ์–ด๋–ค ๊ฒŒ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ผ๊นŒ? ..
๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค ๊ธฐํšŒ๊ฐ€ ์žˆ์–ด์„œ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์จ์•ผํ•˜๋‚˜ ๋ผ๋ฉฐ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐฐ์ œํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ๊ทธ ์•ˆ์—์„œ๋„ js ์™€ jsx ๋‘˜ ์ค‘์— ๋ญ๊ฐ€ ๋” ๋‚ซ๋‚˜? ๋ญ๊ฐ€ ๋‹ค๋ฅด์ง€? ๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค. ๋งจ๋‚  ๋ˆ„๊ฐ€ ์“ฐ๋Š”๊ฑฐ ๊ทธ๋Œ€๋กœ ์“ฐ๊ณ  jsx๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ™•์žฅ๋ฌธ๋ฒ•์ด๋ผ๋Š” ์ •๋„๋งŒ ์•Œ์•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ณด๋‹ˆ ๋ฌธ๋ฒ•๋„ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๊ณ  ์ •ํ™•ํ•œ ์ฐจ์ด์ ์„ ์•Œ์ง€ ๋ชป ํ–ˆ๋‹ค. jsx javascript ์˜ ํ™•์žฅ ๋ฌธ๋ฒ• ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•ˆ์—์„œ HTML ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ๋กœ ๋ฆฌ์•กํŠธ ๊ฐ™์€ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค ์‚ฌ์‹ค, ๋…ผ์Ÿ์ด ์žˆ๊ธดํ•˜์ง€๋งŒ js๋‚˜ jsx๋‚˜ ํฌ๊ฒŒ ์ฐจ์ด๊ฐ€ ์—†๋‹ค๋Š” ์ ์—์„œ ์ค‘์š”ํ•œ ์ ์ด ์•„๋‹ˆ๋ผ๋Š” ์˜๊ฒฌ๋„ ์ง€๋ฐฐ์ ์ด๋‹ค. jsx๋ฅผ ์“ฐ๋ฉด ui์ ์ธ ๋ฉด์—์„œ ์ง๊ด€์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ •๋„? ์ˆœ์ˆ˜ํ•œ js๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ~ ..
์›น ๊ฐœ๋ฐœ์‹œ์— API๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ œ์ผ ๋จผ์ € ๋– ์˜ค๋ฅด๋Š” ๊ฒƒ์ด request, axios, jQuery ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด์ œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ fetch() ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค(bundle)ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋‚ญ๋น„๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๋ฌผ๋ก  ๋‚˜๋Š” ์ฃผ๋กœ reactJs, nextJs ๋กœ ์ž‘์—…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— axios๋ฅผ ์จ์„œ ํ˜ธ์ถœํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์ด๋ฒˆ์— ์ด๋ฏธ์ง€ url์—์„œ ํŒŒ์ผ์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ fetch ํ•จ์ˆ˜๋ฅผ ์จ์„œ response๋ฅผ ๋ฐ›์•„์˜ฌ ์ผ์ด ์žˆ์—ˆ๋‹ค. ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์„œ ์•Œ์•„๋ณด๋‹ค๊ฐ€ fetchํ•จ์ˆ˜๋ฅผ ์ด๋ ‡๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ฒธ์‚ฌ๊ฒธ์‚ฌ- fetch์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๐Ÿ“ข Fetch ๋ฅผ ์•Œ์ž! fetch() ํ•จ์ˆ˜๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์„..
npm install qs Content-Type ์ด๋ž€? api ์—ฐ๋™ ์‹œ์— ์ž์›์„ ๋ณด๋‚ผ ๋•Œ, ๊ทธ ์ž์›์˜ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. body์— ๋“ค์–ด๊ฐˆ ๋‚ด์šฉ์„ header์—์„œ ๋ช…์‹œํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ค‘์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, Textํƒ€์ž…์œผ๋กœ๋Š” text/css, text/javascript, text/html, text/plain ๋“ฑ file์„ ์‹ค์–ด๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” multipart/form-data๊ฐ€ ์žˆ๊ณ  Application ํƒ€์ž…์œผ๋กœ๋Š” application/json, application/x-www-urlencoded๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. REST API๋ฅผ ์“ฐ๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์˜ฌ ๋•Œ ์ฃผ๋กœ application/json, ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ, multipart/form-data๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค ์ด๋ฒˆ์— ..
1์ฐจ์› ๋ฐฐ์—ด์—์„œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜๋‹ค! set, filter, reduce ๋“ฑ ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ๋‹ค์–‘ํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‹ค๊ฐ€ ๋ฐฐ์—ด ์ค‘๋ณต ์ œ๊ฑฐ ํ•  ์ผ์ด ์žˆ์—ˆ๋Š”๋ฐ, ์•„๋ฌด๋ฆฌ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ํ•ด๊ฒฐ์ด ์•ˆ๋˜๋Š”๊ฒƒ์ด๋‹ค!! ใ… ใ…  1์ฐจ์› ๋ฐฐ์—ดํ•˜๋“ฏ์ด ํ•˜๋ฉด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์›ฌ๊ฑธ?!? ์•„๋‹ˆ set, filter, indexOf ๋“ฑ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์ง€ 1์ฐจ์› ๋ฐฐ์—ด๋ณด๋‹ค ์‚ด์ง ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ ๋ฟ์ด๋‹ค. ๊ณ„์† set์œผ๋กœ ์‹œ๋„ํ–ˆ์—ˆ๋Š”๋ฐ....ใ… ใ… ....๋‚ด ์‹œ๊ฐ„ ... ใ…Ž..... ์šฐ์„ , 2์ฐจ์› ๋ฐฐ์—ด์„ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค. let a = [ [1, 2], [3, 4], [5, 6], [3, 4], ]; function arr(_arr) { return [...new Set(_..
ํ•„์š”์— ์˜ํ•ด์„œ ๊ตฌ๊ธ€๋ง์„ ์—„์ฒญํ•ด์„œ ์ฐพ์•„๋‚ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํƒ€์ž„ ๋งต! ใ…Žใ…Ž 365์ผ์„ ์ดˆ๋กœ ํ™˜์‚ฐํ•ด์„œ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. export const mapTime = timestamp => { const seconds = Math.floor((new Date() - timestamp * 1000) / 1000); // ํ™˜์‚ฐ๋œ ์ดˆ๋ฅผ 365์ผ์„ ์ดˆ๋กœ ํ™˜์‚ฐํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค~ let interval = Math.floor(seconds / 31536000); if (interval > 1) { return `${interval} years`; } interval = Math.floor(seconds / 2592000); if (interval > 1) { return `${interval} months`; } interva..
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ํฌ๊ฐœ 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆ ๋ณด์ž๋ฉด ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์• ์„œ ์ ์–ด์„œ ๋ฐ”๋กœ ๋ฐ›์•„์˜จ ๊ฒƒ UI์—์„œ ๋„ฃ์–ด์˜จ ์†Œ์Šค (from DOM) WEB Api๊ฐ™์€ ์™ธ๋ถ€์—์„œ fetchํ•œ ์†Œ์Šค ์ด๋ ‡๊ฒŒ ์ด 3๊ฐœ์ง€์˜ ์†Œ์Šค์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์—๋Š” ์ด 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ์ค€์ด ์žˆ๋Š”๋ฐ, ๋‹จ์ˆœํ•œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•œ๊ฑด์ง€, ์•„๋‹ˆ๋ฉด key, value ๊ฐ’์ด ํ•„์š”ํ•œ๊ฑด์ง€ ์ƒ๊ฐ์„ ํ•ด์„œ ๊ธฐ์ค€์— ๋งž์ถ”์–ด์„œ ์“ฐ๋ฉด ๋œ๋‹ค. ์ €์žฅ๋ฐฉ์‹์€ Array, Set, Object, Map ์ด 4๊ฐ€์ง€์ด๋‹ค. ์‹ฌํ”Œํ•œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด array์™€ set์„ ์ด์šฉํ•ด์„œ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค. Array color = [‘red’, ‘gold’, ‘red’]; //{ ‘red’, ‘gold’, ‘red’} ๐Ÿ‘‰ ๋ฐ˜๋ณต๋˜๋Š” ๊ฐ’์ด ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ์ด ๋  ์ˆ˜๋„ ์žˆ..
๋ฐ(Ming) ๐Ÿฐ
'๊ฐœ๋ฐœ/JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก