notion-032

๐Ÿ˜‰ ํ—ท๊ฐˆ๋ ธ๋˜ & ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„๋“ค๋งŒ ์ •๋ฆฌํ•˜๋Š” ๋‚˜๋งŒ์˜ TIL
๐Ÿ˜ฏ ๋ชจ๋“  ๊ฐ•์˜ ๋‚ด์šฉ์€ ์ ์ง€ ์•Š์•„์š”!

์˜ค๋Š˜์˜ ์†Œ๊ฐ์€?
๋“œ๋””์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ ๊ฐ•์˜๊ฐ€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค ์™€!
์ •๋ง ์ •๋ง ์œ ์ตํ•œ ๋‚ด์šฉ์ด์—ˆ์ง€๋งŒ, ์ด์ง„ ํƒ์ƒ‰๊ณผ DP, ๊ทธ๋ฆฌ๋””์— ๊น”๋ ค ๋ญ‰๊ฐœ์กŒ๋˜ ์ €๋Š” ์ŠฌํŽ๋˜ ๊ธฐ์–ต์ด ์žˆ๋„ค์š”...

๋‹จ์ˆœํžˆ ํŽธํ•˜๋‹ค๋Š” ์ด์œ  ๋งŒ์œผ๋กœ querySelector๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ,
getElementby~~์™€ ๋ฌด์—‡์ด ๋‹ค๋ฅธ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

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




[1] DOM

DOM์ด๋ž€ Document Object Model์ž…๋‹ˆ๋‹ค.

ํ˜„์‹ค์— ์žˆ๋Š” ๊ฒƒ์„ ํŠน์ • ๊ด€์ ์œผ๋กœ ๋ฐ”๋ผ๋ณด์•„ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์ถ”์ƒํ™” ํ˜น์€ ๋ชจ๋ธ๋ง์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด ๋ฐ”๋กœ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ HTML ๋ฌธ์„œ๊ฐ€ ๋ชจ๋ธ๋ง๋˜์–ด ๊ฐ์ฒด(ํŠธ๋ฆฌ ๊ตฌ์กฐ)๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด DOM์ž…๋‹ˆ๋‹ค.

  • DOM์˜ ๊ฐ ์š”์†Œ๋Š” key-value ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. UI์˜ ์ƒํƒœ, ๊ธฐ๋Šฅ, ์†์„ฑ์„ ๊ฐ์ฒด๋กœ ๋ฝ‘์•„๋‚ธ ๊ฒƒ์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • DOM ํŠธ๋ฆฌ๋Š” ์ „์œ„์ˆœํšŒ๋กœ ์กฐํšŒ๋ฉ๋‹ˆ๋‹ค.


[1-1] DOM์˜ ๋“ฑ์žฅ

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


[1-2] DOM ๋ Œ๋”๋ง

  • ๋ธŒ๋ผ์šฐ์ €๋Š” HTML์„ ์ฝ๊ณ  ํŒŒ์‹ฑํ•˜์—ฌ DOM Tree๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • Style Sheets๋ฅผ ์ฝ๊ณ  ํŒŒ์‹ฑํ•˜์—ฌ Style Rules๋ฅผ ๋งŒ๋“ค์–ด DOM Tree์— ์ ์šฉ์‹œํ‚ต๋‹ˆ๋‹ค. (Attachment)
  • Layout ๊ณผ์ •์„ ํ†ตํ•ด DOM node์˜ ์œ„์น˜๋ฅผ ์ •ํ•ด์ฃผ์–ด Render Tree๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์ถ•๋œ Render Tree๋ฅผ ์‹ค์ œ ํ™”๋ฉด์— ๊ทธ๋ ค์ค๋‹ˆ๋‹ค. (Painting)


๐Ÿ˜† ์ด์ „ ์ •๋ฆฌ๊ธ€
>
๋ธŒ๋ผ์šฐ์ €์˜ ์ž‘๋™ ์›๋ฆฌ : https://jungjjeong.github.io/cs/web/frontend/Browser/


[1-3] DOM ์„ ํƒ

(1) getElementById

  • DOM Tree์—์„œ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ฐ”๋กœ id๋กœ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ์ œ์ผ ๋จผ์ € ์ฐพ์€ ์š”์†Œ ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(2) getElementsByClassName

  • DOM Tree์—์„œ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ผ์น˜ํ•˜๋Š” class๋กœ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๋“ค์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(3) getElementsByTagName

  • DOM Tree์—์„œ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ํƒœ๊ทธ ์ด๋ฆ„์œผ๋กœ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๋“ค์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(4) querySelector

  • DOM Tree์—์„œ ์š”์†Œ ๋…ธ๋“œ๋ฅผ CSS Selector ๋ฌธ๋ฒ•์œผ๋กœ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ์ œ์ผ ๋จผ์ € ์ฐพ์€ ์š”์†Œ ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(5) querySelectorAll

  • DOM Tree์—์„œ ์š”์†Œ ๋…ธ๋“œ๋ฅผ CSS Selector ๋ฌธ๋ฒ•์œผ๋กœ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๋“ค์„ ๋ชจ๋‘ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(6) window.[id]

  • id๊ฐ€ ์žˆ๋Š” ์š”์†Œ๋Š” window ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.


[1-4] DOM ํƒ์ƒ‰

(1) parentNode

  • ์„ ํƒํ•œ ์š”์†Œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

(2) firstElementNode

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹ ์š”์†Œ ๋…ธ๋“œ ์ค‘ ์ฒซ ๋ฒˆ์งธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
  • ์—†์„ ๊ฒฝ์šฐ null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” lastElementNode๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

(3) children

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
  • ์—†์„ ๊ฒฝ์šฐ ๋นˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(4) nextElementSibling

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ์˜ ๋‹ค์Œ ํ˜•์ œ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
  • ์—†์„ ๊ฒฝ์šฐ null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(5) previousElementSibling

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ์˜ ์ด์ „ ํ˜•์ œ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
  • ์—†์„ ๊ฒฝ์šฐ null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


[1-5] DOM ์กฐ์ž‘

(1) Class ์ ‘๊ทผ

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ์—์„œ className๊ณผ classList๋กœ ์š”์†Œ์˜ class ์†์„ฑ์„ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(2) hasAttribute

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ์—์„œ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ

(3) getAttribute

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ์—์„œ ์†์„ฑ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์—†์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(4) setAttribute

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ์—์„œ ์†์„ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

(5) removeAttribute

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ์˜ ์†์„ฑ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

(6) textContent

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ์—์„œ ํ…์ŠคํŠธ ๋…ธ๋“œ์— ์ ‘๊ทผ, ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(7) innerHTML

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ ๋‚ด๋ถ€ HTML์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • XSS (Cross Site Scripting)์˜ ์œ„ํ—˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

(8) createElement

  • ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(9) appendChild

  • ์ƒ์„ฑํ•œ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ์š”์†Œ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

(10) removeChild

  • ์„ ํƒํ•œ ์š”์†Œ ๋…ธ๋“œ ์ž์‹ ๋…ธ๋“œ ์ค‘ ํ•ด๋‹น๋˜๋Š” ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.


XSS (Cross Site Scripting)
>
๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹Œ ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์‚ฌ์ดํŠธ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณต๊ฒฉ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.




[2] Virtual DOM

Virtual DOM์€ ๋ฌด์—‡์ผ๊นŒ์š”?
VIrtual DOM์€ ์‹ค์ œ DOM Tree๋ฅผ JS ๊ฐ์ฒด๋กœ ๋งŒ๋“  ๊ฒƒ์œผ๋กœ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๋‹ด์•„ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

DOM์„ ์ˆ˜์ •ํ•  ๋•Œ, ์ง์ ‘ DOM ํŠธ๋ฆฌ๋ฅผ ๋จผ์ € ์กฐ์ž‘ํ•˜์ง€ ์•Š๊ณ 
Virtual DOM์˜ ๋ฐ”๋€Œ๋Š” ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•œ ๋’ค ๋ Œ๋”๋ง ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ReactJS์™€ VueJS์—์„œ๋„ Virtual DOM์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.



  • ๐Ÿ˜ฎ ๊ทธ๋ ‡๋‹ค๋ฉด Virtual DOM์ด DOM๋ณด๋‹ค ๋น ๋ฅผ๊นŒ์š”?

์•„๋‹™๋‹ˆ๋‹ค.

๋‹จ์ง€ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๋„๋ก ๋„์™€์ฃผ๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ์œ ์Šค์ผ€์ด์Šค์— ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— Virtual DOM์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜คํžˆ๋ ค Virtual DOM, DOM์„ ๊ฐ๊ฐ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰ ์‹œ๊ฐ„์ด 2๋ฐฐ๊ฐ€ ๋˜๋ฉฐ
๊ฐ๊ฐ ๋”ฐ๋กœ ๊ตฌ์ถ•๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋˜ํ•œ 2๋ฐฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์›น์‚ฌ์ดํŠธ์—์„œ๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ณด๋‹ค ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ์ด ๋” ์ค‘์š”ํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Virtual DOM์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


[2-1] createDocumentFragment()

JS์˜ DOM ๊ฐ์ฒด๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋งˆ๋‹ค DOM Tree์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์ฃผ๋œ ์š”์ธ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ JS์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” DOM ๊ฐ์ฒด ์ ‘๊ทผ์„ ์ตœ์†Œํ™” ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

DocumentFragment ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด DOM Tree ์™ธ๋ถ€์— ๊ฒฝ๋Ÿ‰ํšŒ๋œ ๋ฌธ์„œ DOM์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ๋งŒ ์กด์žฌํ•˜๋Š” ๋นˆ ๋ฌธ์„œ ํ…œํ”Œ๋ฆฟ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์†์‰ฝ๊ฒŒ ์กฐ์ž‘ํ•œ ํ›„ ์‹ค์ œ DOM์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ์‹ค์ œ ๋ผ์ด๋ธŒ DOM ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Virtual DOM ์—ญํ• ์„ ํ•˜๋Š” DocumentFragment๊ฐ์ฒด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.




[+] ์‹ค์Šต ์ฝ”๋“œ - ๊ฐ„๋‹จํ•œ ์—๋””ํ„ฐ

๋ฒ„ํŠผ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅด๊ณ ,, width height๊ฐ€ ๊ณ ์ •๊ฐ’์œผ๋กœ ์ง€์ •๋˜์–ด ์žˆ๋Š” ๊ฑธ ์ž˜ ๋ชป๋ณด๊ฒ ๋Š”
๋‚˜๋Š” ํ˜น์‹œ ์ด์„ธ๊ณ„์˜ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์ž ์ง€๋ง์ƒ..? ๐Ÿ™„

Untitled




์ถœ์ฒ˜

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

https://spongeb0b.tistory.com/141

https://untitledtblog.tistory.com/44

์นดํ…Œ๊ณ ๋ฆฌ: ,

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ