Tiny Bunny
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป/Javascript9

[JS] ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€(LocalStorage) / JSON - Object ํƒ€์ž… ๋ณ€ํ™˜ ๋ชฉ์ฐจ1. localStorage2. localStorage์™€ JSON    1. ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ๊ฐœ๋…  localStorage๋ž€ ํฌ๋กฌ๊ณผ ๊ฐ™์€ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.์ฆ‰ ์›น ์ƒ์— ์šฐ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๐Ÿ’ก  ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ์ €์žฅ๋˜์—ˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์†ํ•ด์„œ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณดํ†ต์€ ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ์ •๋ณด๋‚˜ ์„ค์ • ๋“ฑ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ,Key- Value ๊ฐ’์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.localStorage.setItem("ํ‚ค", "๊ฐ’"); ํ‚ค์—๋Š” ๋‚ด๊ฐ€ ์ €์žฅํ•˜๊ณ  ์‹ถ์€ DB ๋คํƒฑ์ด์— ์ด๋ฆ„์„ ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๊ณ , ๊ฐ ๊ฐ’์€ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค.   ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ local Storage ๊ฐ’ ํ™•์ธํ•˜๊ธฐํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ localStorage๋ฅผ ํ™•์ธํ•˜.. 2025. 3. 7.
[JS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด Jsonํƒ€์ž… ๋ณ€ํ™˜, ajax๋ฅผ ํ†ตํ•ด controller์— ๋„˜๊ธฐ๊ธฐ ์‡ผํ•‘๋ชฐ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉฐ,๊ฐ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„ ์ œํ’ˆ์„ ํ™”๋ฉด์— ๋„์›Œ์ฃผ๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ๋ฐฐ์—ด์— ๋‹ด์•˜๋‹ค. ์ด ๋ฐฐ์—ด์„ Jsonํƒ€์ž…์œผ๋กœ ๋ฐ”๊ฟ”์„œ ajax๋ฅผ ์ด์šฉํ•ด ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค. โ˜บ๏ธ  1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์— ๋‹ด๊ธฐ ๋จผ์ € ์ƒํ’ˆ๋ช…, ์ˆ˜๋Ÿ‰, ๊ฐ€๊ฒฉ / ์กฐ๋ฆฝ์—ฌ๋ถ€, ์กฐ๋ฆฝ๊ฐ€๊ฒฉ, ์ˆ˜๋Ÿ‰/ ๊ฒฌ์  ์ด๋ฆ„ ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์— ๋‹ด์•„์•ผํ–ˆ๋‹ค.๋‹ด๊ธฐ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด addToCart()๋ฅผ ํ†ตํ•ด productName๊ณผ productPrice๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  active๋œ component์˜ ์ด๋ฆ„์„ ๋ฐฐ์—ด Name์œผ๋กœ ์ง€์ •ํ•œ ํ›„,  currentCart[componentName] = {             name: productName,             price: parseInt(productPric.. 2025. 1. 5.
[JS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ์ž์—ด ๊ณต๋ฐฑ ์ œ๊ฑฐํ•˜๊ธฐ - trim() , replace() ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฌธ์ž์—ด ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ์‹์€ ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.  1. replace()var a = "๊ฐ€ ๋‚˜ ๋‹ค ๋ผ ๋งˆ ๋ฐ” ์‚ฌ "a.replace(" ","")//"๊ฐ€๋‚˜ ๋‹ค ๋ผ ๋งˆ ๋ฐ” ์‚ฌ "a.replace(/ /g,"")//"๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ" replace๋Š” ๋ฌธ์ž๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ด๊ธฐ์— ์‚ฌ์‹ค ๊ณต๋ฐฑ์ด ์•„๋‹ˆ์–ด๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.   2. trim()var a = " ์•ˆ ๋…• ํ•˜ ์„ธ ์š” "a.trim()//"์•ˆ๋…•ํ•˜์„ธ์š”" trim์€ ์œ„์™€๊ฐ™์ด ์•ž๊ณผ ๋’ค์ชฝ์˜ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ค€๋‹ค. 2025. 1. 4.
[JS] querySelector(), querySelectorAll() querySelector() ๊ณผ querySelectorAll()์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์ž. querySelector() - document.querySelector()์€  ๋ฌธ์„œ ๋‚ด์—์„œ ์ž…๋ ฅํ•œ ์„ ํƒ์ž์™€ ์ผ์น˜ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - ๋งŒ์•ฝ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด, null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.  script>        function clickMe(){            const doc= document.querySelector("#first >.Happy");            console.log(doc);            doc.style.backgroundColor="green";        }script>div id="first">        p class="Happy">์˜ค๋Š˜์€ ์ผ.. 2024. 8. 11.
[JS] ์†์„ฑ ์„ ํƒํ•˜๊ธฐ - .value / .innerHTML / .textContent ๋น„๊ต ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์–ด๋–ค ํƒœ๊ทธ๋‚˜ ์†์„ฑ์„ ์„ ํƒํ•ด์ค„๋•Œ์—๋Š”document์—์„œ ํ•ด๋‹น ํƒœ๊ทธ์— ์ ‘๊ทผํ• ๋•Œ .value๋ฅผ ๋ถ™์—ฌ์ฃผ๊ฑฐ๋‚˜, .innerHTML์„ ๋ถ™์—ฌ ๋ถˆ๋Ÿฌ์˜ค๊ณคํ•œ๋‹ค. ์ด ๋‘˜์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์ž.    1. value   vs.  textContent & innerHTML: ๋‹ซํž˜ ํƒœ๊ทธ์˜ ์œ ๋ฌด  value๋Š”  ๋’ค์— (๋‹ซํžˆ๋Š”ํƒœ๊ทธ)๊ฐ€ ์˜ค๋Š” ํƒœ๊ทธ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.๋’ค์— ๋‹ซํžŒํƒœ๊ทธ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” value๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,๋งŒ์•ฝ ๋‹ซํžŒ ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” textContent์™€ innerHTML์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.   ์œ„์— html ์—์„œ .value๋กœ ๋ถˆ๋Ÿฌ์˜จ ๋ถ€๋ถ„์€ ํƒœ๊ทธ๋กœ, ๋‹ซํž˜ ํƒœ๊ทธ๊ฐ€ ์—†๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.๋ฐ˜๋ฉด์—, .innerHTML๋กœ ๋ถˆ๋Ÿฌ์˜จ ๋ถ€๋ถ„์€ ํƒœ๊ทธ๋กœ ๋‹ซํž˜ ํƒœ๊ทธ๋กœ ๋งˆ๋ฌด๋ฆฌ๋˜๋Š” ๊ฒƒ์„.. 2024. 8. 6.
[JS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ฐ์‚ฐ์ž- ์—ฐ์‚ฐ์ž๋ž€ ๊ฐ’์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ์ž‘์—…์„ ์ปดํ“จํ„ฐ์—๊ฒŒ ์ง€์‹œํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐํ˜ธ์ด๋‹ค.  - '์—ฐ์‚ฐ์ž'๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ํ‘œํ˜„์‹์„ ๋Œ€์ƒ, '์‚ฐ์ˆ , ๋…ผ๋ฆฌ, ๋น„๊ต, ํ• ๋‹น, ํƒ€์ž… ์—ฐ์‚ฐ' ๋“ฑ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ๋งŒ๋“ ๋‹ค.   ์•ž์„œ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž, ํ• ๋‹น ์—ฐ์‚ฐ์ž, ๋น„๊ต ์—ฐ์‚ฐ์ž, ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž, ํƒ€์ž… ์—ฐ์‚ฐ์ž ๋“ฑ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์— ๋”ฐ๋ฅธ ์—ฐ์‚ฐ์ž ์ƒ์—์„œ๋„ ์šฐ์„ ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ •ํ•ด์ ธ์žˆ๋‹ค.  ์ˆœ์œ„๊ธฐ๋Šฅ์—ฐ์‚ฐ์ž1๊ด„ํ˜ธ()2์ฆ๊ฐ/ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž not++  --   ! 3์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž ๊ณฑ์…ˆ*    /    %4์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž ๋ง์…ˆ+   - 5๋น„๊ต ์—ฐ์‚ฐ์ž ๋Œ€์†Œ6๋น„๊ต ์—ฐ์‚ฐ์ž ๊ฐ™์Œ ==  ===   !=7๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž and  && 8๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž or || 9๋Œ€์ž… ์—ฐ์‚ฐ์ž =    +=   -= 2024. 1. 9.
[JS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ฐ์‚ฐ์ž / ํ˜•๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž- ์—ฐ์‚ฐ์ž๋ž€ ๊ฐ’์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ์ž‘์—…์„ ์ปดํ“จํ„ฐ์—๊ฒŒ ์ง€์‹œํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐํ˜ธ์ด๋‹ค.- '์—ฐ์‚ฐ์ž'๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ํ‘œํ˜„์‹์„ ๋Œ€์ƒ์œผ๋กœ ์‚ฐ์ˆ , ํ• ๋‹น, ๋น„๊ต, ๋…ผ๋ฆฌ, ํƒ€์ž… ์—ฐ์‚ฐ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•ด ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋งŒ๋“ ๋‹ค.    ์ด๋•Œ ์—ฐ์‚ฐ์˜ ๋Œ€์ƒ์„ 'ํ”ผ์—ฐ์‚ฐ์ž' ๋ผ๊ณ  ํ•œ๋‹ค.: ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ '๊ฐ’'์ด๋ผ๋Š” ๋ช…์‚ฌ์˜ ์—ญํ• ์„ ํ•˜๋ฉด, ์—ฐ์‚ฐ์ž๋Š” '๊ฐ’์„ ๋งŒ๋“ ๋‹ค'๋Š” ๋™์‚ฌ์˜ ์—ญํ• ์„ ํ•˜๋Š” ์…ˆ์ด๋‹ค.- ์—ฐ์‚ฐ์ž๋Š” ์–ด๋– ํ•œ ์‹์„ ์—ฐ์‚ฐํ•˜๊ฒŒ ๋˜๋Š๋ƒ์— ๋”ฐ๋ผ์„œ ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์ž๋กœ ๊ตฌ๋ณ„ํ•˜์—ฌ ๊ธฐ์–ตํ•˜๋ฉด ๋œ๋‹ค.   ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž (Arithmetic Operator)- ์ˆ˜ํ•™ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•จ.- ์ดํ•ญ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž / ๋‹จํ•ญ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž / ๋‹จํ•ญ ๋ถ€์ • ์—ฐ์‚ฐ์ž  1.1 ์ดํ•ญ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž : ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ 2๊ฐœ ํ•„์š”ํ•จ.  1.2 ๋‹จํ•ญ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž ++ ์—ฐ์‚ฐ์ž : ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚ด --์—ฐ์‚ฐ์ž: ๊ฐ’์„.. 2024. 1. 9.
[JS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž๋ฃŒํ˜• ์ •๋ฆฌ ์ž๋ฃŒํ˜•์ด๋ž€? ์ž๋ฃŒํ˜• (Data type)์ด๋ž€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ์ข…๋ฅ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธํƒ€์ž…์€ '์›์‹œํƒ€์ž…'๊ณผ '๊ฐ์ฒดํƒ€์ž…'์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.(๊ฐ๊ฐ '๊ธฐ๋ณธ์ž๋ฃŒํ˜•' ๊ทธ๋ฆฌ๊ณ  '์ฐธ์กฐ์ž๋ฃŒํ˜•'์œผ๋กœ๋„ ๋ถˆ๋ฆฐ๋‹ค.)  ์›์‹œํƒ€์ž…(primitive type)1. ๋ฌธ์ž์—ด(string)2. ์ˆซ์ž(number)3. ์ฐธ/๊ฑฐ์ง“ ๊ฐ’ (boolean)4. undefined5. null6. ์‹ฌ๋ณผ(symbol) ์ฐธ์กฐ ์ž๋ฃŒํ˜•(object type)1. ๊ฐ์ฒด (object)   ๊ฐ์ž์˜ ์ž๋ฃŒํ˜• (๋ฐ์ดํ„ฐ ํƒ€์ž…)์„ ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•ด๋ณด์ž.  1. ๋ฌธ์ž์—ด (string)- ํฐ๋”ฐ์˜ดํ‘œ("")๋‚˜ ์ž‘์€๋”ฐ์˜ดํ‘œ('')๋กœ ๋‘˜๋Ÿฌ์Œ“์ธ ๋ฌธ์ž์˜ ์ง‘ํ•ฉ.- ๋ง์…ˆ ๊ธฐํ˜ธ๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•จ.  ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž- ์—ญ์Šฌ๋ž˜์‹œ(๏ผผ)๋ฅผ ๋ถ™์—ฌ ์”€.- ์‚ฌ์šฉ์ž ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฌธ.. 2024. 1. 9.
[JS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜- var, let, const โ€‹  ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ณ€์ˆ˜ ๋ณ„ ํŠน์ง•๊ณผ ์‹๋ณ„์ž ๋ช…๋ช… ๊ทœ์น™์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜์ž.โ€‹โ€‹์•”์‹œ์ ์„ ์–ธ: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ์ธ var, let, const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•จ.์•„๋ž˜์™€ ๊ฐ™์ด ๊ทธ๋ƒฅ ๋ณ€์ˆ˜์™€ ํ• ๋‹น๊ฐ’์„ ์„ ์–ธํ•ด๋ฒ„๋ฆฐ๋‹ค.(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ์‹์€ ์•„๋‹˜.) ๋ช…์‹œ์ ์„ ์–ธ:  const, let, var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•จ. โ€‹ โ€‹ ๋ณ€์ˆ˜ :๋ณ€ํ•˜๋Š” ์ˆ˜ - ๋ณ€์ˆ˜์˜ ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•˜๋Š” ํ–‰์œ„ = '๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค.' ๋ผ๊ณ  ํ•œ๋‹ค.- = ์šฐ๋ณ€์— ์žˆ๋Š” ๊ฐ’์„ ๋ณ€์ˆ˜ ๊ณต๊ฐ„์— ๋Œ€์ž…ํ•˜๋Š” ๊ฒƒ = '๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค.' var num = 10 + 20 ;  ํ‚ค์›Œ๋“œ ์‹๋ณ„์ž ์—ฐ์‚ฐ์ž ํ‘œํ˜„์‹ ์˜ˆ์‹œโ€‹  โ€‹ ๋ณ€์ˆ˜์„ ์–ธํ‚ค์›Œ๋“œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค์›Œ๋“œ์—๋Š” let , const , var ๊ฐ€ ์žˆ๋‹ค.๊ฐ๊ฐ.. 2024. 1. 9.

TOP

Designed by ํ‹ฐ์Šคํ† ๋ฆฌ