๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’Ž/๋ถ€์ŠคํŠธ์ฝ”์Šค

[๋ถ€์ŠคํŠธ์ฝ”์Šค] ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ FE: WEB UI ๊ฐœ๋ฐœ

by dar0m! 2020. 3. 12.

์ด์ „๊นŒ์ง€ JavaScript ๊ธฐ๋ณธ๋ฌธ๋ฒ•์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด์•˜๊ณ  ์ด๋ฒˆํฌ์ŠคํŒ…์—์„œ๋Š” WEB UI๊ฐœ๋ฐœ์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ•™์Šต ๋ชฉํ‘œ

  1. JavaScript์˜ ๊ธฐ๋ณธ๋ฌธ๋ฒ•์„ ์ดํ•ดํ•œ๋‹ค.
  2. DOM, Browser Event, Ajax์ด ๊ฐ๊ฐ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ณ , ์ด๋ฅผ ํ™œ์šฉํ•ด ์›นํ™”๋ฉด์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. JSP์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ดํ•ดํ•˜๊ณ  redirect & forward ์™€ scope๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
  4. JSTL๊ณผ EL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
  5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ฐ„๋‹จํ•œ SQL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
  6. Maven์„ ์ดํ•ดํ•˜๊ณ  Maven์„ ์ด์šฉํ•œ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. 
  7. JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 
  8. Web API๋ฅผ ์ดํ•ดํ•œ๋‹ค. 

๋ชฉ์ฐจ

  1. window ๊ฐ์ฒด(setTimeout)
  2. DOM๊ณผ querySelector
  3. Browser Event, Event object, Event handler
  4. Ajaxํ†ต์‹ ์˜ ์ดํ•ด
  5. JavaScript Debugging

 

1) window ๊ฐ์ฒด(setTimeout)

 

[LECTURE] 1) window ๊ฐ์ฒด(setTimeout) : edwith

๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์ „์—ญ๊ฐ์ฒด(window)์— ์†ํ•œ ๋ฉ”์„œ๋“œ์—๋Š” ๊ฒฝ๊ณ ์ฐฝ์„ ๋„์›Œ์ฃผ๋Š” alert ๊ทธ๋ฆฌ๊ณ  setTimeout์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ํ•จ์ˆ˜์™€... - ๋ถ€์ŠคํŠธ์ฝ”์Šค

www.edwith.org

ํ•ต์‹ฌ ๊ฐœ๋…

  • setTimeout
  • ๋น„๋™๊ธฐ

window ๊ฐ์ฒด

๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด, window๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. window์—๋Š” ๋งŽ์€ ๋ฉ”์„œ๋“œ๋“ค์ด ์กด์žฌํ•˜๋ฉฐ, ์•„๋ž˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. window๋Š” ๋””ํดํŠธ์˜ ๊ฐœ๋…์ด๋ฏ€๋กœ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1
2
window.setTimeout()
setTimeout() //window๋Š” ์ „์—ญ๊ฐ์ฒด๋ผ์„œ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.
cs

 

setTimeout ํ™œ์šฉ

setTimeout์€ ๋‚ฏ์„ค๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ž๋กœ ํ•จ์ˆ˜๋ฅผ ๋ฐ›๊ณ  ์žˆ์œผ๋ฉฐ, ๋ณดํ†ต ๋‚˜์ค‘์— ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜๋„ ์žˆ๊ณ ์š”.

setTimeout์˜ ์‹คํ–‰์€ ๋น„๋™๊ธฐ(asynchronous)๋กœ ์‹คํ–‰๋˜์–ด ๋™๊ธฐ์ ์ธ ๋‹ค๋ฅธ ์‹คํ–‰์ด ๋๋‚˜์•ผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
function run() {
    console.log("start");
    setTimeout(function() {
        var msg = "hello codesquad";
        console.log(msg);  //์ด ๋ฉ”์‹œ์ง€๋Š” ์ฆ‰์‹œ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    }, 1000);
    console.log("end");
}
 
run();
cs


์ถœ๋ ฅ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. start
  2. end
  3. hello codesquad

์ฆ‰ setTimeout ์•ˆ์˜ ํ•จ์ˆ˜(์ฝœ๋ฐฑํ•จ์ˆ˜)๋Š” runํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ๋๋‚˜๊ณ  ๋‚˜์„œ, (์ •ํ™•ํžˆ๋Š” stack์— ์Œ“์—ฌ์žˆ๋Š” ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ๋๋‚˜๊ณ  ๋‚˜์„œ ์‹คํ–‰๋จ) ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ด ์™ธ์—๋„ setInterval๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • setInterval์€ ์ผ์ •ํ•œ ์‹œ๊ฐ„๊ฐ„๊ฒฉ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค. → ๋ฐ˜๋ณต์ˆ˜ํ–‰.
  • setTimeout์€ ์ง€์ •๋œ ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์ง€์ •๋œ ์‹œ๊ฐ„ ์‚ฌ์ด์— ์ž‘์—…์‹œ๊ฐ„์ด ์ถ”๊ฐ€๋œ๋‹ค. → 1๋ฒˆ์ˆ˜ํ–‰


2) DOM๊ณผ querySelector

 

[LECTURE] 2) DOM๊ณผ querySelector : edwith

๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์šฐ๋ฆฌ๊ฐ€ ๋Œ“๊ธ€์„ ์ž…๋ ฅํ•  ๋•Œ ๋Œ“๊ธ€์ด ๋ฐ”๋กœ ํ™”๋ฉด์— ์ถ”๊ฐ€๋˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์ฃ ? ์ด์™ธ์—๋„ ๋ฐ›์€ ์ด๋ฉ”์ผํ•จ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ธฐ๋„ ํ•˜๊ณ ์š”. ์ด๋ ‡๊ฒŒ HTML ๋‚ด์˜ ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€๊ฒฝ... - ๋ถ€์ŠคํŠธ์ฝ”์Šค

www.edwith.org

 

ํ•ต์‹ฌ ๊ฐœ๋…

  • DOM Tree
  • DOM API
  • querySelector

DOM ์˜ˆ์‹œ

DOM

๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” HTML์ฝ”๋“œ๋ฅผ DOM(Document Object Model)์ด๋ผ๋Š” ๊ฐ์ฒดํ˜•ํƒœ์˜ ๋ชจ๋ธ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ €์žฅ๋œ ์ •๋ณด๋ฅผ DOM Tree๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ HTML element๋Š” Tree ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

DOM Tree

๋ณต์žกํ•œ DOM Tree๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด JavaScript๋กœ ํƒ์ƒ‰์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋„ˆ๋ฌด ํž˜๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” DOM(document object model)์ด๋ผ๋Š” ๊ฐœ๋…์„ ํ†ตํ•ด์„œ, ๋‹ค์–‘ํ•œ DOM API(ํ•จ์ˆ˜ ๋ฌถ์Œ์ •๋„)๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” DOM Tree์ฐพ๊ณ  ์กฐ์ž‘ํ•˜๋Š” ๊ฑธ ์‰ฝ๊ฒŒ ๋„์™€์ฃผ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๋ฅผ(DOM API)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

โ— getElementById()

document.getElementById(id);

์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” id ์†์„ฑ์„ ๊ฐ€์ง„ ์š”์†Œ๋ฅผ ์ฐพ๊ณ , ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Element ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ID๋Š” ๋ฌธ์„œ ๋‚ด์—์„œ ์œ ์ผํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ์š”์†Œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜๋Š” id๋กœ ์ฐพ์œผ๋ ค๋Š” ์š”์†Œ ID์ž…๋‹ˆ๋‹ค. ID๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฌธ์ž์—ด๋กœ, ๋ฌธ์„œ ๋‚ด์—์„œ ์œ ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ๊ฐ’์€ ํ•˜๋‚˜์˜ ์š”์†Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’์€ ์ฃผ์–ด์ง„ ID์™€ ์ผ์น˜ํ•˜๋Š” DOM ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Element ๊ฐ์ฒด. ๋ฌธ์„œ ๋‚ด์— ์ฃผ์–ด์ง„ ID๊ฐ€ ์—†์œผ๋ฉด null.

ID๊ฐ€ ์—†๋Š” ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด Document.querySelector()๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ๋ชจ๋“  ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โ— querySelector()

document.querySelector(selectors);

DOM์„ ์ฐพ๋Š”๋ฐ ํŠนํžˆ ์œ ์šฉํ•œ querySelector ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. 

๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์„ ํƒ์ž๋ฅผ ํฌํ•จํ•œ DOMString ์ด๋ฉฐ ์œ ํšจํ˜„ CSS ์„ ํƒ์ž์—ฌ์•ผ๋งŒ ํ•œ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’์€ ์ œ๊ณตํ•œ CSS ์„ ํƒ์ž๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ Element ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ฒฐ๊ณผ๊ฐ€ ์—†๋‹ค๋ฉด null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

โ— css selector

selector๋ฌธ๋ฒ•์€ querySelector์™€ querySelectorAll๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, css ์Šคํƒ€์ผ์„ ๋ถ€์—ฌํ–ˆ์„ ๋•Œ ์ตํ˜”๋˜

selector๋ฌธ๋ฒ•๊ณผ ๋™์ผํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด์™ธ์˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค...

  • removeChild(child) : ์‚ญ์ œ
  • replaceChild(newChild, oldChild) : ๋Œ€์ฒด
  • appendChild(child) : ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹์œผ๋กœ ์ฃผ์–ด์ง„ ์—˜๋ฆฌ๋จผํŠธ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • document.createElement(tagname) : tagname ์—˜๋ฆฌ๋จผํŠธ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • document.createTextNode(data) : ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

3) Browser Event, Event object, Event handler

 

[LECTURE] 3) Browser Event, Event object, Event handler : edwith

๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์–ด๋–ค ์˜์—ญ์„ ๋งˆ์šฐ์Šค ํด๋ฆญํ•˜๊ฑฐ๋‚˜, ํ™”๋ฉด์„ ์Šคํฌ๋กค ํ•˜๊ฑฐ๋‚˜ ํ•˜๋Š” ์ž‘์—…์— ๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ˜์‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒƒ๋“ค์€ ๋ชจ๋‘ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ Event๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘๋˜๊ฒŒ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ... - ๋ถ€์ŠคํŠธ์ฝ”์Šค

www.edwith.org

Event

๋ธŒ๋ผ์šฐ์ €์—๋Š” ๋งŽ์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์˜ ํฌ๊ธฐ๋ฅผ ๋งˆ์šฐ์Šค๋กœ ์กฐ์ ˆํ•  ๋•Œ๋„, ์Šคํฌ๋กค์„ ํ•  ๋•Œ๋„, ๋งˆ์šฐ์Šค๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ์„ ํƒํ•  ๋•Œ๋„ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐœ์ƒ์‹œ์ผœ์ฃผ๋‹ˆ, ์šฐ๋ฆฌ๋Š” ๊ทธ๋•Œ ์–ด๋–ค ์ผ์„ ํ•˜๋ผ๊ณ  ํ•  ์ผ์„ ๋“ฑ๋กํ•  ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด, HTML์—˜๋ฆฌ๋จผํŠธ๋ณ„๋กœ ์–ด๋–ค ์ด๋ฒคํŠธ(์ฃผ๋กœ ํ‚ค๋ณด๋“œ๋‚˜ ๋งˆ์šฐ์Šค ๊ด€๋ จ)๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํŠน์ • ํ–‰์œ„๋ฅผ(์–ด๋–ค ์ผ) ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋Œ€์ƒ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฐพ๊ณ  ์–ด๋–ค ์ผ์„ ๋“ฑ๋กํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๊ฒƒ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

์ด๋ฒคํŠธ ๋“ฑ๋ก ํ‘œ์ค€๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. addEventListener ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1
2
3
4
var el = document.querySelector(".outside");
el.addEventListener("click"function(){
//do something..
}, false);
cs

addEventListener ํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. 

์ด ํ•จ์ˆ˜๋Š” ๋‚˜์ค‘์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๋กœ ์ด๋ฒคํŠธํ•ธ๋“ค๋Ÿฌ(Event Handler) ๋˜๋Š” ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ(Event Listener)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. 

 

์ด๋ฒคํŠธ ๊ฐ์ฒด

๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ์ด๋ฒคํŠธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฆฌ์Šค๋„ˆ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ ์•ˆ์—์„œ๋Š” ์ด๋ฒคํŠธ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•ด์„œ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

1
2
3
4
5
var el = document.getElementById("outside");
el.addEventListener("click"function(evt){
 console.log(evt.target);
 console.log(evt.target.nodeName);
}, false);
cs

๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๊ฑด event.target์ž…๋‹ˆ๋‹ค. event.target์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ element๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค

element๋„ ๊ฐ์ฒด์ด๋ฏ€๋กœ ์•ˆ์— nodeName์ด๋‚˜ classname๊ณผ ๊ฐ™์ด element๊ฐ€ ๊ฐ€์ง„ ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด์™ธ์— ์ˆ˜๋งŽ์€ eventType

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

์ด๋ฒคํŠธ๋ช… ๋ฐœ์ƒํ•˜๋Š” ์‹œ์ 
keydown ํ‚ค๊ฐ€ ๋ˆŒ๋ ธ์„ ๋•Œ
keypress ์‰ฌํ”„ํŠธ, Fn, CapsLock ์„ ์ œ์™ธํ•œ ํ‚ค๊ฐ€ ๋ˆŒ๋ฆฐ ์ƒํƒœ์ผ ๋•Œ(์—ฐ์†์ ์œผ๋กœ ์‹คํ–‰๋จ.).
keyup ํ‚ค ๋ˆ„๋ฆ„์ด ํ•ด์ œ๋  ๋•Œ

 

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

์ด๋ฒคํŠธ๋ช… ๋ฐœ์ƒํ•˜๋Š” ์‹œ์ 
mousedown ํฌ์ธํŒ… ์žฅ์น˜ ๋ฒ„ํŠผ์ด ์—˜๋ฆฌ๋จผํŠธ ์œ„์—์„œ ๋ˆŒ๋ ธ์„ ๋•Œ.
mouseup ํฌ์ธํŒ… ์žฅ์น˜ ๋ฒ„ํŠผ์ด ์—˜๋ฆฌ๋จผํŠธ ์œ„์—์„œ ๋†“์˜€์„ ๋•Œ.
click ํฌ์ธํŒ… ์žฅ์น˜ ๋ฒ„ํŠผ(๋ชจ๋“  ๋ฒ„ํŠผ; ์ฃผ ๋ฒ„ํŠผ๋งŒ ํ•ด๋‹น๋  ์˜ˆ์ •)์ด ์—˜๋ฆฌ๋จผํŠธ์—์„œ ๋ˆŒ๋ ธ๋‹ค๊ฐ€ ๋†“์˜€์„ ๋•Œ.
wheel ํฌ์ธํŒ… ์žฅ์น˜์˜ ํœ  ๋ฒ„ํŠผ์ด ์–ด๋–ค ๋ฐฉํ–ฅ์ด๋“  ํšŒ์ „๋˜์—ˆ์„ ๋•Œ.

 

 

์ด๋ฒคํŠธ ์ฐธ์กฐ

DOM ์ด๋ฒคํŠธ๋Š” ๋ฐœ์ƒํ•œ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์„ ์ฝ”๋“œ์— ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์ด๋ฒคํŠธ๋Š” Event ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•œ ๊ฐ์ฒด์— ์˜ํ•ด ํ‘œํ˜„๋˜๋ฉฐ ๋ฐœ์ƒํ•œ ๊ฒƒ์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์–ป๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ถ”๊ฐ€์ ์ธ ์ปค์Šคํ…€ ํ•„๋“œ ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐ€์งˆ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋Š” ๋ Œ๋”๋ง ๋ชจ๋ธ์—์„œ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ ‰์…˜๋ถ€ํ„ฐ ๋ฐœ์ƒํ•œ ๊ฒƒ์—๋Œ€ํ•œ ์ž๋™ ์•Œ๋ฆผ๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

developer.mozilla.org

 

4) Ajaxํ†ต์‹ ์˜ ์ดํ•ด

 

[LECTURE] 4) Ajaxํ†ต์‹ ์˜ ์ดํ•ด : edwith

๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋ธŒ๋ผ์šฐ์ €์˜ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์˜ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋” ์ข‹์€ UX(U... - ๋ถ€์ŠคํŠธ์ฝ”์Šค

www.edwith.org

ํ•ต์‹ฌ ๊ฐœ๋…

  • XMLHTTPRequest
  • Ajax

๋ธŒ๋ผ์šฐ์ €์˜ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์˜ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋” ์ข‹์€ UX(User Experience)์— ํ•ด๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. (์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์ผ๋ถ€๋ถ„๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค.)

์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. Ajax (XMLHTTPRequest ํ†ต์‹ )

์ด ๊ธฐ์ˆ ์€ ์›น์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•  ๋•Œ, ๋ธŒ๋ผ์šฐ์ € ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์—์„œ ์ถœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ข‹์€ UX๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

ํƒญ์„ ๋ˆ„๋ฅผ๋•Œ๋งˆ๋‹ค ์ปจํ…์ธ ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ์„œ๋น„์Šค๋ฅผ ์ƒ๊ฐํ–ˆ์„ ๋•Œ ๋ˆ„๋ฅด์ง€๋„ ์•Š์€ ํƒญ์˜ ์ปจํ…์ธ ๊นŒ์ง€ ์ดˆ๊ธฐ๋กœ๋”ฉ์‹œ์ ์— ๋ชจ๋‘ ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋ฉด ์ดˆ๊ธฐ๋กœ๋”ฉ์†๋„์— ์˜ํ–ฅ์„ ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์ ์œผ๋กœ ํ•„์š”ํ•œ ์‹œ์ ์— ์ปจํ…์ธ ๋ฅผ ๋ฐ›์•„์™€์„œ ํ‘œํ˜„ํ•˜๋ฉด ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ๊ฐ€ Ajax๊ธฐ์ˆ ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

Ajaxํ†ต์‹ ์˜ ์ดํ•ด

Ajax ํ†ต์‹ ์œผ๋กœ๋Š” XML, Plain Text, JSON ๋“ฑ ๋‹ค์–‘ํ•œ ํฌ๋งท์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ด ํŽธ๋ฆฌํ•œ JSONํฌ๋งท์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Šต๋‹ˆ๋‹ค 

  • Ajax : ๋น„๋™๊ธฐ ํ†ต์‹  (์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๋ฐ›์•„์˜ค๋Š” ํ†ต์‹ ๋ฒ•)

    -Ajax๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” XMLHTTPRequest() ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ›์•„์˜ค๊ณ  open(์„œ๋ฒ„๋ฅผ ์—ฐ๋‹ค) send(์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค) ๋ฉ”์†Œ๋“œ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Json : Ajax๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํฌ๋งท ์ค‘ ํ•˜๋‚˜.

    (Ajax๋Š” ๋‹ค์–‘ํ•œ ํฌ๋งท์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋ฐ, ๋ณดํ†ต์€ ์‚ฌ์šฉ์ด ํŽธ๋ฆฌํ•œ Json ํฌ๋งท์„ ์‚ฌ์šฉํ•œ๋‹ค. ์‚ฌ๋žŒ๋„ ์ฝ๊ธฐ ํŽธํ•˜๊ณ  ๊ธฐ๊ณ„๋„ ์ฝ๊ธฐ ํŽธํ•ด์„œ.)

2. AJAX ์‹คํ–‰์ฝ”๋“œ

AJAX ์‹คํ–‰ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ๋ฐฉ๋ฒ•์€ XMLHTTPRequest ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
function ajax(data) {
 var oReq = new XMLHttpRequest();
 oReq.addEventListener("load"function() {
   console.log(this.responseText);
 });    
 oReq.open("GET""http://www.example.org/getData?data=data");//parameter๋ฅผ ๋ถ™์—ฌ์„œ ๋ณด๋‚ผ์ˆ˜์žˆ์Œ. 
 oReq.send();
}
cs

XMLHttpRequest๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ, open๋ฉ”์„œ๋“œ๋กœ ์š”์ฒญ์„ ์ค€๋น„ํ•˜๊ณ , send๋ฉ”์„œ๋“œ๋กœ ์„œ๋ฒ„๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์š”์ฒญ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด(์„œ๋ฒ„์—์„œ ์‘๋‹ต์ด ์˜ค๋ฉด) load์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋Š” ์ด๋ฏธ ajaxํ•จ์ˆ˜๋Š” ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ฝœ์Šคํƒ์—์„œ ์‚ฌ๋ผ์ง„ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ด๋Š” setTimeoutํ•จ์ˆ˜์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์‹คํ–‰๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” '๋น„๋™๊ธฐ'๋กœ์ง ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ ๋งํฌ↓

 

Using XMLHttpRequest

In this guide, we'll take a look at how to use XMLHttpRequest to issue HTTP requests in order to exchange data between the web site and a server

developer.mozilla.org

 

5) JavaScript Debugging
 

[LECTURE] 5) JavaScript Debugging : edwith

๋“ค์–ด๊ฐ€๊ธฐ์ „์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์€ ์‹คํ–‰๋‹จ๊ณ„(๋Ÿฐํƒ€์ž„)์—์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ํƒ€์ด๋ฐ์— ์–ด๋””๊ฐ€ ๋ฌธ์ œ์ธ์ง€ ๋ฐ”๋กœ ํ™•์ธํ•˜๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ฒ˜๋Ÿผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ๋„ ๋””๋ฒ„๊น…์˜ ์—ฐ์†์ด... - ๋ถ€์ŠคํŠธ์ฝ”์Šค

www.edwith.org

ํ•ต์‹ฌ ๊ฐœ๋…

  • chrome developer tools
  • debugging

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹คํ–‰๋‹จ๊ณ„(๋Ÿฐํƒ€์ž„)์—์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ํƒ€์ด๋ฐ์— ์–ด๋””๊ฐ€ ๋ฌธ์ œ์ธ์ง€ ๋ฐ”๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ๋ฒ„๊ทธ๋ฅผ ์žก๋Š”๋‹คํ•˜์—ฌ ๋””๋ฒ„๊น…์ด๋ผํ•˜๊ณ , ๋””๋ฒ„๊น…์„ ํ•  ๋•Œ ํฌ๋กฌ ๊ฐœ๋ฐœ์ž๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋””๋ฒ„๊น…ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋””๋ฒ„๊น… ์ปจํŠธ๋กค

  • Pause, Continue : ์ฒซ ๋ฒˆ์งธ ๋ฒ„ํŠผ์€ ํ‰์†Œ์—๋Š” Pause ๋ฒ„ํŠผ ์ƒํƒœ์ธ๋ฐ ๋ธŒ๋ ‰ํฌ์ธํŠธ๊ฐ€ ์žกํžŒ ์ƒํƒœ์—์„  Continue ๋ฒ„ํŠผ์ด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๊ฐ€ ์žกํž ๋•Œ๊นŒ์ง€ ์ฝ”๋“œ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • Step over next function call : ์Šคํ… ์˜ค๋ฒ„๋Š” ์ฝ”๋“œ ๋ผ์ธ์„ ํ•œ ์Šคํƒญ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ํ˜„์žฌ ์‹คํ–‰ ๋ผ์ธ์— ํ•จ์ˆ˜ ์‹คํ–‰ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•จ์ˆ˜๋Š” ์‹คํ–‰ํ•˜๋Š”๋ฐ ์ด๋•Œ ํ•จ์ˆ˜ ์•ˆ์˜ ์ฝ”๋“œ๋กœ๋Š” ์ง„์ž…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰ ๋ผ์ธ์˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰๋งŒ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Step into next function call : ์Šคํ… ์ธํˆฌ๋Š” ์Šคํ… ์˜ค๋ฒ„์™€ ๋‹ค๋ฅด๊ฒŒ ํ˜„์žฌ ์‹คํ–‰ ๋ผ์ธ์˜ ์ฝ”๋“œ์— ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•จ์ˆ˜ ์•ˆ์˜ ์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ๋กœ ์ง„์ž…ํ•ด ๋“ค์–ด๊ฐ€ ๋‹ค์‹œ ํ•˜๋‚˜์”ฉ ๋ผ์ธ๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Step out of current function : ์Šคํ… ์ธํˆฌ๋กœ ๋“ค์–ด์˜จ ํ•จ์ˆ˜๋ฅผ ๋๊นŒ์ง€ ์‹คํ–‰ํ•˜๊ณ  ๋ฐ–์œผ๋กœ ๋น ์ ธ๋‚˜์™€ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ ํ•จ์ˆ˜๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
  • Active/Deactive breakpoint : ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๋ฅผ ๋„๊ฑฐ๋‚˜ ์ผค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Pause on exception : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์œ„์น˜์— ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๋ฅผ ์žก์•„์ค๋‹ˆ๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ๋งŽ์€ ๋‚ด์šฉ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ด๋ดค์Šต๋‹ˆ๋‹ค! ๋„์›€๋˜์…จ์Œ ์ข‹๊ฒ ๊ณ  ์ €๋„ ํ”„๋ก ํŠธ์—”๋“œ์— ๋Œ€ํ•ด์„œ ๋” ๊ณต๋ถ€ํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธด ๊ธ€ ๋ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

 

๋Œ“๊ธ€