๐Ÿ›ผ ์šฐ์•„ํ•œ ํ…Œํฌ์บ ํ”„ 2์ฃผ์ฐจ ํšŒ๊ณ (0711~0715)

Lee Jooamยท2022๋…„ 7์›” 17์ผ
2

๐ŸŽฏ 2์ฃผ์ฐจ ๋ฏธ์…˜

1. ์นธ๋ฐ˜๋ณด๋“œ ํ˜•ํƒœ์˜ Todo ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„

2. todoList ๋ฐฑ์—”๋“œ ๊ตฌํ˜„(ExpressJS, mySQL ์ด์šฉ)

3. AWS ์ด์šฉ ๋ฐฐํฌ


์˜ˆ์œ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Ÿ

์„ค๊ณ„

... 

ToDoAddRow ์ทจ์†Œ

- ToDoAddRow ์‚ญ์ œ

## ToDo

์ œ๋ชฉ, ๋‚ด์šฉ, author by web

ToDo X hover

- toDo ๋ฐฐ๊ฒฝ์ƒ‰, ํ…Œ๋‘๋ฆฌ์ƒ‰ ๋ณ€๊ฒฝ
- X ๋ฒ„ํŠผ ์ƒ‰ ๋ณ€๊ฒฝ

ToDo ์‚ญ์ œ alert

- ์‚ญ์ œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ toDo ์ œ๊ฑฐ

ToDo ํด๋ฆญ

- ํ•ด๋‹น toDo ๊ฐ์ฒด ํ™•์ธ

ToDo ๋“œ๋ž˜๊ทธ

- ํ˜„์žฌ target todo ๋ณต์‚ฌ
- ์›๋ณธ target ์œ ๋ นํ™”
- Target toDo ๋งˆ์šฐ์Šค ๋ถ€์ฐฉ(๋”ฐ๋ผ๋‹ค๋‹˜)

ToDO ๋“œ๋ž

- ๋“œ๋ž ์œ„์น˜์˜ column ํŒŒ์•…
- Column ๋น„์—ˆ๋ƒ?

ToDo ๋”๋ธ”ํด๋ฆญ

- ToDoAddRow ํ˜•ํƒœ๋กœ ๋ณ€ํ™”
- ๋“ฑ๋ก ํ…์ŠคํŠธ => ์ˆ˜์ •
- ์ œ๋ชฉ, ๋‚ด์šฉ ํ•˜๋‚˜๋ผ๋„ ๋น„์—ˆ์„ ๋•Œ ์ˆ˜์ • ๋น„ํ™œ์„ฑํ™”

๊ธฐ๋ณธ์ ์ธ ์„ค๊ณ„๋Š” 1์ฃผ์ฐจ์™€ ๋น„์Šทํ•˜๊ฒŒ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์š”๊ตฌ์‚ฌํ•ญ์—์„œ ๊ธฐ๋Šฅ๋“ค์„ ๋ชจ๋‘ ๋ฝ‘์•„๋‚ด๊ณ  ๊ทธ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ๋ฏธ์…˜์€ ๊ฐœ์ธ์ด ์•„๋‹Œ ํŒ€์œผ๋กœ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ, ํŒ€ ํ”Œ๋ ˆ์ด ๊ฒฝํ—˜์ด ๋งŽ์ด ๋ถ€์กฑํ•ด ํ˜น์‹œ ๊ฐ™์ด ํ•˜์‹œ๋Š” ๋ถ„์—๊ฒŒ ํ๊ฐ€ ๋ ๊นŒ ์ตœ๋Œ€ํ•œ ์‹ ์ค‘ํ•˜๊ฒŒ ์ง„ํ–‰ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ ์„ค๊ณ„๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋’ค๋กœ ๋ฏธ๋ค„๋’€๊ณ , ์ตœ๋Œ€ํ•œ ํ”„๋ก ํŠธ์—”๋“œ ๋ถ€๋ถ„์˜ ๊ตฌํ˜„์— ์ง‘์ค‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ๋Š” core Component ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ๊ฒƒ์„ ์ƒ์†๋ฐ›์•„ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ณ„ํšํ–ˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽ ๋ฏธ์…˜ ์ง„ํ–‰ ์ค‘ ๊ณ ๋ คํ•œ ์‚ฌํ•ญ

ํ”„๋ก ํŠธ์—”๋“œ

๊ฐœ์ธ์ ์œผ๋กœ ์•„์‰ฌ์›€์ด ๋งŽ์ด ๋‚จ์•˜๋˜ ๋ฏธ์…˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๋ฐ˜์— ํŒ€์› ๋ถ„๊ณผ ํ•จ๊ป˜ ์„ค๊ณ„๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์„ ํ†ตํ•ด ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•œ ๊ฑด ์ •๋ง ์ข‹์•˜์ง€๋งŒ, ํ›„๋ฐ˜๋ถ€์—๋Š” ๋‚จ์€ ๊ธฐ๋Šฅ์˜ ๊ตฌํ˜„์—๋งŒ ๊ธ‰๊ธ‰ํ•ด ๋งˆ๊ตฌ์žก์ด๋กœ ๊ตฌํ˜„์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์ธ์ง€ ํ›„๋ฐ˜๋ถ€์— ๋“ค์–ด์„œ์„œ๋Š” ์ฝ”๋“œ๋ฅผ ์•Œ์•„๋ณผ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์–ด์ง€๋Ÿฝ๊ฒŒ ์ž‘์„ฑํ•œ ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•œ ๋ Œ๋”๋ง

์ด๋ฒˆ ๋ฏธ์…˜์—์„œ๋Š” HTML์„ ์ •์ ์œผ๋กœ ๋งˆํฌ์—…ํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹Œ ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•ด ์ƒ์†๋ฐ›์€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ์‹์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

import Header from './components/Header';
import TodoContainer from './components/TodoContainer/TodoContainer';
import TodoLogContainer from './components/TodoLog/TodoLogContainer';

class App {
	constructor($target) {
		this.$target = $target;
		this.$todoLogContainer = null;

		this.setup();
	}

	setup() {
		new Header('header', this.$target, {
			class: ['header', 'hi'],
			onClick: () => {
				this.$todoLogContainer.$target.classList.add('visible');
			},
		});

		new TodoContainer('div', this.$target, {
			class: ['todo-container'],
		});

		this.$todoLogContainer = new TodoLogContainer('aside', this.$target, {
			class: ['todo-log-container'],
		});
	}
}

export default App;

๊ธฐ๋ณธ์ ์œผ๋กœ app div๋ฐ•์Šค๊ฐ€ ์žˆ๊ณ  ๊ทธ ์•ˆ์„ ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ฑ„์šฐ๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” app์— ํ—ค๋”์™€ todo container ๊ทธ๋ฆฌ๊ณ  log container๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด๋ฒคํŠธ ์œ„์ž„ ๋ฐฉ์‹ ์ด์šฉ

ํด๋ฆญ์ด๋‚˜ ๋“œ๋ž˜๊ทธ ๋“ฑ์€ ๊ฐ๊ฐ์˜ html ์š”์†Œ์— ์ด๋ฒคํŠธ๋ฅผ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜๊ณ  ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ๋“ค์„ ์œ„์ž„ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ๊ฒƒ์ด ๋ฐœ์ƒํ•œ ํƒ€๊ฒŸ ๋“ฑ์„ ํ™•์ธํ•ด ํ•„์š”ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค. ์กฐ๊ฑด ๋ถ„๊ธฐ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•˜์ง€๋งŒ ๋ชจ๋“  ์š”์†Œ์— eventListener๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์ข‹๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฌธ์ œ์ 

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

๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ ๊ฒฐ๊ณผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์ด ๋ฒŒ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

์›์ธ?

todoCard๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” todoContainer๊ฐ€ ๋ฌด๋ ค 300์ค„์„ ์ฐจ์ง€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. TodoContainer๊ฐ€ TodoCard๋“ค์ด ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ๊ทธ๊ฒƒ์„ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ, ์ด๋™ํ•˜๋Š” ๊ฒƒ๋“ค์„ ๋ชจ๋‘ ์ปจํŠธ๋กคํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๋กœ์ง๋“ค์„ ๋ชจ๋‘ TodoContainer ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์ฒ˜๋Ÿผ ๋ฌด๊ฑฐ์šด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋ฆฌํŒฉํ† ๋ง์„ ์ƒ๊ฐํ•œ๋‹ค๋ฉด DOM ์กฐ์ž‘ ๋ฉ”์†Œ๋“œ๋“ค์„ ๋”ฐ๋กœ utils์ฒ˜๋Ÿผ ๊ด€๋ฆฌํ•˜๊ณ , ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋„ ์ฝ”๋“œ์˜ ์–‘์„ ์ถฉ๋ถ„ํžˆ ์ค„์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋ž, ์ถ”๊ฐ€, ์‚ญ์ œ ๋“ฑ์€ ๊ณตํ†ต๋˜๋Š” DOM ์ ‘๊ทผ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ

์ด๋ฒˆ ๋ฏธ์…˜์—์„œ๋Š” ๋ฐฑ์—”๋“œ ๊ตฌ์กฐ ์„ค๊ณ„๋งŒ ํŒ€์› ๋ถ„๊ณผ ํ•จ๊ป˜ํ•˜๊ณ  ์‹œ๊ฐ„์ด ์ด‰๋ฐ•ํ•ด ๋‚จ์€ ํ”„๋ก ํŠธ์—”๋“œ ๋ถ€๋ถ„์„ ์ œ๊ฐ€ ๊ตฌํ˜„ํ•˜๊ณ  ๋ฐฑ์—”๋“œ api ๋“ฑ์€ ํŒ€์› ๋ถ„๊ป˜์„œ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์กฐ ์ƒ์œผ๋กœ ๊ณ ๋ คํ–ˆ๋˜ ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด api์˜ ๋ผ์šฐํ„ฐ์™€ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ๋ถ„๋ฆฌํ–ˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋„ ๊ณ ๋ คํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. todoCard๋ฅผ api ํ˜ธ์ถœ์„ ํ†ตํ•ด ์กฐ์ •ํ•  ๊ฒฝ์šฐ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” log๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ log ์ถ”๊ฐ€ ์š”์ฒญ๊ณผ, todoCard์˜ api ์š”์ฒญ์„ ๊ฐ๊ฐ ์š”์ฒญํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ todoCard์— ๋Œ€ํ•œ ์š”์ฒญ๋งŒ ํ•˜๊ณ  log๋Š” ๋ฐฑ์—”๋“œ์—์„œ ์ž๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

node js์˜ ๋ฏธ๋“ค์›จ์–ด ํŒจํ„ด์„ ์ด์šฉํ•˜๋ฉด ์ด ๋ถ€๋ถ„์„ ์šฐ์•„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, todoCard ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์ „ logMiddleware๋ฅผ ๊ฑฐ์ณ log ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  todoAPI๋กœ ํ•ด๋‹น log๋ฅผ ๋ณด๋‚ด๋ฉด API ์ฒ˜๋ฆฌ๊ฐ€ ์„ฑ๊ณตํ•  ์‹œ ์ž๋™์ ์œผ๋กœ logData ๋˜ํ•œ ์—…๋ฐ์ดํŠธํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋„คํŠธ์›Œํฌ ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„๋ก ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์ง€๋Š” ๋ชปํ–ˆ์ง€๋งŒ ์ถ”ํ›„ ๋‹ค์‹œ ๋„์ „ํ•  ๋ฏธ์…˜์—์„œ ์ด๋Ÿฐ ๋ฐฉ์‹๋“ค์„ ๊ณ ๋ คํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

โœจ ๊ฐœ์„ ๋ฐฉํ–ฅ

function removeElement(DOMElement) {
  DOMElement.parentNode.removeChild(DOMElement);
}

function appendElement(DOMElement, parentElement) {
  parentElement.appendChild(DOMElement);
}

ํ•ด๋‹น ๋ฏธ์…˜์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ ๊ตฌ์กฐ๊ฐ€ ๋งŽ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. todoCard๋ฅผ add, removeํ•˜๋Š” ๊ณผ์ • ๋“ฑ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋งŽ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฏธ์…˜์ด ๋๋‚˜๊ณ  ์ด๋Ÿฐ ์ƒ๊ฐ๋„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. DOM์— ์ ‘๊ทผํ•ด์„œ ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ง€์šฐ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ์•„์˜ˆ state๋งŒ ์ˆ˜์ •ํ•˜๊ณ  ์ƒˆ๋กญ๊ฒŒ render๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹ ์–ด๋–ค ๊ฒŒ ๋” ํšจ์œจ์ ์ธ์ง€์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐฑ์ง€ ์ƒํƒœ์—์„œ ์ƒˆ๋กญ๊ฒŒ DOM์„ ๊ตฌ์„ฑํ•˜๋Š” ์ž‘์—…์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ฒ ์ง€๋งŒ, ๊ธฐ์กด์— ์žˆ๋˜ DOM์„ ์ ‘๊ทผ ๋ฉ”์†Œ๋“œ ๋“ฑ์„ ํ†ตํ•ด ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋„ ํฐ ๋น„์šฉ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.

์ˆ˜์น˜์ ์œผ๋กœ ์–ด๋–ค ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ธ์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ, state๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กญ๊ฒŒ ๋ Œ๋”๋ง์„ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ ํ•œ ๊ฐ€์ง€ ํ™•์‹คํ•œ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด์˜ ์ดˆ๊ธฐ ๋ Œ๋” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด addCard๋‚˜ deleteCard ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋“ค์˜ ๊ธธ์ด๋„ ์งง์•„์ง€๊ณ , ๋ฐœ์ƒํ•  ๋ฒ„๊ทธ์˜ ์–‘๋„ ๋งŽ์ด ์ค„์–ด๋“ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๊ตฌ์ฒด์ ์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค๋ฉด querySelector๊ฐ€ ๋” ๋น ๋ฅด๊ณ  ๊ทธ๊ฒƒ๋ณด๋‹ค๋„ getElementById๊ฐ€ ๋” ๋น ๋ฅด๊ฒ ์ง€๋งŒ, ์„ฑ๋Šฅ๋งŒ์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด jQuery๋‚˜ angular, react ๋“ฑ์˜ ํ”„๋ ˆ์ž„์›Œํฌ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์• ์ดˆ์— ์‚ฌ์šฉ์„ ์ž์ œํ•ด์•ผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ์žˆ์–ด ํŽธ๋ฆฌํ•จ๋„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜์ผ ํ…Œ๋‹ˆ ๋ง์ž…๋‹ˆ๋‹ค.

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

๐Ÿง  ๊ณ ๋ฏผ๊ณผ ์ƒ๊ฐ

์ด๋ฒˆ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํฌ๋กฑ๊ณผ ํ˜ธ๋ˆ…์Šค์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋“ฃ๊ณ  ๋งŽ์€ ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ‰์†Œ์— ๊ฐ–๊ณ  ์žˆ๋˜ ์ƒ๊ฐ๊ณผ ๊ทธ์— ๋Œ€ํ•œ ๋ฐฉํ–ฅ, ๊ทธ๋ฆฌ๊ณ  ํŠน์ • ๋„๊ตฌ๋‚˜ ํŒจํ„ด์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ์ƒ๊ฐ์ด ๋‚˜์•„๊ฐ€์•ผ ํ•˜๋Š” ๊ฐ€์— ๋Œ€ํ•ด์„œ๋„ ์ƒ๊ฐํ•ด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

1. ๊ฐœ๋ฐœ์˜ ์ˆœ์„œ

๊ฐœ๋ฐœ์—์„œ ๋ฐฑ์—”๋“œ๊ฐ€ ๋จผ์ € ๊ฐœ๋ฐœ๋˜๊ณ  ๊ทธ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ๊ฐœ๋ฐœ๋˜๋Š” ๊ฒŒ ์ตœ๊ณ ๊ฒ ์ง€๋งŒ ์‚ฌ์‹ค ์ˆœ์„œ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์ฒ˜๋Ÿผ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹Œ ๋ฏธ์…˜์ด๋ผ๋ฉด ์ •๋ง ํŽธํ•œ ๋ฐฉ์‹๋Œ€๋กœ ๊ฐœ๋ฐœํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ์ดˆ๊ธฐ ์„ค๊ณ„๋‚˜ ๊ทœ์น™ ๋“ฑ์€ ์ฒ ์ €ํžˆ ์ •ํ•ด๋†“๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค!

2. ์ฝ”๋“œ๋Š” ์ตœ๋Œ€ํ•œ ๋ถ„๋ฆฌํ•˜์ž

๋ณต์žกํ•œ ๋กœ์ง์€ ๊ฐ€๋Šฅํ•œ ์ˆจ๊ฒจ์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋งŒ ๋ณด๋Š” ์ฝ”๋“œ๋ผ๋ฉด ๊ทธ๋ƒฅ ๋งˆ์Œ๋Œ€๋กœ ์ž‘์„ฑํ•ด๋„ ์ƒ๊ด€์—†๊ฒ ์ง€๋งŒ, ๊ฐœ๋ฐœ์—์„œ ํ˜‘์—…์€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด๋ฌธ ์•ˆ์˜ ์กฐ๊ฑด ๋“ฑ์ด ๋ณต์žกํ•ด์ง„๋‹ค๋ฉด ์ตœ๋Œ€ํ•œ ์ถ”์ƒํ™” ๊ณ„์ธต์„ ์ œ๊ณตํ•˜๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

3. ์‚ฌ์šฉ ์ด์œ ๋ฅผ ์ƒ๊ฐํ•˜์ž

์ด๋ฒˆ ๋ฏธ์…˜์—์„œ๋Š” classํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ๋”ฑํžˆ ์—†์Šต๋‹ˆ๋‹ค. ์ •๋ง ๋ง ๊ทธ๋Œ€๋กœ ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐํ…Œ์บ  2์ฐจ ๊ณผ์ œ์˜ ์ง„ํ–‰๋ฐฉ์‹์„ ํ† ๋Œ€๋กœ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ–ˆ์ง€๋งŒ ๋‹จ์ˆœํžˆ ๊ฒฝํ—˜์— ์˜๊ฑฐํ•œ ํŒ๋‹จ์ผ ๋ฟ ํƒ€๋‹นํ•œ ๋…ผ๋ฆฌ๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ์…˜์„ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•˜์‹  ํŒ€์› ๋ถ„๋„ ๊ธˆ์š”์ผ ๋งˆ๋ฌด๋ฆฌ ์‹œ๊ฐ„์— ์ €์™€ ๊ฐ™์€ ์˜๊ฒฌ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋กœ์˜ ์Šคํƒ€์ผ์ด ์ž˜ ๋งž์•„์„œ ์ข‹์•˜์ง€๋งŒ, ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๋ถ€๋ถ„์„ ์ƒ๊ฐํ•  ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ธฐํš์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ณด๊ณ , ๊ตณ์ด ํด๋ž˜์Šคํ˜•์ด ํ•„์š”ํ•œ์ง€, ๋ฐ์ดํ„ฐ๋ฅผ state๋กœ ๊ด€๋ฆฌํ•ด์•ผํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ๋Š”์ง€ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฉด์—์„œ ๊ธฐํš์„ ์ ‘๊ทผํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ•์ œ์ ์ธ ์—…๋ฌด๊ฐ€ ์•„๋‹Œ ๊ต์œก์šฉ ๋ฏธ์…˜์ธ ๋งŒํผ ๋‹ค์–‘ํ•œ ์ ‘๊ทผ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•˜๋Š” ๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

4. ๐Ÿ˜ก ๋””๋ฒ„๊น…

์ตœ๊ณ ์˜ ๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•์€ console.log์ž…๋‹ˆ๋‹ค.

๋ผ๋Š” ์ƒ๊ฐ์€ ์ด์ œ ๋ฒ„๋ ค์•ผํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ˜ธ๋ˆ…์Šค๊ฐ€ ์ €๋ฒˆ ๋ฏธ์…˜๋ถ€ํ„ฐ ๋ˆ„๋ˆ„์ด ๋งํ–ˆ์ง€๋งŒ ์ด๋ฒˆ์— ์—ญ์‹œ console.log๋ฅผ ๊ฑฐ์นจ์—†์ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ ๋””๋ฒ„๊น… ํˆด์„ ์ด์šฉํ–ˆ๋‹ค๋ฉด ๋” ๋น ๋ฅด๊ฒŒ ์˜ค๋ฅ˜์˜ ์›์ธ์„ ๋ฐœ๊ฒฌํ–ˆ์„ ํ…๋ฐ ์•„์‰ฝ์Šต๋‹ˆ๋‹ค. ใ… ใ… 

๋„ˆ๋ฌด ๊ธฐ์กด์˜ ๋ฐฉ์‹์—๋งŒ ์ต์ˆ™ํ•ด์ ธ ์ƒˆ๋กœ์šด ์‹œ๋„๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ ค ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฏธ์…˜์˜ ๋ชฉํ‘œ์— console.log๋กœ ๋””๋ฒ„๊น…ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ์ •ํ•˜๊ณ  ์‹œ์ž‘ํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘ ํ›„๊ธฐ

์ด๋ฒˆ ๋ฏธ์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋Š๋‚€ ์ ๋“ค์„ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ผ๊ด€๋œ ๋ฃฐ์„ ์ •ํ•˜๊ณ  ๊ทธ๊ฒƒ์— ๋งž์ถฐ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜์ž.

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

๊ทธ ๋ฃฐ์ด ์–ด๋–ค ๋ถ€๋ถ„์—์„œ ์ž˜๋ชป๋˜์–ด์„œ ๊ธฐํ•œ ๋‚ด์— ์™„์„ฑ์‹œํ‚ค์ง€ ๋ชปํ–ˆ๋Š”์ง€๋„ ํ”ผ๋“œ๋ฐฑํ•ด์•ผ ํ•  ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜์ด๋‹ˆ ๋ง์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ ๋ฏธ์…˜์€ ์ข‹์€ ์ ๋„ ๋งŽ์•˜์ง€๋งŒ, ์•„์‰ฌ์šด ์ ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋” ์ปค ๋ณด์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์‹œ๊ฐ„๊ด€๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ํ˜‘์—…๊ฒฝํ—˜ ๋ถ€์กฑ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ด์•ผํ•˜๊ณ  ์–ด๋–ค ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€, ํ•ญ์ƒ ํŒ€์›๊ณผ ์˜๋…ผํ•˜๋ฉฐ ์„œ๋กœ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ฆฌ๋ทฐํ•˜๋Š” ์Šต๊ด€์„ ์ด๋ฒˆ ์บ ํ”„์—์„œ ๋ฐฐ์›Œ๊ฐ€์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ๊ฑธ์–ด๊ฐ€๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2022๋…„ 7์›” 23์ผ

๋Œ€๋‹จํ•ฉ๋‹ˆ๋‹ค ์ฃผ์•”๋‹˜... ๐Ÿ‘

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ