ì¢ ë ë³µì¡í ì½ë를 ìì±í기 ì ì, ëë²ê¹ ì´ë ê²ì ëí´ ì´ì¼ê¸°í´ë´ ìë¤.
ëë²ê¹ (debugging)ì ì¤í¬ë¦½í¸ ë´ ìë¬ë¥¼ ê²ì¶í´ ì ê±°íë ì¼ë ¨ì ê³¼ì ì ì미í©ëë¤. 모ë ë¸ë¼ì°ì ì í¸ì¤í¸ íê²½ ëë¶ë¶ì ê°ë°ì ë구 ìì UI ííë¡ ëë²ê¹ í´ì 구ë¹í´ ëìµëë¤. ëë²ê¹ í´ì ì¬ì©íë©´ ëë²ê¹ ì´ í¨ì¬ ì¬ìì§ê³ , ì¤í ë¨ê³ë§ë¤ ì´ë¤ ì¼ì´ ì¼ì´ëëì§ë¥¼ ì½ë ë¨ìë¡ ì¶ì í ì ììµëë¤.
ì´ ê¸ìì Chrome ë¸ë¼ì°ì ìì ì ê³µíë ëë²ê¹ í´ì ì¬ì©íëë¡ íê² ìµëë¤. 기ë¥ì´ ë¤ìíê³ , Chromeì ìµìí´ì§ë©´ ë¤ë¥¸ ë¸ë¼ì°ì ìì ì§ìíë ëë²ê¹ í´ì ì½ê² ìµí ì ì기 ë문ì ëë¤.
âSourcesâ í¨ë
Chrome ë²ì ì ë°ë¼ ë³´ì´ë íë©´ì ì½ê°ì© ë¤ë¥¼ ì ììµëë¤. íì§ë§ ë²ì ì´ ë°ëì´ë 구ì±ì í¬ê² ë°ëì§ ì기 ë문ì íë©´ 캡ì³ë³¸ê³¼ í¨ê» ì¤ëª ì ì´ì´ëê°ê² ìµëë¤.
- Chromeì ì¬ì©í´ ìì íì´ì§ë¥¼ ì½ëë¤.
- F12(MacOS: Cmd+Opt+I)를 ëë¬ ê°ë°ì ë구를 ì½ëë¤.
Sourcesíì í´ë¦í´Sourcesí¨ë(panel)ì ì½ëë¤.
Sources í¨ëì ì²ì ì´ìë¤ë©´ ìëì ê°ì íë©´ì´ ë³´ì¼ ê²ëë¤.
í ê¸ ë²í¼ ì ë르면 navigatorê° ì´ë¦¬ë©´ì íì¬ ì¬ì´í¸ì ê´ë ¨ë íì¼ë¤ì´ ëì´ë©ëë¤.
íì¼ ëª©ë¡ìì hello.js를 í´ë¦í´ ìëì ê°ì´ íë©´ì ë°ê¿ë´
ìë¤.
Sources í¨ëì í¬ê² ì¸ ê°ì ììì¼ë¡ 구ì±ë©ëë¤.
- íì¼ íì ìì â íì´ì§ë¥¼ 구ì±íë ë° ì°ì¸ 모ë 리ìì¤(HTML, JavaScript, CSS, ì´ë¯¸ì§ íì¼ ë±)를 í¸ë¦¬ ííë¡ ë³´ì¬ì¤ëë¤. Chrome ìµì¤í ì ì´ ì¬ê¸° ëíë ëë ììµëë¤.
- ì½ë ìëí° ìì â 리ìì¤ ìììì ì íí íì¼ì ìì¤ ì½ë를 ë³´ì¬ì¤ëë¤. ì¬ê¸°ì ìì¤ ì½ë를 í¸ì§í ìë ììµëë¤.
- ìë°ì¤í¬ë¦½í¸ ëë²ê¹ ìì â ëë²ê¹ ì ê´ë ¨ë 기ë¥ì ì ê³µí©ëë¤. ê³§ ìì¸í ì´í´ë³´ê² ìµëë¤.
í ê¸ ë²í¼ ì ë¤ì ë르면 리ìì¤ ììì´ ì¬ë¼ì§ê³ , ìì¤ ì½ë ììì´ ë ëì´ì§ëë¤.
ì½ì
Esc를 ë르면 ê°ë°ì ë구 íë¨ë¶ì ì½ì ì°½ì´ ì´ë¦½ëë¤. ì¬ê¸°ì ëª ë ¹ì´ë¥¼ ì ë ¥íê³ Enter를 ë르면 ì ë ¥í ëª ë ¹ì´ê° ì¤íë©ëë¤.
ì½ì ì°½ì 구문(statement)ì ì ë ¥íê³ ì¤ííë©´ ìë«ì¤ì ì¤í ê²°ê³¼ê° ì¶ë ¥ë©ëë¤.
1+2를 ì
ë ¥íë©´ 3ì´ ì¶ë ¥ëê³ , hello("debugger")를 ì
ë ¥íë©´ undefinedê° ì¶ë ¥ëì£ . undefinedê° ì¶ë ¥ëë ì´ì ë hello("debugger")ê° ì무ê²ë ë°ííì§ ì기 ë문ì
ëë¤.
ì¤ë¨ì
ìì íì´ì§ ë´ë¶ìì ë¬´ì¨ ì¼ì´ ì¼ì´ëëì§ ìì¸í ì´í´ë´
ìë¤. hello.js를 ìì¤ ì½ë ììì ëì°ê³ ë¤ ë²ì§¸ ì¤ ì½ë ì¢ì¸¡ì ì¤ ë²í¸, 4를 í´ë¦í©ìë¤. ì½ëê° ìë ì¤ ë²í¸ 4ì ë§ì°ì¤ 커ì를 ì®ê¸´ í í´ë¦í´ì¼ í©ëë¤.
ì¶íí©ëë¤! ì¤ë¨ì ì ì±ê³µì ì¼ë¡ ì¤ì íì
¨ìµëë¤. ì¤ ë²í¸ 8ë í´ë¦í´ ì¤ë¨ì ì íë ë ì¶ê°í´ë´
ìë¤.
ì§ê¸ê¹ì§ ì ë°ë¼ì¤ì
¨ë¤ë©´ ìëì ê°ì íë©´ì´ ë³´ì¬ì¼ í©ëë¤. ì¤ ë²í¸ 4ì 8ì´ íëìì¼ë¡ ë°ë ê² ë³´ì´ìì£ ?
ì¤ë¨ì (breakpoint) ì ë§ ê·¸ëë¡ ìë°ì¤í¬ë¦½í¸ì ì¤íì´ ì¤ë¨ëë ì½ë ë´ ì§ì ì ì미í©ëë¤.
ì¤ë¨ì ì ì´ì©íë©´ ì¤íì´ ì¤ì§ë ìì ì ë³ìê° ì´ë¤ ê°ì ë´ê³ ìëì§ ì ì ììµëë¤. ëí ì¤íì´ ì¤ì§ë ìì ì 기ì¤ì¼ë¡ ëª ë ¹ì´ë¥¼ ì¤íí ìë ììµëë¤. ëë²ê¹ ì´ ê°ë¥í´ì§ë ê²ì´ì£ .
Sources í¨ë ì°ì¸¡ì ëë²ê¹ ììì ë³´ë©´ ì¤ë¨ì 목ë¡ì íì¸í ì ììµëë¤. íì¼ ì¬ë¬ ê°ì ë¤ìì ì¤ë¨ì ì ì¤ì í´ ëì ê²½ì°, ëë²ê¹ ììì ì´ì©íë©´ ìëì ê°ì ìì ì í ìë ììµëë¤.
- í목ì í´ë¦í´ í´ë¹ ì¤ë¨ì ì´ ì¤ì ë ê³³ì¼ë¡ ë°ë¡ ì´ëí ì ììµëë¤.
- ì²´í¬ ë°ì¤ ì íì í´ì í´ í´ë¹ ì¤ë¨ì ì ë¹íì±í í ì ììµëë¤.
- ë§ì°ì¤ ì¤ë¥¸ìª½ ë²í¼ì í´ë¦íì ë ëì¤ë âRemove breakpointâ ìµì ì íµí´ ì¤ë¨ì ì ìì í ìë ììµëë¤.
- ì´ ì¸ìë ë¤ìí 기ë¥ì´ ììµëë¤.
ì¤ ë²í¸ì 커ì를 ì®ê¸´ í ë§ì°ì¤ ì¤ë¥¸ìª½ ë²í¼ì í´ë¦íë©´ ì¡°ê±´ë¶ ì¤ë¨ì (conditional breakpoint) ì ì¤ì í ì ììµëë¤. Add conditional breakpoint를 í´ë¦íì ë ë¨ë ìì ì°½ì ííìì ì
ë ¥íë©´, ííìì´ ì°¸ì¸ ê²½ì°ìë§ ì¤íì ì¤ì§ìí¬ ì ììµëë¤.
ì¡°ê±´ë¶ ì¤ë¨ì ì ì¤ì íë©´ ë³ìì í¹ì ê°ì´ í ë¹ë ëë í¨ìì ë§¤ê° ë³ìì í¹ì ê°ì´ ë¤ì´ì¬ ëë§ ì¤íì ì¤ë¨ìí¬ ì ìì´ ëë²ê¹ ì ì ì©íê² íì©í ì ììµëë¤.
debugger ëª ë ¹ì´
ìë ììì²ë¼ ì¤í¬ë¦½í¸ ë´ì debugger ëª
ë ¹ì´ë¥¼ ì ì´ì£¼ë©´ ì¤ë¨ì ì ì¤ì í ê²ê³¼ ê°ì í¨ê³¼ë¥¼ ë´
ëë¤.
function hello(name) {
let phrase = `Hello, ${name}!`;
debugger; // <-- ì¬ê¸°ì ì¤íì´ ë©ì¶¥ëë¤.
say(phrase);
}
debugger ëª ë ¹ì´ë¥¼ ì¬ì©íë©´ ë¸ë¼ì°ì 를 ì¼ ê°ë°ì ë구를 ì´ê³ ìì¤ ì½ë ììì ëì ì¤ë¨ì ì ì¤ì íë ìê³ ë¥¼ íì§ ììë ë©ëë¤. ìëí°ë¥¼ ë ëì§ ìê³ ë ì¤ë¨ì ì ì¤ì í ì ì기 ë문ì í¸ë¦¬íì£ .
ë©ì¶ë©´ ë³´ì´ë ê²ë¤
ìì íì´ì§ë¥¼ ì´ë©´ í¨ì hello()ê° ìëì¼ë¡ í¸ì¶ë©ëë¤. ì¤ë¨ì ì´ ì ëë¡ ì¤ì ëì´ìëì§ íì¸íê³ , ìë¡ ê³ ì¹¨ ë¨ì¶í¤ F5(Windows, Linux ì¬ì©ì)ë Cmd+Rí¤(MacOS ì¬ì©ì)를 ëë¬ ì¤ë¨ì ì ìëìì¼ë´
ìë¤.
ìë 그림과 ê°ì´ ë¤ ë²ì§¸ ì¤ìì ì¤íì´ ì¤ë¨ëë ê²ì íì¸í ì ììµëë¤.
ì´ ìíìì ëë²ê¹
ììì â¼ë¥¼ í´ë¦í´ íì í¨ëë¤ì íëì© í¼ì³ë´
ìë¤. ê° í¨ëì ìëì ê°ì 기ë¥ì ì ê³µí©ëë¤.
-
Watchâ ííìì íê°íê³ ê²°ê³¼ë¥¼ ë³´ì¬ì¤ëë¤.Add Expression ë²í¼
+를 í´ë¦í´ ìíë ííìì ì ë ¥í í Enter를 ë르면 ì¤ë¨ ìì ì ê°ì ë³´ì¬ì¤ëë¤. ì ë ¥í ííìì ì¤í ê³¼ì ì¤ì ê³ìí´ì ì¬íê°ë©ëë¤. -
Call Stackâ ì½ë를 í´ë¹ ì¤ë¨ì ì¼ë¡ ìë´í ì¤í ê²½ë¡ë¥¼ ììì¼ë¡ íìí©ëë¤.ì¤íì
index.htmlìììhello()를 í¸ì¶íë ê³¼ì ì¤ì ë©ì·ìµëë¤. í¨ìhelloë´ì ì¤ë¨ì ì ì¤ì í기 ë문ì, ì½ ì¤í(Call Stack) ìµìë¨ìhelloê° ìì¹í©ëë¤.index.htmlìì í¨ìhello를 ì ìíì§ ìì기 ë문ì ì½ ì¤í íë¨ì 'anonymousâê° ì¶ë ¥ë©ëë¤.ì½ ì¤í ë´ì í목ì í´ë¦íë©´ ëë²ê±°ê° í´ë¹ ì½ëë¡ í ìì§ì´ê³ , ë³ì ìì ì¬íê°ë©ëë¤. 'anonymousâ를 í´ë¦í´ ì§ì íì¸í´ ë´ ìë¤.
-
Scopeâ íì¬ ì ìë 모ë ë³ì를 ì¶ë ¥í©ëë¤.Localì í¨ìì ì§ìë³ì를 ë³´ì¬ì¤ëë¤. ì§ì ë³ì ì ë³´ë ìì¤ ì½ë ììììë íì¸(ê°ì¡° íì)í ì ììµëë¤.Globalì í¨ì ë°ê¹¥ì ì ìë ì ì ë³ì를 ë³´ì¬ì¤ëë¤.Localíì í목ì¼ë¡thisì ëí ì ë³´ë ì¶ë ¥ëëë°, ì´ì ëí´ì ì¶íì íìµíëë¡ íê² ìµëë¤.
ì¤í ì¶ì í기
ì´ì 본격ì ì¼ë¡ ì¤í ë¨ê³ë§ë¤ ì´ë¤ ì¼ì´ ì¼ì´ëëì§ ì¶ì í´ë³´ê² ìµëë¤.
먼ì , ëë²ê¹ ìì ìë¨ì ìë ë²í¼ë¤ì´ ë¬´ì¨ ìí ì íëì§ ììë´ ìë¤.
- â âResumeâ: ì¤í¬ë¦½í¸ ì¤íì ë¤ì ììí¨ (ë¨ì¶í¤ F8)
-
ì¤íì ì¬ê°í©ëë¤. ì¶ê° ì¤ë¨ì ì´ ìë ê²½ì°, ì¤íì´ ì£½ ì´ì´ì§ê³ ëë²ê±°ë ëìíì§ ììµëë¤.
ë²í¼ì í´ë¦í´ë´ ìë¤.
ì¤íì´ ë¤ì ììëë¤ê° í¨ì
say()ìì ì¤ì í ì¤ë¨ì ìì ì¤íì´ ë©ì¶¥ëë¤. ì´ ìì ìì ì°ì¸¡ì 'Call Stackâì ì´í´ë³´ë©´ ì¤í ìµìë¨ì ì½(say)ì´ íë ë ì¶ê°ë ê²ì íì¸í ì ììµëë¤. íì¬ ì¤íìsay()ìì ë©ì¶°ìë ìí©ì ëë¤. - â âStepâ: ë¤ì ëª ë ¹ì´ë¥¼ ì¤íí¨ (ë¨ì¶í¤ F9)
-
ë¤ì 문ì ì¤íí©ëë¤. í´ë¦íë©´
alertì°½ì´ ë¨ë ê²ì íì¸í ì ììµëë¤.Step ë²í¼ì ê³ì ë르면 ì¤í¬ë¦½í¸ ì 체를 문 ë¨ìë¡ íëíë ì¤íí ì ììµëë¤.
- â âStep overâ: ë¤ì ëª ë ¹ì´ë¥¼ ì¤ííë, í¨ì ìì¼ë¡ ë¤ì´ê°ì§ ìì (ë¨ì¶í¤ F10)
-
'Stepâê³¼ ì ì¬íì§ë§, ë¤ì ë¬¸ì´ í¨ì í¸ì¶ì¼ ë 'Stepâê³¼ë ë¤ë¥´ê² ëìí©ëë¤(
alertê°ì ë´ì¥í¨ììë í´ë¹íì§ ìê³ , ì§ì ìì±í í¨ìì¼ ëë§ ëìì´ ë¤ë¦ ëë¤).'Stepâì í¨ì ë´ë¶ë¡ ë¤ì´ê° í¨ì 본문 첫 ë²ì§¸ ì¤ìì ì¤íì ë©ì¶¥ëë¤. ë°ë©´ 'Step overâë ë³´ì´ì§ ìë ê³³ìì ì¤ì²© í¨ì를 ì¤íí긴 íì§ë§ í¨ì ë´ë¡ ì§ì íì§ ììµëë¤.
ì¤íì í¨ì ì¤íì´ ëë íì ì¦ì ë©ì¶¥ëë¤.
'Step overâì í¨ì í¸ì¶ ì ë´ë¶ìì ì´ë¤ ì¼ì´ ì¼ì´ëëì§ ê¶ê¸íì§ ìì ë ì ì©í©ëë¤.
- â âStep intoâ (ë¨ì¶í¤ F11)
-
'Stepâê³¼ ì ì¬íë°, ë¹ë기 í¨ì í¸ì¶ìì 'Stepâê³¼ë ë¤ë¥´ê² ëìí©ëë¤. ì´ì ë§ ìë°ì¤í¬ë¦½í¸ë¥¼ ë°°ì°ê¸° ììí ë¶ì´ë¼ë©´ ë¹ë기 í¸ì¶ì ëí´ ìì§ ë°°ì°ì§ ìì기 ë문ì 'Stepâê³¼ 'Step intoâì ì°¨ì´ë¥¼ 몰ë¼ë ê´ì°®ìµëë¤.
'Stepâì
setTimeout(í¨ì í¸ì¶ ì¤ì¼ì¤ë§ì ì°ì´ë ë´ì¥ ë©ìë)ê°ì ë¹ë기 ëìì 무ìí©ëë¤. ë°ë©´ 'Step intoâë ë¹ë기 ëìì ë´ë¹íë ì½ëë¡ ì§ì íê³ , íìíë¤ë©´ ë¹ë기 ëìì´ ìë£ë ëê¹ì§ ë기í©ëë¤. ìì¸í ë´ì©ì ê°ë°ì ë구 매ë´ì¼ìì íì¸íì기 ë°ëëë¤. - â âStep outâ: ì¤í ì¤ì¸ í¨ìì ì¤íì´ ëë ë ê¹ì§ ì¤íì ê³ìí¨ (ë¨ì¶í¤ Shift+F11)
-
íì¬ ì¤í ì¤ì¸ í¨ìì ì¤íì ê³ì ì´ì´ê°ë¤ê° í¨ì 본문 ë§ì§ë§ ì¤ìì ì¤íì ë©ì¶¥ëë¤. ì¤ìë¡ ì ëë¬ ë´ë¶ ëìì ìê³ ì¶ì§ ìì ì¤ì²© í¨ìë¡ ì§ì íê±°ë ê°ë¥í í 빨리 í¨ì ì¤íì ëë´ê³ ì¶ì ê²½ì° ì ì©í©ëë¤,
- â 모ë ì¤ë¨ì ì íì±í/ë¹íì±í
-
모ë ì¤ë¨ì ì ì¼ìì ì¼ë¡ íì±í/ë¹íì±íí©ëë¤(ì¤íìë ìí¥ì´ ììµëë¤).
- â ìì¸ ë°ì ì ì½ë를 ìë ì¤ì§ìì¼ì£¼ë 기ë¥ì íì±í/ë¹íì±í
-
íì±íëì´ ìê³ , ê°ë°ì ëêµ¬ê° ì´ë ¤ìë ìíìì ì¤í¬ë¦½í¸ ì¤í ì¤ì ìë¬ê° ë°ìíë©´ ì¤íì´ ìëì¼ë¡ ë©ì¶¥ëë¤. ì¤íì´ ì¤ë¨ëì기 ë문ì ë³ì ë±ì ì¡°ì¬í´ ì´ëì ìë¬ê° ë°ìíëì§ ì°¾ì ì ìê² ë©ëë¤. ê°ë°íë¤ê° ìë¬ì í¨ê» ì¤í¬ë¦½í¸ê° 죽ìë¤ë©´ ëë²ê±°ë¥¼ ì´ê³ ì´ ìµì ì íì±íí í, íì´ì§ë¥¼ ìë¡ ê³ ì¹¨íë©´ ìë¬ê° ë°ìí 곳과 ìë¬ ë°ì ìì ì 컨í ì¤í¸ë¥¼ íì¸í ì ììµëë¤.
í¹ì ì¤ìì ë§ì°ì¤ ì¤ë¥¸ìª½ ë²í¼ì í´ë¦í´ 컨í ì¤í¸ ë©ë´ë¥¼ ì´ë©´ "Continue to here"ë¼ë ìµì ì ë³¼ ì ììµëë¤.
ì¤ë¨ì ì ì¤ì í기ë ê·ì°®ìë° í´ë¹ ì¤ìì ì¤íì ì¬ê°íê³ ì¶ì ë ì주 ì ì©í ìµì ì ëë¤.
console.log
console.log í¨ì를 ì´ì©íë©´ ìíë ê²ì ì½ìì ì¶ë ¥í ì ììµëë¤.
ìë ìì를 ì¤ííë©´ ì½ìì°½ì 0ë¶í° 4ê¹ì§ ì¶ë ¥ë©ëë¤.
// ì½ìì°½ì ì´ì´ 결과를 íì¸í´ ë³´ì¸ì.
for (let i = 0; i < 5; i++) {
console.log("ì«ì", i);
}
ê²°ê³¼ë ì½ìì°½ìë§ ì기 ë문ì ì¼ë° ì¬ì©ìë 결과를 ë³¼ ì ììµëë¤. 결과를 ë³´ë ¤ë©´ ê°ë°ì ë구ì ì½ì í¨ëì ì§ì ì´ê±°ë ë¤ë¥¸ í¨ëì´ ì´ë¦° ìíìì Esc를 ëë¬ íë©´ íë¨ì ì½ì í¨ëì ëì°ë©´ ë©ëë¤.
ì½ëì console.log를 ì ì í ë£ì´ì£¼ìë¤ë©´ ëë²ê±° ìì´ë ë¬´ì¨ ì¼ì´ ì¼ì´ëê³ ìëì§ ì¶©ë¶í íì
í ì ìì¼ë¯ë¡, console.log í¨ìì ëë²ê±°ë¥¼ ì ì í íì©íì기 ë°ëëë¤.
ìì½
ì¤í¬ë¦½í¸ ì¤íì´ ì¤ë¨ëë ê²½ì°ë ë¤ìê³¼ ê°ìµëë¤.
- ì¤ë¨ì ì ë§ë¬ì ë
debugger문 ë§ë¬ì ë- ìë¬ê° ë°ìíì ë(ê°ë°ì ëêµ¬ê° ì´ë ¤ìê³ ë²í¼ì´ 'íì±íâëì´ìë ê²½ì°)
ì¤í¬ë¦½í¸ ì¤íì´ ì¤ì§ëë©´ ì¤ë¨ ìì ì 기ì¤ì¼ë¡ ë³ìì ì´ë¤ ê°ì´ ë¤ì´ê° ìëì§ íì¸í ì ììµëë¤. ëí ë¨ê³ë³ë¡ ì½ë를 ì¤íí´ ê°ë©°, ì´ëì 문ì ê° ë°ìíëì§ ì¶ì í ìë ììµëë¤. ì´ë° ìì¼ë¡ ëë²ê¹ ì´ ì§íë©ëë¤.
ê°ë°ì ë구ë ì¬ê¸°ì ìê°í ê¸°ë¥ ì´ì¸ì ë¤ìí 기ë¥ì ì§ìí©ëë¤. Googleìì ì ê³µíë ê°ë°ì ë구 ê³µì 매ë´ì¼ì https://developers.google.com/web/tools/chrome-devtoolsìì íì¸í ì ììµëë¤.
ì´ë² ì±í°ìì ë°°ì´ ë´ì©ë§ì¼ë¡ë ëë²ê¹ ì ì¶©ë¶í í ì ììµëë¤. ê·¸ë°ë° ëì¤ì ë¸ë¼ì°ì ê³ ê¸ ê¸°ë¥ì ë°°ì´ íìë ê°ë°ì ë구 ê³µì 매ë´ì¼ì ë¤ì´ê° ë ë§ì ê°ë°ì ë구 기ë¥ì ëí´ ììë³´ì기 ë°ëëë¤.
ê°ë°ì ë구를 ì´ì´ ì´ê²ì ê² í´ë¦íë©´ì ì´ë¤ ê²ë¤ì´ ëíëëì§ ì´í´ë³´ë ë°©ë²ë ì¢ìµëë¤. ì§ì ë¶ëªì³ ë³´ë ê² ê°ì¥ ë¹ ë¥¸ íìµ ë°©ë²ì¼ ì ìì¼ëê¹ì. ë§ì°ì¤ ì¤ë¥¸ìª½ ë²í¼ì í´ë¦í´ 컨í ì¤í¸ ë©ë´ë¥¼ ëìë³´ë ê²ë ìì§ ë§ì¸ì!
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.