JavaScript Event - swkim0128/PARA GitHub Wiki


type: JavaScript archive: false

์ด๋ฒคํŠธ (Event)


์›น ํŽ˜์ด์ง€์—์„œ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ์žˆ์„ ๋•Œ ๋งˆ๋‹ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ.

์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญ ํ•˜์˜€์„ ๋•Œ, ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋“ฑ๊ณผ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ด๋ฒคํŠธ๊ฐ€ ์กด์žฌ.

JavaScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DOM์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์ด๋ฒคํŠธ์— ๋Œ€์‘ํ•˜๋Š” ์—ฌ๋Ÿฌ ์ž‘์—… ์ˆ˜ํ–‰.

์ด๋ฒคํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜์™€ ์—ฐ๊ฒฐ์ด ๋˜๊ณ , ์ด ํ•จ์ˆ˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜๊ธฐ ์ „์—๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋‹ค๊ฐ€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์‹คํ–‰. >> ==์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ (Handler)==๋˜๋Š” ==์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ(Lisstener)==๋ผ ํ•˜๋ฉฐ ์ด ํ•จ์ˆ˜์— ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑ.

์ด๋ฒคํŠธ ์ข…๋ฅ˜


๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ

์›น ์ดˆ๊ธฐ์—๋Š” load, click ๋“ฑ ์†Œ์ˆ˜์˜ ์ด๋ฒคํŠธ๋งŒ ์‚ฌ์šฉ.

๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฐ€์žฅ ๋งŒํžˆ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฒคํŠธ.

๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ์ „๋‹ฌ๋˜๋Š” ์ด๋ฒคํŠธ ๊ฐ์ฒด์—๋Š” ๋งˆ์šฐ์Šค ์œ„์น˜์™€ ๋ฒ„ํŠผ ์ƒํƒœ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๋‹ค.

!Untitled 49.png

ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ

ํ‚ค๋ณด๋“œ์˜ ์ปค์„œ๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋‚˜ํƒ€๋‚˜๋Š” ์ง€๋ฒ”์—์„œ ํ‚ค๋ณด๋“œ๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ.

ํ‚ค๋ณด๋“œ ์กฐ์ž‘์€ ์šด์˜์ฒด์ œ์— ์˜ํ–ฅ์„ ๋ฐ›์œผ๋ฏ€๋กœ ํŠน์ • ํ‚ค๊ฐ€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ์ „๋‹ฌ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

ํ‚ค๋ณด๋“œ ์ปค์„œ๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ์š”์†Œ๊ฐ€ ์—†๋‹ค๋ฉด document์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ.

!Untitled 1 27.png

Frame(UI) ์ด๋ฒคํŠธ

Frame ๊ด€๋ จ ์ด๋ฒคํŠธ๋Š” ํŠน์ • DOM ๋ฌธ์„œ์— ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ Frame ์ž์ฒด์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ.

Frame ์ด๋ฒคํŠธ ์ค‘์—์„œ๋Š” load ์ด๋ฒคํŠธ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ.

load๋Š” ๋ฌธ์„œ ๋ฐ ์ž์›๋“ค์ด ๋ชจ๋‘ ์›น ๋ธŒ๋ผ์šฐ์ €์— ํƒ‘์žฌ๋˜๋ฉด ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜ํ–‰.

unload๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋– ๋‚  ๋•Œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋– ๋‚˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜๋Š” ์—†๋‹ค.

!Untitled 2 26.png

ํผ(Form) ์ด๋ฒคํŠธ

Form ๊ด€๋ จ ์ด๋ฒคํŠธ๋Š” ์›น ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์ง€์›๋˜์–ด ์—ฌ๋Ÿฌ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฐ€์žฅ ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์ด๋ฒคํŠธ.

์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฒคํŠธ๋กœ form์ด ์ „์†ก๋  ๋•Œ์—๋Š” submit ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ.

Form์„ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ๋Š” reset ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ.

submit๊ณผ reset์€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.

!Untitled 3 25.png

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก


์ธ๋ผ์ธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋Œ€์‘ํ•˜๋Š” ์ž‘์—…์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ œ๊ณต.

์–ด๋–ค ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ž‘์—…์„ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์„ '์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ(ํ˜น์€ ๋ฆฌ์Šค๋„ˆ)๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.' ๋ผ๊ณ  ํ‘œํ˜„

JavaScript์˜ ์ดˆ๊ธฐ์—๋Š” HTML ์š”์†Œ์˜ ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋ก.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ HTML ์ฝ”๋“œ๋ฅผ JavaScript ์ฝ”๋“œ๊ฐ€ ์นจ์ ํ•œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ.

!Untitled 4 21.png

์ด ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ ์ตœ๊ทผ์—๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ. ๋‹จ, ๊ธฐ์กด์˜ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ์ด ๋˜์—ˆ๊ธฐ์— ์•Œ์•„ ๋‘์–ด์•ผ ํ•จ.

์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ํ•œ๋ฒˆ์— ํ˜ธ์ถœ ๊ฐ€๋Šฅ.

์ตœ๊ทผ ๊ด€์‹ฌ ๋ฐ›๊ณ  ์žˆ๋Š” CBD(Component Based Development) ๋ฐฉ์‹์˜ Angular / React / Vue.js์™€ ๊ฐ™์€ framewrok / libary์—์„œ๋Š” ์ธ๋ผ์ธ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌ (CBD์—์„œ๋Š” html, css, js๋ฅผ view์˜ ๊ตฌ์„ฑ ์š”์†Œ๋กœ๋งŒ์œผ๋กœ ๋ณด๊ธฐ ๋•Œ๋ฌธ.)

!Untitled 5 19.png

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœํผํ‹ฐ ๋ฐฉ์‹

HTML์— ์ง์ ‘ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ• ๋Œ€์‹ ์— JavaScript์—์„œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

JavaScript์—์„œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•จ์œผ๋กœ์จ HTML์ฝ”๋“œ์™€ JavaScriptํฌ๋„๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฒคํŠธ ๋Œ€์ƒ์ด ๋˜๋Š” ํŠน์ • DOM์„ ์„ ํƒํ•˜๊ณ  ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋ก.

'div1' ์š”์†Œ(element)์— ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ธ๋“ค๋Ÿฌ๋กœ ๋“ฑ๋กํ•œ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰.

!Untitled 6 16.png

์ธ๋ผ์ธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋ฐฉ์‹์ฒ˜๋Ÿผ HTML๊ณผ JavaScript๊ฐ€ ํ˜ผ์šฉ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹.

๋‹จ, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœํผํ‹ฐ์— ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋งŒ์„ ๋ฐ”์ธ๋”ฉ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ–๋Š”๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์•„๋ž˜์˜ ์˜ˆ์—์„œ ์ฒซ๋ฒˆ์งธ ๋ฐ”์ธ๋”ฉ๋œ alert()์€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

!Untitled 7 14.png

addEventListener ๋ฉ”์†Œ๋“œ ๋ฐฉ์‹

2000๋…„์— ๋ฐœํ‘œ๋œ DOM ๋ ˆ๋ฒจ2 ์ด๋ฒคํŠธ ๋ช…์„ธ์˜ addEventListener(arg1, arg2[, arg3])๋ฅผ ์ด์šฉํ•˜์—ฌ ์ข€ ๋” ์„ธ๋ฐ€ํ•œ ์ด๋ฒคํŠธ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅ.

์ „๋‹ฌ ์ธ์ž์˜ ์ฒซ ๋ฒˆ์งธ์—๋Š” ์ด๋ฒคํŠธ ์ด๋ฆ„, ๋‘ ๋ฒˆ์งธ์—๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ, ์„ธ ๋ฒˆ์งธ์—๋Š” ์บก์ณ๋ง ์—ฌ๋ถ€๋ฅผ ์‚ฌ์šฉ.

์ฒซ ๋ฒˆ์งธ ์ „๋‹ฌ์ธ์ž์˜ ์ด๋ฒคํŠธ ์ด๋ฆ„์—๋Š” 'on'์„ ์ œ๊ฑฐํ•œ ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉ.

[์ฃผ์˜!!] ์ด ๋ฐฉ์‹์€ Internet Expolorer 9 ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€. >> attachEvent() ์‚ฌ์šฉ.

!Untitled 8 12.png

addEventListener ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋Œ€์ƒ DOM ์š”์†Œ์— ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ณ  ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋  ์ฝœ๋ฐฑ ํ•จ์ˆ˜(์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ)๋ฅผ ์ง€์ •ํ•œ๋‹ค.

์žฅ์ 

  • ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ํ•˜๋‚˜ ์ด์ƒ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์บก์ฒ˜๋ง๊ณผ ๋ฒ„๋ธ”๋ง์„ ์ง€์›.
  • HTML ์š”์†Œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  DOM(HTML, XML, SVG)์— ๋Œ€ํ•ด ๋™์ž‘.

!Untitled 9 12.png

์•„๋ž˜์˜ ์˜ˆ์ œ์˜ ๊ฒฝ์šฐ ์š”์†Œ์˜ ๊ฐ’๊ฒ€์‚ฌ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ(๊ณตํ†ต ๋กœ์ง) ๊ทœ์น™์ด ๋ฐ”๋€Œ๊ฒŒ ๋˜๋ฉด ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ณณ์˜ ์†Œ์Šค๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค. >> ํ•ด๊ฒฐ : ๊ทœ์น™์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ์™ธ๋ถ€๋กœ ๋นผ๋ฉด ๋ ๊นŒ?

!Untitled 10 10.png

๊ณตํ†ต ๊ทœ์น™์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ƒ์ˆ˜๋กœ ๋งŒ๋“ค๊ณ  checkVal(์ธ์ž)์˜ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•œ ๋’ค callback ํ•จ์ˆ˜ ํ˜ธ์ถœ.

๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์‹คํ–‰.

ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์•„๋‹Œ ํ•จ์ˆ˜ ์ง€์ •์„ ์„ ํƒ

ํ•ด๊ฒฐ์€ ๋˜์ง€๋งŒ ์ธ์ž๋ฅผ ์ „๋‹ฌ ํ•  ์ˆ˜ ์—†๋‹ค.

!Untitled 11 8.png

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธ์ˆ˜ ์ „๋‹ฌ ํ•ด๊ฒฐ.

!Untitled 12 8.png

๋ฒ„๋ธ”๋ง๊ณผ ์บก์ณ๋ง


์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ถ€๋ชจ HTML๋กœ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ ๊ทผ์›์ง€์ธ ์ž์‹์š”์†Œ๊นŒ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์บก์ณ๋ง์ด๋ผ ํ•œ๋‹ค.

  • ์ด๋ฒคํŠธ ์บก์ณ๋ง์—์„œ ์บก์ณ์†์„ฑ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ์œผ๋ฉด ์ˆ˜ํ–‰.

์ด๋ฒคํŠธ ๋ฐœ์ƒ ์š”์†Œ๋ถ€ํ„ฐ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ถ€๋ชจ์š”์†Œ๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ์ด๋ฒคํŠธ๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด๋ผ ํ•œ๋‹ค.

  • ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์—์„œ ๋ฒ„๋ธ” ์†์„ฑ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ์œผ๋ฉด ์ˆ˜ํ–‰.

!Untitled 13 8.png

ํ•จ์ˆ˜์˜ ์„ธ๋ฒˆ์งธ ์ธ์ž ๊ฐ’์ด true๋ฉด ์บก์ณ๋ง, false๋ฉด ๋ฒ„๋ธ”๋ง

div3์„ ํด๋ฆญํ–ˆ์„ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ.

  • true(์บก์ณ๋ง) : div1 > div2 > div3
  • false(๋ฒ„๋ธ”๋ง) : div3 > div2 > div1

!Untitled 14 8.png

์ด๋ฒคํŠธ ํ™œ์šฉ


ํ•˜๋‚˜์˜ DOM ์—˜๋ฆฌ๋จผํŠธ์— ๋ณต์ˆ˜์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งˆ์Šค๊ฐ€ ํŠน์ • DOM ์—˜๋ฆฌ๋จผํŠธ ์˜์—ญ ์•ˆ์œผ๋กœ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ mouseover ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ.

๋ฐ˜๋Œ€๋กœ ๋งˆ์šฐ์Šค๊ฐ€ ํŠน์ • DOM ์—˜๋ฆฌ๋จผํŠธ ์˜์—ญ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ„ ๊ฒฝ์šฐ mouseout ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ.

ํƒœ๊ทธ์— mouseover, mouseout 2๊ฐ€์ง€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋ก.

!Untitled 15 7.png

โš ๏ธ **GitHub.com Fallback** โš ๏ธ