Node.js๋ฅผ ๊ฐ๋ฐํ ๋ผ์ด์ธ ๋ฌ(Ryan Dahl) ์ ์ง๋ 2018๋ 6์ Javascript ์ต๋ ์ฝํผ๋ฐ์ค์ธ JSConf 2018์์
10 Things I Regret About Node.js ์ ๋ฐํํ์์ต๋๋ค. ๊ทธ ํ Node.js๋ฅผ ๊ฐ๋ฐํ๋ฉด์ ์๊ฒผ๋ ํํ๋ฅผ ๋ฐํ์ผ๋ก ์๋ก์ด ์๋ฒ ์ฌ์ด๋ ๋ฐํ์์ธ Deno.js๋ฅผ ๋ฐํํ์์ต๋๋ค. (Node์์ de๋ฅผ no ์์ ์ด๊ฑด๋ฐ ์ด๊ฑฐ ๋์น์ฑ๊ณ ์๋ฆ์ด.. )
๋ผ์ด์ธ ๋ฌ์ Node.js ๋ง๋ค๋ฉด์ ์ด๋ฒคํธ ๊ธฐ๋ฐ HTTP ์๋ฒ(Event driven HTTP server)์ ์๋นํ ๋ง์ ์ฌํ์ ๊ธฐ์ธ์์ต๋๋ค. ์ค์ ๋ก Node.js๋ฅผ ๋ง๋ค๋ ๊ฐ์ฅ ์ค์ํ๊ฒ ์๊ฐํ๋ ๊ฒ์ด ์ด๋ฒคํธ ๊ธฐ๋ฐ HTTP ์๋ฒ๋ผ๊ณ ํฉ๋๋ค. ์ด์ ๋ํด์๋ ์ฌ์ ํ Node๋ ์ข์ ์๋ฒ ์ฌ์ด๋ ๋ฐํ์์ด๋ผ๊ณ ๋งํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ 2012๋ ๋ผ์ด์ธ ๋ฌ์ด Node๋ฅผ ๋ ๋๋ฉด์ Node๊ฐ
- HTTP, HTTPS์ ๊ฐ์ ํ๋กํ ์ฝ ์ง์
- IOCP๋ผ๋ ์์คํ ์ฝ์ ์ฌ์ฉํ์ฌ windows์ ๋ ธ๋๋ฅผ porting ๊ฐ๋ฅ
- Linux์ Mac์์๋ ๋ฌด๋ฆฌ ์์ด ์๋
- API๋ ์์ ์ ์ด๋ฉด์ NPM์ ๋ฑ์ฅ์ผ๋ก ์ฌ๋๋ค์ด ์์ ๋กญ๊ฒ ๋ชจ๋๋ ์ถ๊ฐ ๊ฐ๋ฅ
๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ํ ์ ์์๊ธฐ์ ๋ผ์ด์ธ ๋ฌ์ "Node ํ๋ก์ ํธ ์๋ฃ" ๋ฅผ ์ ์ธํ๋ค๊ณ ํฉ๋๋ค. ํ์ง๋ง ์ด๋ ๋ผ์ด์ธ ๋ฌ์ ์ฐฉ๊ฐ์ด์์ฃ . ํ๋ฌผ๋ฉฐ ๋ณธ์ธ์ด ๋ง๋ค์์์๋ ๋ถ๊ตฌํ๊ณ Node๋ณด๋ค Go Language๊ฐ ๋ ์ข์ผ๋ Go๋ฅผ ์ฌ์ฉ ํ๋ผ๊ณ ๋งํฉ๋๋ค.
(10๊ฐ์ง ํํ ์ค ํ๋๊ฐ Promise๋ฅผ ์ฌ์ฉ ์ํ ๊ฒ์ธ๋ฐ Go๋ ์ด์ ๋ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฐธ๊ณ ์ฌ์ดํธ )
์ด์ ๋ง Node๋ฅผ ๊ณต๋ถํด๊ฐ๋ฉด์ ์ฌ๋ฏธ๋ฅผ ๋ถ์ด๊ณ ์๋๋ฐ ๋ง๋ ๊ฐ๋ฐ์๊ฐ ์์ข์ผ๋ ์ฐ์ง๋ง๋ผ๊ณ ํ๋๋ฐ ์ฐธ ์์ธํ๋๋ผ๊ณ ์ ใ ใ ใ
์ด์ด์ ๋ผ์ด์ธ ๋ฌ์ Node๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋น์ ํฉ๋๋ค.
๋ญ๊ฐ ๋ฒ๊ทธ๋ฅผ ๋ง๋ ๊ฒ ๋ณด์ด๋ ๋ฐ ์ง๊ธ ๋น์ฅ์ ๊ทธ๊ฒ ๋ฒ๊ทธ ๊ฐ์ง ์๊ฒ ๋์ํ์ฌ ํฐ ๋ฌธ์ ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค. ํ์ง๋ง ๋ฒ๊ทธ๋ ๋ฒ๊ทธ์ธ๊ฑฐ์ฃ . ๊ทธ๋ฆฌ๊ณ ์ค๊ณ์์ ๊ฒฐํจ์ด ์๋ ๊ฑธ ์๋ฉด์๋ ์ง๊ธ์ ๊ทธ๊ฒ์ ๊ณ ์น ์๊ฐ ์์ต๋๋ค. ์๋ ์ด๋ฏธ ๋๋ฌด ๋ง์ ์ํํธ์จ์ด์์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ผ Node๋ฅผ ๋ง๋ค๋ฉด์ ์์ฌ์์ด ๋จ์๋ ๋ผ์ด์ธ ๋ฌ์ ํํ๋ ์ด๋ค ๊ฒ๋ค์ด ์์๊น์?
(10๊ฐ์ง๋ผ๊ณ ๋ ํ์ง๋ง ์ ํํ 10๊ฐ์ง๋ ์๋๊ฒ ๊ฐ์ต๋๋ค.)
10๊ฐ์ง ํํ
1. Promises๋ฅผ ๊ณ ์งํ์ง ์์ ๊ฒ(Not sticking with Promises)
2.๋ณด์ ๋ฌธ์ ์ ๋ ์ ๊ฒฝ ์ฐ์ง ๋ชปํ ๊ฒ(Security)
3.๋น๋์์คํ (GYP) 1
4.๋น๋์์คํ (GYP) 2
5.ํจํค์ง ๋งค๋์ ํ์ผ(package.json) 1
6. ํจํค์ง ๋งค๋์ ํ์ผ(package.json) 2
7.๋ชจ๋ ์์คํ (node_modules)
8.Require ๋ฌธ๋ฒ์ ์ธ ๋ js ํ์ฅ์๋ฅผ ์ ์จ๋ ๋๊ฒ ํ ๊ฒ
9.index.js
10.deno
1. Promises๋ฅผ ๊ณ ์งํ์ง ์์ ๊ฒ
Node์ ๋น๋๊ธฐ ํธ์ถ์ ํ์ฌ callback API๋ก ๋์ด์์ต๋๋ค. ๋ฐ๋ผ์ Node๋ Promises๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. 2009๋ ์ ๋ผ์ด์ธ ๋ฌ์ด Promises๋ฅผ ์ถ๊ฐํ๋ค๊ฐ 2010๋ ์ ๋ณธ์ธ ๊ณ ์ง์ผ๋ก ์ธํ์ฌ ๋ค์ ์ญ์ ํ์๋ค๊ณ ํฉ๋๋ค. Promises๋ฅผ ์ฌ์ฉํ์ง ์๋ ํธ์ด ๋ ๊ฐ๋จํด ๋ณด์ด๊ณ , Promises๋ฅผ ์ฌ์ฉํ๋ฉด callback๋ง๋ค Promises ๊ฐ์ฒด๋ฅผ ์ถ๊ฐ ํด์ค์ผํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ด์ง ๋ชปํ ๊ฑฐ๋ผ๊ณ ์๊ฐํ ๋ชจ์์ ๋๋ค. ์ด๋ฌํ ๋ผ์ด์ธ ๋ฌ์ ์ค์๋ ๋ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ ์ ์์๋ async/await ์ํ๊ณ ๋ฅผ ๋๋๊ฒ ๋ง๋ค์๋ค๊ณ ํฉ๋๋ค.
2. ๋ณด์ ๋ฌธ์ ์ ๋ ์ ๊ฒฝ ์ฐ์ง ๋ชปํ ๊ฒ(Security)
Node๋ ๋ชจ๋ ๊ฑธ ๊ทธ๋๋ก ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ๋ณด์์ด๋ผ๊ณ ๋ 1๋ ์์ต๋๋ค. Node ์์ฉ ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ๋ชจ๋ ์์คํ ์ฝ์ ์ ๊ทผ ๋ํ ๊ฐ๋ฅํด์ง๋๋ค. Node ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ด๋ป๊ฒ ์ ์ง๋๊ณ ๋ฐ์ ํ๋์ง๋ฅผ ๊ณ ๋ คํ์์ผ๋ฉด ๋ค๋ฅธ ์ธ์ด๋ค์ด ๊ฐ์ง ๋ชปํ ๋ณด์์ ๊ฐ์ง ์ ์์์ ํ ๋ฐ ๊ทธ๋ฌ์ง ๋ชปํ์ฌ ์์ฌ์์ ํ ๋กํ์ต๋๋ค.
3. ๋น๋์์คํ (GYP) 1
๊ฐ์ฅ ํํ์ค๋ฌ์ด ๋ถ๋ถ์ด๋ผ๊ณ ํฉ๋๋ค. Node๋ GYP๋ผ๋ ๋ฉํ ๋น๋ ์์คํ ์ ์ฌ์ฉํ๋๋ฐ ํฌ๋กฌ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๋ช ๋ ํ ํฌ๋กฌ์์๋ GYP์ ๋ฒ๋ฆฌ๊ณ GN์ผ๋ก ๊ฐ์ํ์ง๋ง Node๋ GYP๋ฅผ ๊ทธ๋๋ก ์๊ณ ๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ฌ Node๋ง์ด ์ ์ผํ๊ฒ GYP๋ฅผ ์ฌ์ฉํฉ๋๋ค. (GYP์ ๋ํด ์ ์์ง๋ ๋ชปํ์ง๋ง ๋์งํ ์ ๋๋ก ๊ตฌ๋ฆฌ๋ค๊ณ ํฉ๋๋ค.)
Node ์ง์ ๋๋ฌธ์ GYP wrapper๊ฐ ์๋๋ฐ ์ด๊ฑฐ ๋๋ฌธ์ ๋๋ฌด๋ ๋ง์ ์์ ๋ถํ์ํ๊ณ ๋ณต์กํ ๊ธฐ์ ๋ค์ด ์ฌ์ฉ๋๊ณ ์ด๋ฅผ Node์ ๊ฐ์ฅ ์ฌ๊ฐํ ์คํจ๋ผ๊ณ ๋งํฉ๋๋ค. ์ฐธ๊ณ ๋ก ๊ตฌ๊ธ์ GN์ด GYP๋ณด๋ค 20๋ฐฐ ์ ๋ ๋น ๋ฅด๊ฒ ๋น๋ ๋๋ค๊ณ ํฉ๋๋ค.
(์ ๊ฐ์ ํ๋ถ์์๊ฒ ๋น๋์์คํ ๋ถ๋ถ์ ๋ง์ด ์ดํดํ๊ธฐ ํ๋ ๋ถ๋ถ์ด์์ต๋๋ค.)
4. ๋น๋์์คํ (GYP) 2
GYP๋ฅผ ์ด์ฉํด ๋น๋ ์์คํ
์ ๋ง๋ค๋ฉด์ ๋ค์ดํฐ๋ธ ์ฝ์ ํ๊ธฐ ์ํด์ ์ฌ์ฉ์๊ฐ ํ์์ ์ผ๋ก C++ ๋ฐ์ธ๋ฉ์ ํ๋๋ก ํ๋๋ฐ, FFI(Foreign Function Interface)๋ฅผ ์ ๊ณตํ์ด์ผ ํ๋ค๋ ์์ฌ์์ ํ ๋กํ์ต๋๋ค.
5. ํจํค์ง ๋งค๋์ ํ์ผ(package.json) 1
Node.js๋ ๋ชจ๋ ์์คํ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ต๊ทผ์ ์ด ๋ชจ๋ ์์คํ ์ด Go์ java์์ ์ธ์ด ์์ฒด์ ์ผ๋ก ๊ตฌํ์ด ๋๋ ์คํ๋ค์ด ๋ฐํ๋์์ต๋๋ค. (go๋ ์ฒ์๋ถํฐ ๊ตฌํ๋์ต๋๋ค.) ์ด ๋ชจ๋ ์์คํ ์ ๊ด๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ 3rd ํํฐ ํ๋ก์ ํธ๋ก ๋ผ์ด ๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด์ฃ . ๊ทธ๋ฐ๋ฐ ๋ ธ๋๋ npm์ด๋ผ๋ ํจํค์ง ๋งค๋์ ๊ฐ ๊ด๋ฆฌํ๋ package.json. ํ์ผ์ด main() ํจ์์์ ์ฐพ๋๋ก ๋์ด์์ด npm์ ์์กด์ ์ธ ์ปค๋ฎค๋ํฐ๋ก ๋ง๋ค์๋ค๋ ์ ์ ์ค์ค๋ก ๋นํํ์ต๋๋ค.
์ต๊ทผ facebook์์ ๋ง๋ yarn์ด๋ผ๋ ํจํค์ง ๋งค๋์ ๊ฐ npm์ ๋์ฒดํ๊ณ ์์ง๋ง package.json์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์๋ํ์ง ์์์ง๋ง defacto(์ฌ์ค์์ ํ์ค)๊ฐ ๋ ์
์ด์ฃ .
๋, ์ด package.json ํ์ผ์ ๋ชจ๋์ ์ฐพ์ ๋ ๋ช
์์ ์ด์ง ์๋ค๋ ๋จ์ ๋ ์์ต๋๋ค. ์ฌ์ด ์ดํด๋ฅผ ์ํด ์๋ ๊ทธ๋ฆผ์ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค.
6. ํจํค์ง ๋งค๋์ ํ์ผ(package.json) 2
package.json ํ์ผ์ ๋ชจ๋ ์์คํ
์ด ํ์ผ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์กํ๋๋ก ๋ง๋ค์ด์ ๋ผ์ด์ ์ค, ๋ฆฌํฌ์งํฐ๋ฆฌ, ์ค๋ช
๋ฑ ๋ชจ๋ ์์คํ
์์ฒด๋ง์ผ๋ก๋ ํ์ ์๋ ์ ๋ณด๊น์ง ๋ค ํฌํจ์์ผ ๋๋ฌด ๋ฌด๊ฑฐ์์ก๋ค๊ณ ํฉ๋๋ค.
7. ๋ชจ๋ ์์คํ (node_modules)
์์์ ์ธ๊ธํ ํ์ผ ๋๋ ํฐ๋ฆฌ ๊ธฐ๋ฐ ๋ชจ๋ ์์คํ ์ ์ฝ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ์๊ณ ๋ฆฌ์ฆ์ด ๋ณต์กํด์ก์ต๋๋ค. ๊ทธ ์ค ํ๋๊ฐ resolving ์๊ณ ๋ฆฌ์ฆ์ธ๋ฐ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ฏธ์น ๋ฏ์ด ๋ณต์กํฉ๋๋ค. node_modules ํด๋ ๋ค์ ๊น๋ฆฐ ๊ฐ๋ ์ธ vendored-by-default(์๋ ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ํดํธ๋ก ๊ฐ์ด ์ค์นํ๋ ๊ฒ)๋ ์ฐ๊ฒฐํ๋ ์๋๊ฐ ์ด๋ค ๊ฒ์ธ์ง์ ๋ํด ์ ํํ ์์ ์๋๋ก ํ ์๋์์ง๋ง(ํ๊ฒฝ๋ณ์์ฒ๋ผ), ์ง๊ธ ๋ฐฉ์์ ๋ธ๋ผ์ฐ์ ์๋ ๋ฐฉ์์์ ํฌ๊ฒ ๋ฒ์ด๋ฌ๊ณ , ์ด๋ ๋ณธ์ธ์ ์ค์๋ผ๊ณ ๋งํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ๋๋๋ฆด ์ ์๋ค๊ณ ํฉ๋๋ค.
8. Require ๋ฌธ๋ฒ์ ์ธ ๋ js ํ์ฅ์๋ฅผ ์ ์จ๋ ๋๊ฒ ํ ๊ฒ
Node๊ฐ ํ์ผ ์์คํ ์ ๋ธ๋ผ์ฐ์ ๋ด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ํ๋ ๊ฒ๊ณผ ํ์ค์ด ๋ฌ๋ผ์ ๋ชจ๋ ๋ก๋๊ฐ ์ฌ์ฉ์์ ์๋๋ฅผ ํ์ ํ๊ธฐ ์ํด ๋ง์ ๊ณ ๋ฏผ์ ํด์ผ ํ๋ค๋ ์ ์ ์ธ๊ธํ์ต๋๋ค.
์ค์ ๋ก Node์์๋ Require("poo.js") ์์ Require("poo")์ฒ๋ผ import ๊ด๋ จ .js ํ์ฅ์ ์๋ต์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ deno์์ ์ด ๋ถ๋ถ์ด ํ์คํ๊ฒ ๋ฐ๋๊ฒ ๋์ ๋์ฃ .
9. index.js
๊ทธ๋ฅ ๊ท์ฌ์์ default๋ฅผ index.js๋ก ํ๋ค๊ณ ํฉ๋๋ค. ๋๋ ํ ๋ฆฌ๋ฅผ includeํ ๋ index.js๋ฅผ ์ดํด๋ณด๋ฉด ๊ท์ฌ์ธ๊ฒ ๊ฐ์๋ค๊ณ ํฉ๋๋ค. ํ์ง๋ง ์ด๋ ๋ถํ์ํ ๋์ ์ด์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ชจ๋ ๋ก๋ฉ ์์คํ ์ ๋์ฑ ๋ณต์กํ๊ฒ ๋ง๋ค์๋ค๊ณ ํฉ๋๋ค.
10. Deno
๋ผ์ด์ธ ๋ฌ์ด Node์ ๊ดํ ํํ์ ๋ํด ๋ฐํ๋ฅผ ํ ํ ์๋ก ๋ง๋ค๊ณ ์๋ ํ๋ก์ ํธ๋ฅผ ๊ณต๊ฐํ๋๋ฐ ๊ทธ๊ฒ์ด ๋ฐ๋ก Deno์์ต๋๋ค.
๋ผ์ด์ธ ๋ฌ์ด ๊ฐ๋ฐํ ๊ฐ์ ๋๊ณ ๋ ์์ ํ Node์ ๋๋ค. Node๋ JavaScript๋ฅผ ์คํํ๊ธฐ ์ํ ๋ฐํ์์ธ ๊ฒ์ฒ๋ผ, Deno๋ TypeScript๋ฅผ ์คํํ๊ธฐ ์ํ Command-line ๋ฐํ์์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
(git hub ํ๋ก์ ํธ ๋งํฌ: https://github.com/ry/deno)
6๊ฐ์ธ๊ฐ 5๊ฐ์๋ ๋ธ๋์น๊ฐ ํ์ฌ๋ 494๊ฐ์ธ๊ฑฐ ๋ณด๋ฉด ํ๋ฐํ๊ฒ ๊ฐ๋ฐํ๊ณ ์๋ ๋ชจ์์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ์คํ TypeScript๊ฐ 40% ์ด์์ ์ฐจ์งํ๋ ๊ฑธ ๋ณผ ์ ์์ต๋๋ค.
๋งบ์ผ๋ฉฐ..
๋ฌผ๋ก 3๋ ์ ๋ฐํํ ๋ด์ฉ์ด์ง๋ง ์ด์ ๋ง Node.js์ ๋ํด ์์๊ฐ๊ณ ์๋ ์ ์๊ฒ ์ถฉ๊ฒฉ์ ์ธ ์์์ด์๋๊ฒ ๊ฐ์ต๋๋ค. ๋ง๋ ๊ฐ๋ฐ์๊ฐ ์์ข๋ค๋๋ฐ... ์ฐธ ใ ใ ใ ใ ๊ณ์ Node๋ฅผ ๊ณต๋ถํด์ผํ๋ ํผ๋์ค๋ฝ๊ธฐ๋ ํฉ๋๋ค...
๊ฒฐ๊ตญ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ๊ฒ๋ ์ธ๊ฐ์ด ๋ง๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ผ์ด์ธ ๋ฌ ๊ฐ์ ์ฒ์ฌ ๊ฐ๋ฐ์๋ ์ค์๋ฅผ ํ๋๊ตฌ๋ ๋ผ๋ ์๊ฐ๋ ๋ค์์ต๋๋ค.
Deno ๊ฐ์ ๊ฒฝ์ฐ Node์ ์์ง ์ฐ๊ฒฐ์ฑ์ด ์์ด ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ค๋ฉด ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ ๊ฐ์ง๋ง JSConf ๋ฐํ ํ 3๋ ์ด๋ผ๋ ์๊ฐ์ด ํ๋ ธ๊ณ Deno๋ผ๋ ์๋ก์ด ์๋ฒ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์๋ฒ์ฌ์ด๋ ์ํ๊ณ์ ์ด๋ ํ ์ํฅ์ ์ค์ง ๊ธฐ๋๊ฐ ๋ฉ๋๋ค.
[์ฐธ๊ณ ]
www.youtube.com/watch?v=M3BM9TB-8yA
jsdevelopers.medium.com/10-things-i-regret-about-node-js-ryan-dahl-e56b78dffe8c
www.samsungsds.com/kr/insights/github-June-Trend.html
'...' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] list(๋ฆฌ์คํธ)์ ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ (0) | 2021.04.25 |
---|---|
[Node.js] uuid ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ๋ฐ ์ฌ์ฉํ๊ธฐ (0) | 2021.04.12 |
[JavaScript] ๊ธฐ๋ค๋ ค! ๋จน์ด! async/await ์ดํดํ๊ธฐ (6) | 2021.03.28 |
[Server] ๋ก๋๋ฐธ๋ฐ์(Load Balancer)๋ ์ ํ์ํ ๊น? (6) | 2021.03.15 |
[Linux] OpenSSH ์๋ฒ ๊ตฌ์ถํ๊ธฐ (0) | 2021.03.09 |