1๏ธโฃ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฝ๋ฐฑ(์ฝ๋ฐฑ ํจ์)์ด ๋ฌด์์ธ์ง ์ค๋ช ํด ์ฃผ์ธ์.
๐ท๏ธ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฝ๋ฐฑ ํจ์๋ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋์ด, ํด๋น ํจ์๊ฐ ์์ ์ ์๋ฃํ ํ ํธ์ถ๋๋ "๋์ค์ ํธ์ถ๋ ํจ์"์ ๋๋ค.
// ๊ฐ ๋ฐฐ์ด์ ์์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถ
const numbers = [1,2,3,4,5];
numbers.forEach((number)=> console.log(number));
์ฝ๋ฐฑ ํจ์์ ๋ฌธ์ ์
๋ง์ ์ฝ๋ฐฑ ํจ์๊ฐ ์ค์ฒฉ๋๋ฉด ์ฝ๋๊ฐ ๋ณต์กํ๊ณ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด 'Promise', 'async/await'๊ณผ ๊ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋ฉ๋๋ค.
2๏ธโฃ ๋ฐฐ์ด์ ์๋ filter, map๊ณผ ๊ฐ์ ๋ฉ์๋์ ์๋ ์ฝ๋ฐฑ๊ณผ setTimeout์ ์๋ ์ฝ๋ฐฑ์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
๐ท๏ธ filter๋ map๊ณผ ๊ฐ์ ๋ฉ์๋์ ์๋ ์ฝ๋ฐฑ์ “๋๊ธฐ ์คํ๋๋ ์ฝ๋ฐฑ”์ ๋๋ค. ์ฆ, ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฝ๋ฐฑ ํจ์๊ฐ ์ฆ์ ํธ์ถ๋ฉ๋๋ค.
๐ท๏ธ setTimeout์ ์๋ ์ฝ๋ฐฑ์ “๋น๋๊ธฐ ์คํ๋๋ ์ฝ๋ฐฑ”์ ๋๋ค. ์ค์ ํ ์ง์ฐ ์๊ฐ ํ์ ์ฝ๋ฐฑ ํจ์๊ฐ ํธ์ถ๋๋ฉฐ, ์ด ๊ณผ์ ๋์ ๋ค๋ฅธ ์ฝ๋๊ฐ ์คํ๋ ์ ์์ต๋๋ค.
3๏ธโฃ ๋๊ธฐ ๋น๋๊ธฐ ์คํ์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
๐ท๏ธ ๋๊ธฐ ์คํ์ ์ฝ๋๊ฐ ์์์ ์๋ ์์๋๋ก ์์ฐจ์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ํ์ฌ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๋ค์ ์์ ์ด ์์๋์ง ์์ต๋๋ค.
๐ท๏ธ ๋น๋๊ธฐ ์คํ์ ํ์ฌ ์์ ์ด ์๋ฃ๋์ง ์๋๋ผ๋ ๋ค๋ฅธ ์์ ์ ์งํํ ์ ์์ต๋๋ค.
๋น๋๊ธฐ ์คํ์ ์ถ๊ฐ ๊ฐ๋ ๋ค
- Promise : ๋น๋๊ธฐ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ค์ ๋ฐ์ ์ ์๋๋ก ํ๋ ๊ฐ์ฒด, 'resolve'์ 'reject'๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ฑ๊ณต ์คํจ๋ฅผ ์ฒ๋ฆฌ
- async/await : Promise ๊ธฐ๋ฐ์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ณ ๋๊ธฐ์ ์ธ ์ฝ๋์ฒ๋ผ ์์ฑํ ์ ์๋๋ก ํ๋ ๋ฌธ๋ฒ
4๏ธโฃ HTTP ๋ฉ์๋๋ค์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
1. GET
- ์ค๋ช : ์๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ์กฐํํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฒ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํฉ๋๋ค.
- ์ฉ๋: ์น ํ์ด์ง๋ฅผ ๋ก๋ํ๊ฑฐ๋, ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ํน์ง: ์์ฒญ URL์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ์ ์์ง๋ง, ๋ณธ๋ฌธ(body)์ ํฌํจ๋์ง ์์ต๋๋ค. ์์ฒญ์ด ์บ์๋ ์ ์์ผ๋ฉฐ, URL ๊ธธ์ด ์ ํ์ด ์์ต๋๋ค.
- ์์: GET /users/123๋ ID๊ฐ 123์ธ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์์ฒญํ๋ ๊ฒ์ ๋๋ค.
2. POST
- ์ค๋ช : ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ์ฌ ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ์๋ฒ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฉ๋: ํผ ์ ์ถ, ๋ฐ์ดํฐ ์์ฑ ์์ฒญ, ์๋ฒ์ ์ ๋ณด๋ฅผ ๋ณด๋ผ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ํน์ง: ์์ฒญ ๋ณธ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ, ์์ฒญ์ด ์๋ฒ์ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ์บ์๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ์์: POST /users๋ ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ์ถํ๋ ๊ฒ์ ๋๋ค.
3. PUT
- ์ค๋ช : ์๋ฒ์ ํน์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ์๋ก ์์ฑํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ณตํ ๋ฐ์ดํฐ๋ก ๋ฆฌ์์ค๋ฅผ ๋์ฒดํฉ๋๋ค.
- ์ฉ๋: ํน์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธํ๊ฑฐ๋, ๋ฆฌ์์ค๊ฐ ์์ ๊ฒฝ์ฐ ์๋ก ์์ฑํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ํน์ง: ์์ฒญ ๋ณธ๋ฌธ์ ์ ๋ฐ์ดํธํ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ฉฐ, ์์ฒญํ URI๊ฐ ๋ฆฌ์์ค๋ฅผ ์๋ณํฉ๋๋ค.
- ์์: PUT /users/123๋ ID๊ฐ 123์ธ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์๋ก์ด ๋ฐ์ดํฐ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
4. DELETE
- ์ค๋ช : ์๋ฒ์์ ํน์ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฉ๋: ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์ ๊ฑฐํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ํน์ง: ์ญ์ ํ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ URI๋ฅผ ์์ฒญํ๋ฉฐ, ์์ฒญ ๋ณธ๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ํฌํจ๋์ง ์์ต๋๋ค.
- ์์: DELETE /users/123๋ ID๊ฐ 123์ธ ์ฌ์ฉ์๋ฅผ ์ญ์ ํ๋ ์์ฒญ์ ๋๋ค.
5. PATCH
- ์ค๋ช : ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ ์ฒด ๋ฆฌ์์ค๋ฅผ ๋์ฒดํ๋ ๊ฒ์ด ์๋๋ผ, ํน์ ํ๋๋ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธํฉ๋๋ค.
- ์ฉ๋: ๋ฆฌ์์ค์ ์ผ๋ถ๋ฅผ ์์ ํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ํน์ง: ์์ฒญ ๋ณธ๋ฌธ์ ์ ๋ฐ์ดํธํ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ง ํฌํจ๋ฉ๋๋ค.
- ์์: PATCH /users/123์ ํจ๊ป ์ ๊ณต๋๋ ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ์ ํ๋กํ์ ์ผ๋ถ๋ง ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๋๋ค.
6. OPTIONS
- ์ค๋ช : ์๋ฒ๊ฐ ์ง์ํ๋ HTTP ๋ฉ์๋๋ ์์ฒญ์ ๋ํ ์ต์ ์ ์กฐํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฒ๊ฐ ์ง์ํ๋ ๋ฉ์๋๋ ๊ธฐ๋ฅ์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- ์ฉ๋: CORS(Cross-Origin Resource Sharing) ์์ฒญ์์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ํน์ง: ์์ฒญ ๋ณธ๋ฌธ์ด ์์ผ๋ฉฐ, ์๋ฒ๊ฐ ์ง์ํ๋ ๋ฉ์๋๋ ๊ธฐ๋ฅ์ ํ์ธํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ์์: OPTIONS /users๋ /users ๋ฆฌ์์ค์ ๋ํด ์๋ฒ๊ฐ ์ง์ํ๋ ๋ฉ์๋๋ฅผ ์กฐํํ๋ ์์ฒญ์ ๋๋ค.
7. HEAD
- ์ค๋ช : GET ์์ฒญ๊ณผ ์ ์ฌํ์ง๋ง, ์๋ต ๋ณธ๋ฌธ์ด ์์ต๋๋ค. ์ฃผ๋ก ํค๋ ์ ๋ณด๋ฅผ ์ป์ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฉ๋: ๋ฆฌ์์ค์ ๋ฉํ๋ฐ์ดํฐ๋ ํค๋ ์ ๋ณด๋ง ํ์ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ํน์ง: ๋ณธ๋ฌธ(body)์ ํฌํจ๋์ง ์์ผ๋ฉฐ, ์ํ ์ฝ๋์ ํค๋๋ง ํฌํจ๋ฉ๋๋ค.
- ์์: HEAD /users/123๋ ID๊ฐ 123์ธ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด์ ํค๋๋ง ์์ฒญํ๋ ๊ฒ์ ๋๋ค.
8. TRACE
- ์ค๋ช : ์์ฒญ์ด ์๋ฒ๋ฅผ ํตํด ์ด๋ป๊ฒ ์ ๋ฌ๋๋์ง๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ฃผ๋ก ๋๋ฒ๊น ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฉ๋: ์์ฒญ์ด ์๋ฒ๋ฅผ ํตํด ์ด๋ป๊ฒ ์ ๋ฌ๋๋์ง ํ์ธํ๊ณ , ์ง๋จ ์ ๋ณด(๋๋ฒ๊น )๋ฅผ ์์งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ํน์ง: ๋ณด์์์ ์ด์ ๋ก ๋๋ถ๋ถ์ ์๋ฒ์์ ๋นํ์ฑํ๋์ด ์์ต๋๋ค.
- ์์: TRACE /๋ ์์ฒญ์ ๊ฒฝ๋ก๋ฅผ ์๋ฒ์์ ํ์ธํ๋ ์์ฒญ์ ๋๋ค.
9. CONNECT
- ์ค๋ช : ์ฃผ๋ก ํ๋ก์ ์๋ฒ๋ฅผ ํตํด TCP ์ฐ๊ฒฐ์ ์๋ฆฝํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. HTTPS์ ๊ฐ์ ์ํธํ๋ ํต์ ์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฉ๋: ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํฐ๋์ ์ค์ ํ์ฌ ๋ณด์ ์ฐ๊ฒฐ์ ์๋ฆฝํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ํน์ง: ์ผ๋ฐ์ ์ผ๋ก HTTP ํ๋กํ ์ฝ๊ณผ๋ ๋ค๋ฅด๊ฒ ๋์ํ๋ฉฐ, TCP ์ฐ๊ฒฐ์ ์ง์ ์ ์ผ๋ก ์ค์ ํฉ๋๋ค.
- ์์: CONNECT example.com:443์ example.com์ 443๋ฒ ํฌํธ๋ก ์ฐ๊ฒฐ์ ์๋ฆฝํ๋ ์์ฒญ์ ๋๋ค.
5๏ธโฃ GET ์์ฒญ๊ณผ POST ์์ฒญ์ ๋น๊ตํด ์ค๋ช ํด ์ฃผ์ธ์.
1. GET ์์ฒญ
GET ์์ฒญ์ ์ฃผ๋ก ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฒ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํฉ๋๋ค.
ํน์ง
- ๋ชฉ์ : ๋ฆฌ์์ค ์กฐํ. ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์์ฒญ ๋ณธ๋ฌธ: GET ์์ฒญ์ ์์ฒญ ๋ณธ๋ฌธ(body)์ ํฌํจํ์ง ์์ต๋๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๋ URL์ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ํตํด ์ ๋ฌ๋ฉ๋๋ค.
- URL: ์์ฒญ ๋ฐ์ดํฐ๋ URL์ ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, GET /search?query=example๊ณผ ๊ฐ์ ํํ์ ๋๋ค.
- ์บ์ฑ: GET ์์ฒญ์ ์ผ๋ฐ์ ์ผ๋ก ์บ์๋ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ ์บ์๋ฅผ ํ์ฉํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค.
- ๋ถ๋งํฌ: GET ์์ฒญ์ URL์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋๋ฏ๋ก ๋ถ๋งํฌํ๊ฑฐ๋ ๊ณต์ ํ ์ ์์ต๋๋ค.
- ์ ํ: URL ๊ธธ์ด ์ ํ์ด ์์ผ๋ฉฐ, ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
2. POST ์์ฒญ
POST ์์ฒญ์ ์ฃผ๋ก ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ๊ฑฐ๋ ์๋ฒ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ์ดํฐ ์ ์ถ์ ํตํด ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
ํน์ง
- ๋ชฉ์ : ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ๊ฑฐ๋ ๋ฆฌ์์ค๋ฅผ ์์ฑ ๋ฐ ์ ๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์์ฒญ ๋ณธ๋ฌธ: POST ์์ฒญ์ ์์ฒญ ๋ณธ๋ฌธ(body)์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค. ์ด ๋ฐ์ดํฐ๋ ์์ฒญ์ ๋ณธ๋ฌธ์ ํฌํจ๋์ด URL์๋ ๋ํ๋์ง ์์ต๋๋ค.
- URL: ๋ฐ์ดํฐ๋ URL์ด ์๋ ์์ฒญ ๋ณธ๋ฌธ์ ํตํด ์ ๋ฌ๋ฉ๋๋ค.
- ์บ์ฑ: POST ์์ฒญ์ ์ผ๋ฐ์ ์ผ๋ก ์บ์๋์ง ์์ต๋๋ค. ์์ฒญ์ด ์๋ฒ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์, ์บ์๊ฐ ์ํํ ์ ์์ต๋๋ค.
- ๋ถ๋งํฌ: POST ์์ฒญ์ URL์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ง ์์ผ๋ฏ๋ก ๋ถ๋งํฌํ๊ฑฐ๋ ๊ณต์ ํ ์ ์์ต๋๋ค.
- ์ ํ: URL ๊ธธ์ด ์ ํ์ด ์์ผ๋ฉฐ, ๋ณธ๋ฌธ์ ํฐ ์์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
์์ฝ
- GET ์์ฒญ:
- ๋ชฉ์ : ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ์์ฒญ ๋ณธ๋ฌธ: ์์. ๋ฐ์ดํฐ๋ URL์ ์ฟผ๋ฆฌ ๋ฌธ์์ด๋ก ์ ๋ฌ๋ฉ๋๋ค.
- ์บ์ฑ: ๊ฐ๋ฅ.
- ๋ถ๋งํฌ: ๊ฐ๋ฅ.
- ์ ํ: URL ๊ธธ์ด ์ ํ ์์.
- POST ์์ฒญ:
- ๋ชฉ์ : ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ๊ฑฐ๋ ์๋ฒ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ์์ฒญ ๋ณธ๋ฌธ: ๋ฐ์ดํฐ๊ฐ ์์ฒญ ๋ณธ๋ฌธ์ ํฌํจ๋ฉ๋๋ค.
- ์บ์ฑ: ์ผ๋ฐ์ ์ผ๋ก ๋ถ๊ฐ๋ฅ.
- ๋ถ๋งํฌ: ๋ถ๊ฐ๋ฅ.
- ์ ํ: URL ๊ธธ์ด ์ ํ ์์.
6๏ธโฃ ๋ธ๋ผ์ฐ์ ๋๋ Node.js ํ๊ฒฝ์์ ๋น๋๊ธฐ ํจ์์ ์ฝ๋ฐฑ์ด ์คํ๋๋ ์๋ฆฌ์ ๋ํด setTimeout ์ ์๋ก ๋ค์ด ์ค๋ช ํด ์ฃผ์ธ์.
๋น๋๊ธฐ ํจ์์ ์ฝ๋ฐฑ์ ์คํ ์๋ฆฌ
๋น๋๊ธฐ ํจ์๋ ์ฃผ๋ก ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์์ ์ด ์๋ฃ๋ ํ์ ํน์ ์์ ์ ์ํํ๋๋ก ํฉ๋๋ค. setTimeout์ ๋น๋๊ธฐ ์์ ์ ๋ค๋ฃจ๋ ๊ฐ์ฅ ๊ฐ๋จํ ์์ ์ค ํ๋์ ๋๋ค. ์ด ํจ์๋ ์ผ์ ์๊ฐ์ด ์ง๋ ํ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
1. ๋ธ๋ผ์ฐ์ ์์์ ๋์ ์๋ฆฌ
๋ธ๋ผ์ฐ์ ์์์ ๋น๋๊ธฐ ํจ์, ์๋ฅผ ๋ค์ด setTimeout,์ ๋ค์๊ณผ ๊ฐ์ ์๋ฆฌ๋ก ๋์ํฉ๋๋ค:
- ์ฝ๋ฐฑ ๋ฑ๋ก: setTimeout์ ํธ์ถํ๋ฉด, ์ง์ ๋ ์๊ฐ ํ์ ํธ์ถ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฑ๋กํฉ๋๋ค. ์ด๋, setTimeout์ ์น ๋ธ๋ผ์ฐ์ ์ ํ์ด๋จธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์๊ฐ ์ง์ฐ์ ์ค์ ํฉ๋๋ค.
- ํ์ด๋จธ ์ค์ : ๋ธ๋ผ์ฐ์ ๋ ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ณ , ํ์ด๋จธ๊ฐ ๋๋๋ฉด ์ฝ๋ฐฑ ํจ์๋ฅผ ์ด๋ฒคํธ ํ(Event Queue)์ ๋ฃ์ต๋๋ค.
- ์ด๋ฒคํธ ๋ฃจํ: ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ ์ค๋ ๋๋ ํ๋์ ๋ฉ์ธ ์ค๋ ๋์์ ๋์ํ๋ฉฐ, ์ด ์ค๋ ๋๋ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)๋ผ๋ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฒคํธ ๋ฃจํ๋ ํธ์ถ ์คํ(Call Stack)๊ณผ ์ด๋ฒคํธ ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ์ฝ๋ฐฑ ์คํ: ํธ์ถ ์คํ์ด ๋น์ด ์๋ ์ํ์์ ์ด๋ฒคํธ ๋ฃจํ๋ ์ด๋ฒคํธ ํ์ ์๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถ ์คํ์ผ๋ก ์ฎ๊น๋๋ค. ์ด ๋, ์ฝ๋ฐฑ ํจ์๊ฐ ์คํ๋ฉ๋๋ค.
console.log('์์');
setTimeout(function() {
console.log('ํ์ด๋จธ ์๋ฃ');
}, 2000);
console.log('๋');
- console.log('์์')๊ณผ console.log('๋')์ ์ฆ์ ํธ์ถ ์คํ์์ ์คํ๋ฉ๋๋ค.
- setTimeout์ ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ณ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ด๋ฒคํธ ํ์ ์ถ๊ฐํฉ๋๋ค.
- 2์ด ํ์, ํ์ด๋จธ๊ฐ ์๋ฃ๋๋ฉด ์ฝ๋ฐฑ ํจ์๊ฐ ์ด๋ฒคํธ ํ์ ์ถ๊ฐ๋ฉ๋๋ค.
- ํธ์ถ ์คํ์ด ๋น์ด ์์ ๋ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์ด ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถ ์คํ์ผ๋ก ์ฎ๊ธฐ๊ณ , ์ฝ๋ฐฑ ํจ์๊ฐ ์คํ๋ฉ๋๋ค.
2. Node.js์์์ ๋์ ์๋ฆฌ
Node.js๋ ๋น๋๊ธฐ I/O๋ฅผ ์ฒ๋ฆฌํ๋ ์๋ฒ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ์ผ๋ก, setTimeout๊ณผ ๋น์ทํ ๋ฐฉ์์ผ๋ก ๋์ํ์ง๋ง ๋ด๋ถ ๋ฉ์ปค๋์ฆ์๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
- ์ฝ๋ฐฑ ๋ฑ๋ก: Node.js์ setTimeout์ ๋ด๋ถ์ ์ผ๋ก ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ณ ์ฝ๋ฐฑ ํจ์๋ฅผ ํ์ด๋จธ ํธ๋ค๋ฌ(Timer Handler) ํ์ ์ถ๊ฐํฉ๋๋ค.
- ํ์ด๋จธ ์ค์ : Node.js์ ์ด๋ฒคํธ ๋ฃจํ๋ C++์ libuv ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ตฌํ๋๋ฉฐ, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
- ์ด๋ฒคํธ ๋ฃจํ: Node.js์ ์ด๋ฒคํธ ๋ฃจํ๋ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋์ด ์์ผ๋ฉฐ, ๊ฐ ๋จ๊ณ์์ ํ์ ์๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํฉ๋๋ค. ํ์ด๋จธ ์ฝ๋ฐฑ ํจ์๋ ํ์ด๋จธ ๋จ๊ณ์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ์ฝ๋ฐฑ ์คํ: ์ด๋ฒคํธ ๋ฃจํ๊ฐ ํ์ด๋จธ ๋จ๊ณ์ ๋๋ฌํ๋ฉด, ์ค์ ๋ ์๊ฐ ํ์ ํ์ด๋จธ ํธ๋ค๋ฌ ํ์ ์๋ ์ฝ๋ฐฑ ํจ์๊ฐ ํธ์ถ ์คํ์ผ๋ก ์ฎ๊ฒจ์ ธ ์คํ๋ฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ ๋์ผํ๊ฒ, console.log('์์')๊ณผ console.log('๋')์ ์ฆ์ ์คํ๋ฉ๋๋ค.
- setTimeout์ ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ณ ์ฝ๋ฐฑ ํจ์๋ฅผ ํ์ด๋จธ ํธ๋ค๋ฌ ํ์ ์ถ๊ฐํฉ๋๋ค.
- 2์ด ํ์ ํ์ด๋จธ ํธ๋ค๋ฌ ํ์ ์๋ ์ฝ๋ฐฑ ํจ์๊ฐ ํธ์ถ ์คํ์ผ๋ก ์ด๋ํ์ฌ ์คํ๋ฉ๋๋ค.
7๏ธโฃ ๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ https://www.~ ์ ์ ๋ ฅํ๊ณ ํ๋ฉด์ ํ์๋๊ธฐ ๊น์ง ํต์ , ๋ ๋๋ง ๊ณผ์ ์ ์ค๋ช ํด ์ฃผ์ธ์.
1. ์์ฒญ-์๋ต ๊ณผ์
- URL ์
๋ ฅ ๋ฐ ์์ฒญ ์์ฑ:
- ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ฃผ์์ฐฝ์ URL์ ์ ๋ ฅํ๊ณ Enter๋ฅผ ๋๋ฅด๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์ ๋ ฅ๋ URL์ ๊ธฐ๋ฐ์ผ๋ก HTTP ์์ฒญ์ ์์ฑํฉ๋๋ค.
- URL์ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญํ ์๋ฒ์ ์ฃผ์์ ๋ฆฌ์์ค๋ฅผ ์๋ณํฉ๋๋ค.
- DNS ์กฐํ:
- ๋ธ๋ผ์ฐ์ ๋ URL์์ ๋๋ฉ์ธ ์ด๋ฆ์ ์ถ์ถํ๊ณ , ์ด ๋๋ฉ์ธ์ IP ์ฃผ์๋ก ๋ณํํ๊ธฐ ์ํด DNS(๋๋ฉ์ธ ๋ค์ ์์คํ ) ์กฐํ๋ฅผ ์ํํฉ๋๋ค.
- DNS ์๋ฒ๋ ๋๋ฉ์ธ ์ด๋ฆ์ ํด๋นํ๋ IP ์ฃผ์๋ก ๋ณํํฉ๋๋ค.
- TCP ์ฐ๊ฒฐ:
- ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ IP ์ฃผ์๋ก TCP ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค. ์ด ๊ณผ์ ์ 3-way ํธ๋์ ฐ์ดํฌ(์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ฐ๊ฒฐ ์๋ฆฝ ๊ณผ์ )๋ฅผ ํฌํจํฉ๋๋ค.
- HTTP ์์ฒญ ์ ์ก:
- ๋ธ๋ผ์ฐ์ ๋ TCP ์ฐ๊ฒฐ์ ํตํด ์๋ฒ์ HTTP ์์ฒญ์ ์ ์กํฉ๋๋ค. ์ด ์์ฒญ์ ์น ํ์ด์ง๋ฅผ ์์ฒญํ๋ GET ์์ฒญ์ผ ์ ์์ต๋๋ค.
- ์๋ฒ ์๋ต:
- ์๋ฒ๋ ์์ฒญ์ ์์ ํ๊ณ , ์์ฒญ๋ ๋ฆฌ์์ค(์: HTML ๋ฌธ์)๋ฅผ ์ฒ๋ฆฌํ์ฌ HTTP ์๋ต์ ์์ฑํฉ๋๋ค.
- HTTP ์๋ต์๋ ์ํ ์ฝ๋, ํค๋, ๋ณธ๋ฌธ(HTML ๋ฌธ์ ๋ฑ)์ด ํฌํจ๋ฉ๋๋ค.
- ์๋ต ์์ :
- ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ๋ก๋ถํฐ HTTP ์๋ต์ ์์ ํ๊ณ , ์๋ต์ ์ํ ์ฝ๋๋ฅผ ํ์ธํ์ฌ ์์ฒญ์ด ์ฑ๊ณตํ๋์ง ํ์ธํฉ๋๋ค.
- ์๋ต ๋ณธ๋ฌธ(HTML, CSS, JavaScript ๋ฑ)์ ์ดํ ๋ ๋๋ง ๊ณผ์ ์์ ์ฌ์ฉ๋ฉ๋๋ค.
2. ๋ ๋๋ง ๊ณผ์
- HTML ํ์ฑ:
- ๋ธ๋ผ์ฐ์ ๋ ์๋ต์ผ๋ก ๋ฐ์ HTML ๋ฌธ์๋ฅผ ํ์ฑํ์ฌ DOM(Document Object Model) ํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- DOM์ HTML ๋ฌธ์์ ๊ตฌ์กฐ์ ์ฝํ ์ธ ๋ฅผ ๊ณ์ธต์ ์ผ๋ก ํํํ ๊ฒ์ ๋๋ค.
- CSS ํ์ฑ:
- HTML ๋ฌธ์์ ํจ๊ป ์ ๊ณต๋ CSS ํ์ผ์ ํ์ฑํ์ฌ CSSOM(CSS Object Model) ํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- CSSOM์ ์คํ์ผ ๊ท์น์ ์ ์ฉํ ์์์ ์คํ์ผ์ ์ ์ํฉ๋๋ค.
- DOM๊ณผ CSSOM ๊ฒฐํฉ:
- DOM ํธ๋ฆฌ์ CSSOM ํธ๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ฌ **๋ ๋ ํธ๋ฆฌ(Render Tree)**๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ ๋ ํธ๋ฆฌ๋ ํ๋ฉด์ ํ์๋ ์ฝํ ์ธ ์ ํด๋น ์ฝํ ์ธ ์ ์คํ์ผ์ ์ ์ํฉ๋๋ค.
- ๋ ์ด์์ ๊ณ์ฐ:
- ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ์์์ ์ ํํ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด ๊ณผ์ ์ ๋ ์ด์์(Layout) ๋๋ **๋ฆฌํ๋ก์ฐ(Reflow)**๋ผ๊ณ ํฉ๋๋ค.
- ํ์ธํ
(Painting):
- ๋ ์ด์์ ๊ณ์ฐ์ด ์๋ฃ๋๋ฉด ๊ฐ ์์๋ฅผ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ์ํด **ํ์ธํ (Painting)**์ด ์ํ๋ฉ๋๋ค.
- ์ด ๊ณผ์ ์์ ํ ์คํธ, ์ด๋ฏธ์ง, ๋ฐฐ๊ฒฝ ๋ฑ์ด ํ๋ฉด์ ๊ทธ๋ ค์ง๋๋ค.
- ์คํฌ๋ฆฝํธ ์คํ:
- ํ์ด์ง์ ํฌํจ๋ JavaScript๊ฐ ์คํ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ DOM์ ์์ ํ๊ฑฐ๋ ์คํ์ผ์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ์ด๋ฌํ ๋ณ๊ฒฝ์ ๋ ์ด์์๊ณผ ํ์ธํ ๊ณผ์ ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ํ ๋ค์ ๋ ์ด์์๊ณผ ํ์ธํ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
ํต์ ๊ณผ์
์ฌ์ฉ์๊ฐ ์ฃผ์์ฐฝ์ URL์ ์ ๋ ฅํ๋ฉด, DNS ์กฐํ๋ฅผ ํด์ ์์ฒญํ ํ์ด์ง์ ์์์ด ์ด๋์ ์์น ํ๋์ง ์ฐพ์ต๋๋ค. https://www.codeit.kr ์ ์ฃผ์์ฐฝ์ ์ ๋ ฅํ๋ค๋ฉด, DNS์กฐํ๋ฅผ ํตํด HTMLํ์ด์ง๊ฐ ์๋ IP ์ฃผ์ 50.123.123.12 ๋ฅผ ์์๋ ๋๋ค.
IP ์ฃผ์๋ฅผ ์๊ณ ๋ ๋ค, ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ TCP ํธ๋์์ดํฌ๋ฅผ ํตํด ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค. HTTPS๋ฅผ ์ด์ฉํ ๋ณด์์ฑ์๋ ์ฐ๊ฒฐ์ ์ํด์๋ TLS ํ์๋ ํ์ํฉ๋๋ค.
์น์๋ฒ๋ก ํ ๋ฒ ์ฐ๊ฒฐ์ด ์ฑ๋ฆฝ๋๊ณ ๋๋ฉด, ์ด์ ๋ธ๋ผ์ฐ์ ๋ HTTP GET request๋ฅผ ๋ณด๋ ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ๋ฅผ ๋ฐ์ผ๋ฉด, ์์ ๋ ์ ๋ณด๋ฅผ ๋ถ์ํ๊ณ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ธฐ๊น์ง ๋ ๋๋ง ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
๋ ๋๋ง ๊ณผ์
DOM(Document Object Model), CSSOM(CSS Object Model) ์์ฑ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ HTML, CSS๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ต๋๋ค. ์ด ๋ HTML, CSS ํ์ผ์ ๋จ์ํ ํ ์คํธ์ด๋ฏ๋ก ์ฐ์ฐ๊ณผ ๊ด๋ฆฌ๋ฅผ ์ํด Parser๋ฅผ ํตํด Object Model๋ก ๋ง๋ญ๋๋ค. HTML์ DOM Tree๋ก CSS๋ CSSOM Tree๋ก ๋ง๋ญ๋๋ค.
1. Render Tree ์์ฑ DOM๊ณผ CSSOM์ผ๋ก Render Tree๋ฅผ ์์ฑํฉ๋๋ค. Render Tree์๋ ์คํ์ผ ์ ๋ณด๊ฐ ์ค์ ๋์ด ์์ผ๋ฉฐ, ์ค์ ํ๋ฉด์ ํํ๋๋ ๋ ธ๋๋ค๋ก๋ง ๊ตฌ์ฑ๋ฉ๋๋ค.
2. Layout Render Tree ๋ ธ๋๋ค์ด ๊ฐ์ง๊ณ ์๋ ์คํ์ผ๊ณผ ์์ฑ์ ๋ฐ๋ผ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ์ด๋ ์์น์ ์ด๋ค ํฌ๊ธฐ๋ก ์ถ๋ ฅํ ์ง ๊ณ์ฐํฉ๋๋ค.
3. Paint Layout ๊ณ์ฐ์ด ์๋ฃ๋๋ฉด ์์๋ค์ ์ค์ ํ๋ฉด์ ๊ทธ๋ฆฝ๋๋ค. ์ด์ ๋จ๊ณ์์ ์์๋ค์ ์์น์ ํฌ๊ธฐ, ์คํ์ผ ๊ณ์ฐ์ด ์๋ฃ๋ Render Tree๋ฅผ ์ด์ฉํด ์ค์ ๊ฐ์ ์ฑ์ ๋ฃ์ต๋๋ค. ์ด ๋ ํ ์คํธ, ์, ์ด๋ฏธ์ง, ๊ทธ๋ฆผ์ ํจ๊ณผ ๋ฑ์ ๋ชจ๋ ์ฒ๋ฆฌํด ๊ทธ๋ฆฝ๋๋ค.
์ ์ฒด ํ๋ฆ ์์ฝ
- ์ฌ์ฉ์ ์ ๋ ฅ: URL์ ์ ๋ ฅํ๊ณ Enter๋ฅผ ๋๋ฌ ์์ฒญ์ ์์ํฉ๋๋ค.
- DNS ์กฐํ: ๋๋ฉ์ธ ์ด๋ฆ์ IP ์ฃผ์๋ก ๋ณํํฉ๋๋ค.
- TCP ์ฐ๊ฒฐ: ์๋ฒ์์ ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค.
- HTTP ์์ฒญ: ์๋ฒ์ ์์ฒญ์ ์ ์กํฉ๋๋ค.
- ์๋ฒ ์๋ต: ์๋ฒ๊ฐ ์๋ต์ ๋ฐํํฉ๋๋ค.
- HTML ํ์ฑ: HTML์ ํ์ฑํ์ฌ DOM ํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- CSS ํ์ฑ: CSS๋ฅผ ํ์ฑํ์ฌ CSSOM ํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ ๋ ํธ๋ฆฌ ์์ฑ: DOM๊ณผ CSSOM์ ๊ฒฐํฉํ์ฌ ๋ ๋ ํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ ์ด์์ ๊ณ์ฐ: ๊ฐ ์์์ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ํ์ธํ : ํ๋ฉด์ ์ฝํ ์ธ ๋ฅผ ๊ทธ๋ฆฝ๋๋ค.
- ์คํฌ๋ฆฝํธ ์คํ: ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ด ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
'๐ก ์์๋๋ฉด ์ข์ ๊ฒ๋ค > ๊ฐ๋ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก ํธ์๋ ๊ฐ๋ ] - ์นํ์ด์ง ๋ ๋๋ง ๋ฐฉ์ (0) | 2024.09.26 |
---|---|
[๋น๋๊ธฐ ์์ ๋๊ตฌ] - Promise, fetch, async/await, axios์ ๋ํด์ ์์๋ณด์ (0) | 2024.08.19 |