[DevTools] Prettier ์ฃผ์ ํฌ๋งทํ ์ต์ ๊ณผ ์ถ์ฒ ์ค์
๋ค์ด๊ฐ๋ฉฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ์ฝ๋ ํฌ๋งทํ
๋๊ตฌ๋ก Prettier๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค. Prettier๋ .prettierrc
(ํน์ .prettierrc.js
) ๊ตฌ์ฑ ํ์ผ์ ์ํ๋ ์ฝ๋ ์คํ์ผ์ ์ปค์คํฐ๋ง์ด์ง ํ ์ ์๋๋ฐ, ํ๊ตญ์ด๋ก ๊ตฌ๊ธ๋ง ํ๋ฉด ๋ง์ด ๋์ค๋ ๊ตญ๋ฃฐ ์ปค์คํ
(?)์ ๋ณ์๊ฐ ์์ด ์ฌ์ฉํ๊ณ ์์๋ค.
// .prettierrc
{
"singleQuote": true,
"semi": true,
"useTabs": false,
"tabWidth": 2,
"trailingComma": "all",
"printWidth": 80
}
์ฌ์ฉํ๋๋ฐ ํฐ ๋ฌธ์ ๋ ์์์ง๋ง ์ธ์ ํ ๋ฒ ์ ํธํ๋ ์ฝ๋ ์คํ์ผ์ ๋ฐ๋ผ ์ค์ ์ ์๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ ์ฐธ์ ์ฐ์ฐํ My Code Formatting Guidelines ๋ผ๋ ๊ธ์ ๋ฐ๊ฒฌํ๋ค. ์ด ๊ฐ์ด๋๋ผ์ธ์ ์ฐธ๊ณ ํ์ฌ ์ฃผ์ ์์ฑ์ ๋ํด ๋ ์์ธํ ์์๋ณด๊ณ ์ถ์ฒ ์ค์ ๋ ์ ์ฉํด ๋ณด์.
์ฃผ์ ์ต์
๐ก ๋ชจ๋ ์ต์ ์ ์ถ์ฒ๊ฐ์ ๊ฐ์ธ์ ์ธ ์ ํธ๊ฐ ๋ฐ์๋๋ค.
useTabs
์ฝ๋๋ฅผ ๋ค์ฌ์ฐ๊ธฐ ํ ๋ ํญ(tab) ๋ฌธ์๋ฅผ ์ฌ์ฉํ ์ง, ์คํ์ด์ค(space)๋ฅผ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ๋ ์์ฑ. ํญ ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์กฐ๊ธ ๋ ์๋ฏธ์ ์ผ๋ก(Semantic) ํ์ํ ์ ์๋ค. ์คํ์ด์ค๋ ๋ค์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ง๋ง, ํญ์ ์ฃผ๋ก ๋ค์ฌ์ฐ๊ธฐ์๋ง ์ฌ์ฉํ๋ฏ๋ก ์ฝ๋ ๊ฐ๋ ์ฑ์ด ๋์์ง ์ ์๋ค. ๋ํ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๊ฐ์ ๋ณด์กฐ ๊ธฐ์ ์ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ ์ฝ์ ๋ ํญ์ ์ฌ์ฉํ๋ฉด ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ๋ ์ฝ๊ฒ ์ธ์ํ ์ ์๋ค.
// ์คํ์ด์ค๋ · ํญ์ → ๊ธฐํธ๋ก ํ๊ธฐ
// useTabs: false
function example() {
··if (true) {
····console.log("Hello, world!");
··}
}
// useTabs: true
function example() {
→if (true) {
→→console.log("Hello, world!");
→}
}
- ๊ธฐ๋ณธ๊ฐ:
false
(์คํ์ด์ค๋ก ๋ค์ฌ ์ฐ๊ธฐ) - ์ถ์ฒ๊ฐ:
true
(ํญ ๋ฌธ์๋ก ๋ค์ฌ ์ฐ๊ธฐ) — ํ๋ก์ ํธ ์ํฉ์ ๋ฐ๋ผ ๋ณ๊ฒฝ
semi
ํํ์ ๋์ ์ธ๋ฏธ์ฝ๋ก ์ ์๋์ผ๋ก ์ถ๊ฐํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ธ๋ฏธ์ฝ๋ก ์๋ ์ฝ์ ๊ธฐ๋ฅ(ASI)์ด ์์ด์ ์ธ๋ฏธ์ฝ๋ก ์ ์๋ตํด๋ ์ฝ๋๋ ์๋ํ์ง๋ง, ํน์ ์ํฉ์์ ์์์น ๋ชปํ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ช ์์ ์ผ๋ก ์ธ๋ฏธ์ฝ๋ก ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข๋ค.
์๋ ์ฝ๋์์ return
ํค์๋ ๋ค์ ์ธ๋ฏธ์ฝ๋ก ์ด ์๋ ์ฝ์
๋ผ์ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
function getValue() {
return
{ value: 1 };
}
getValue(); // undefined
- ๊ธฐ๋ณธ๊ฐ:
true
(ํํ์ ๋์ ์ธ๋ฏธ์ฝ๋ก ์ถ๊ฐ) - ์ถ์ฒ๊ฐ:
true
singleQuote
๋ฌธ์์ด์ ํ์ํ ๋ ํฐ๋ฐ์ดํ(") ๋์ ์์๋ฐ์ดํ(')๋ฅผ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. ์์๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ๋ฉด HTML ์์ฑ๊ณผ ๊ตฌ๋ถํ๊ธฐ ์ฌ์์ง๋ ์ฅ์ ์ด ์๋ค.
// singleQuote: true
const greeting = 'Hello, world!';
// singleQuote: false
const greeting = "Hello, world!";
- ๊ธฐ๋ณธ๊ฐ:
false
(ํฐ๋ฐ์ดํ ์ฌ์ฉ) - ์ถ์ฒ๊ฐ:
true
(์์๋ฐ์ดํ ์ฌ์ฉ)
jsxSingleQuote
JSX์์ ์์ฑ์ ํ์ํ ๋ ํฐ๋ฐ์ดํ(") ๋์ ์์๋ฐ์ดํ(')๋ฅผ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. JSX๋ HTML๊ณผ ์ ์ฌํ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฏ๋ก, ์์ฑ ๊ฐ์ ํฐ๋ฐ์ดํ๋ก ๊ฐ์ธ๋ ๊ฒ ์ผ๋ฐ์ ์ด๋ค.
// jsxSingleQuote: true
<div className='container'>Hello, world!</div>;
// jsxSingleQuote: false
<div className="container">Hello, world!</div>;
- ๊ธฐ๋ณธ๊ฐ:
false
(ํฐ๋ฐ์ดํ ์ฌ์ฉ) - ์ถ์ฒ๊ฐ:
false
quoteProps
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์์ฑ ์ด๋ฆ์ ๋ฐ์ดํ๋ก ๊ฐ์์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. ๊ฐ์ฒด ์์ฑ ์ด๋ฆ์ ํ์ดํ(-) ๋ฑ์ด ๋ค์ด๊ฐ๋ฉด ๋ฐ์ดํ๋ก ๊ฐ์ธ์ผํ๋๋ฐ ์ด๋ ์ผ๊ด์ฑ์ ์ํด ๋ชจ๋ ์์ฑ์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค.
// quoteProps: "as-needed"
const user = {
name: 'John',
age: 30,
'email-address': 'john.doe@gmail.com',
};
// quoteProps: "consistent"
// email-address ์์ฑ์ ๋ฐ์ดํ๊ฐ ํ์ํ๋ฏ๋ก ์ ์ฒด ์์ฑ์ ๋ฐ์ดํ ์ฌ์ฉ
const user = {
'name': 'John',
'age': 30,
'email-address': 'john.doe@gmail.com',
};
- ๊ธฐ๋ณธ๊ฐ:
as-needed
(ํ์ํ ์์ฑ์๋ง ๋ฐ์ดํ ์ฌ์ฉ) - ์ถ์ฒ๊ฐ:
consistent
(1๊ฐ ์ด์์ ์์ฑ์ ๋ฐ์ดํ๊ฐ ํ์ํ๋ฉด ๋ชจ๋ ์์ฑ์ ๋ฐ์ดํ ์ฌ์ฉ)
trailingComma
์ฌ๋ฌ ์ค๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด, ๊ฐ์ฒด ๋ฆฌํฐ๋ด, ํจ์ ํธ์ถ ํ๋ผ๋ฏธํฐ ๋ฑ์ ๋ง์ง๋ง ์์ ๋ค์ ์ผํ ์ถ๊ฐ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. ๋ง์ง๋ง ์์ ๋ค์ ์ผํ๋ฅผ ์ถ๊ฐํ๋ฉด ์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์๋ฅผ ๋ณ๊ฒฝํ ๋ ๋ ํธ๋ฆฌํด์ง๋ ์ฅ์ ์ด ์๋ค.
// trailingComma: "none"
const user = {
name: 'John',
age: 30 // ํํ ์ฝค๋ง ์์
};
// trailingComma: "all"
const user = {
name: 'John',
age: 30, // ํํ ์ฝค๋ง ์์
};
- ๊ธฐ๋ณธ๊ฐ:
"all"
(๊ฐ๋ฅํ ๋ชจ๋ ๊ณณ์ ํํ ์ผํ ์ถ๊ฐ) - ์ถ์ฒ๊ฐ:
"all"
bracketSpacing
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์์ชฝ ์ค๊ดํธ ์์ชฝ์ ๊ณต๋ฐฑ ์ถ๊ฐ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. ๊ณต๋ฐฑ์ ์ถ๊ฐํ๋ฉด ์ฝ๋๊ฐ ๋ ์ฝ๊ธฐ ์ฌ์์ง๋ค.
// bracketSpacing: false
const user = {name: 'John', age: 30};
// bracketSpacing: true
const user = { name: 'John', age: 30 };
- ๊ธฐ๋ณธ๊ฐ:
true
(๊ฐ์ฒด ์ค๊ดํธ ์์ชฝ์ ๊ณต๋ฐฑ ์ถ๊ฐ) - ์ถ์ฒ๊ฐ:
true
arrowParens
ํ์ดํ ํจ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ดํธ๋ก ๊ฐ์์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. ํ์ดํ ํจ์๋ ํ๋ผ๋ฏธํฐ๊ฐ 1๊ฐ์ผ ๋ ๊ดํธ๋ฅผ ์๋ตํ ์ ์์ง๋ง, ๊ดํธ๋ฅผ ํญ์ ํ์ํ๋๋ก ์ค์ ํด์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ค. ์๋ 1๊ฐ์๋ ํจ์ ํ๋ผ๋ฏธํฐ๋ฅผ 2๊ฐ ์ด์์ผ๋ก ์์ ํ ๋ ์ผ์ผ์ด ๊ดํธ๋ฅผ ์ถ๊ฐํ ํ์๊ฐ ์๋ ์ฅ์ ๋ ์๋ค.
// arrowParens: "avoid"
const getUser = name => `User: ${name}`;
// arrowParens: "always"
const getUser = (name) => `User: ${name}`;
- ๊ธฐ๋ณธ๊ฐ:
"always"
(ํ์ดํ ํจ์ ํ๋ผ๋ฏธํฐ์ ํญ์ ๊ดํธ ์ฌ์ฉ) - ์ถ์ฒ๊ฐ:
"always"
proseWrap
๋งํฌ๋ค์ด ํ์ผ์์ ๊ธด ์ค์ ์๋์ผ๋ก ์ค ๋ฐ๊ฟ ํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. ๋งํฌ๋ค์ด ํ ์คํธ๋ ์ผ๋ฐ์ ์ธ ์ฝ๋์๋ ๋ค๋ฅด๊ฒ ๊ฐ ๋ธ๋ก์ ํ ์ค๋ก ๋ฌถ์ด์ ์ฒ๋ฆฌํ๋ ๊ฒ ์ข๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์ ํธ์ง์๊ฐ ํ ์คํธ๋ฅผ ํ์ํ๋ ๋ฐฉ์์ ์ฝ๊ฒ ์ ์ํ ์ ์๋ค.
- ๊ธฐ๋ณธ๊ฐ:
"preserve"
(๊ธฐ์กด ์ค ๋ฐ๊ฟ ์ ์ง) - ์ถ์ฒ๊ฐ:
"preserve"
htmlWhitespaceSensitivity
HTML ํ์ผ์์ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํ๋ ์์ฑ. "css"
๋ก ์ค์ ํ๋ฉด HTML ์์์ display
์์ฑ์ ๋ฐ๋ผ ๊ณต๋ฐฑ์ ์ฒ๋ฆฌํ๋ค. inline
, inline-block
์์๋ ๊ณต๋ฐฑ์ ์ ์งํ๊ณ , block
์์๋ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ๋ค. "css"
๋ก ์ค์ ํ๋ฉด CSS๊ฐ HTML์ ์๊ฐ์ ๋ ์ด์์์ ์ ์ํ๋ ๋ฐฉ์์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ ์ฅ์ ์ด ์๋ค.
<!-- htmlWhitespaceSensitivity: 'css' -->
<div>
<span>ํ
์คํธ</span> <span>ํ
์คํธ</span>
</div>
<!-- htmlWhitespaceSensitivity: 'strict' (๋ชจ๋ ๊ณต๋ฐฑ ์ ์ง) -->
<div>
<span>ํ
์คํธ</span> <span>ํ
์คํธ</span>
</div>
<!-- htmlWhitespaceSensitivity: 'ignore' (๋ชจ๋ ๊ณต๋ฐฑ ์ ๊ฑฐ) -->
<div>
<span>ํ
์คํธ</span><span>ํ
์คํธ</span>
</div>
- ๊ธฐ๋ณธ๊ฐ:
"css"
(display ์์ฑ์ ๋ฐ๋ผ ๊ณต๋ฐฑ ์ฒ๋ฆฌ) - ์ถ์ฒ๊ฐ:
"css"
endOfLine
ํ์ผ์ ์ค ๋ ๋ฌธ์๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. ์ด์์ฒด์ ๋ง๋ค ์ค ๋์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํต์ผํ ํ์๊ฐ ์๋ค. macOS, Linux ๊ฐ์ Unix ๊ณ์ด ์์คํ ์์ LF(Line Feed, \n)๋ฅผ ์ฌ์ฉํ๊ณ , Windows์์ CRLF(Carriage Return and Line Feed, \r\n)๋ฅผ ์ฌ์ฉํ๋ค. Windows์์ LF์ CRLF๋ฅผ ๋ชจ๋ ์ง์ํ๋ ๋ฐ๋ฉด, Unix ๊ณ์ด์ LF๋ง ์ธ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ํธํ์ฑ์ ์ํด LF๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค.
- ๊ธฐ๋ณธ๊ฐ:
"lf"
(์ค ๋ ๋ฌธ์๋ฅผ Line Feed๋ก ์ฌ์ฉ) - ์ถ์ฒ๊ฐ:
"lf"
embeddedLanguageFormatting
HTML, Markdown ๋ฑ์ ํฌํจ๋ ์ฝ๋ ๋ธ๋ก์ ํฌ๋งทํ
์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. "auto"
๋ก ์ค์ ํ๋ฉด HTML <script>
ํ๊ทธ ์์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋, Markdown ํ์ผ ๋ด ์ฝ๋ ๋ธ๋ก ๋ฑ์ ๋ด์ฉ์ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ํฌ๋งทํ
ํ๋ค.
- ๊ธฐ๋ณธ๊ฐ:
"auto"
(์๋ฒ ๋๋ ์ฝ๋ ๋ธ๋ก์ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ํฌ๋งทํ ) - ์ถ์ฒ๊ฐ:
"auto"
singleAttributePerLine
HTML, JSX, Vue ํ๊ทธ์์ ๊ฐ ์์ฑ์ ๊ฐ๋ณ ์ค์ ๋ฐฐ์นํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. ์์ ์์ฑ์ ํ ์ค์ ๋ฐฐ์นํ๋ฉด ๊ตฌ์กฐ ํ์ ์ด ์ฌ์์ง๊ณ , ๊ณต๊ฐ์ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
// singleAttributePerLine: false
<Button color="blue" size="large" onClick={handleClick} />
// singleAttributePerLine: true
<Button
color="blue"
size="large"
onClick={handleClick}
/>
- ๊ธฐ๋ณธ๊ฐ:
false
(๊ฐ๋ฅํ๋ฉด ํ ์ค์ ์ฌ๋ฌ ์์ฑ ๋ฐฐ์น) - ์ถ์ฒ๊ฐ:
false
์ต์ข ์ค์
// .prettierrc.js
module.exports = {
// ๋ค์ฌ์ฐ๊ธฐ ๋๋น 2์นธ
tabWidth: 2,
// ๋ค์ฌ์ฐ๊ธฐ์ ํญ ๋ฌธ์ ์ฌ์ฉ
useTabs: true,
// ์ฝ๋ ๋ง์ง๋ง์ ์ธ๋ฏธ์ฝ๋ก ์ถ๊ฐ
semi: true,
// ๋ฌธ์์ด์ ์์๋ฐ์ดํ(') ์ฌ์ฉ
singleQuote: true,
// JSX ์์ฑ๊ฐ์ ํฐ๋ฐ์ดํ("") ์ฌ์ฉ
jsxSingleQuote: false,
// ๊ฐ์ฒด ์์ฑ์ ๋ฐ์ดํ๊ฐ ํ์ํ ์์ฑ์ด ํ๋๋ผ๋ ์์ผ๋ฉด, ๋ชจ๋ ์์ฑ์ ๋ฐ์ดํ ์ฌ์ฉ
quoteProps: 'consistent',
// ์ฌ๋ฌ ์ค๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ฒด, ๋ฐฐ์ด, ํจ์ ํธ์ถ ํ๋ผ๋ฏธํฐ ๋ฑ์ ๋ง์ง๋ง ์์ ๋ค์ ํญ์ ์ผํ ์ถ๊ฐ
trailingComma: 'all',
// ๊ฐ์ฒด ์์ชฝ ์ค๊ดํธ ์์ชฝ์ ํญ์ ๊ณต๋ฐฑ ์ถ๊ฐ
bracketSpacing: true,
// ํ์ดํ ํจ์ ํ๋ผ๋ฏธํฐ์ ํญ์ ๊ดํธ ์ฌ์ฉ
arrowParens: 'always',
// ๋งํฌ๋ค์ด ํ์ผ์์ ๊ธฐ์กด ์์ฑ๋ ๋๋ก ์ค๋ฐ๊ฟ ์ ์ง
proseWrap: 'preserve',
// HTML ํ์ผ์์ CSS display ์์ฑ์ ๋ฐ๋ผ ๊ณต๋ฐฑ ์ฒ๋ฆฌ
htmlWhitespaceSensitivity: 'css',
// ํ์ผ์ ์ค ๋์ Unix ์คํ์ผ ์ค๋ฐ๊ฟ(\n, line feed)์ผ๋ก ์ค์
endOfLine: 'lf',
// HTML, Markdown ๋ฑ์ ํฌํจ๋ ์ฝ๋ ๋ธ๋ก ์๋ ํฌ๋งทํ
embeddedLanguageFormatting: 'auto',
// HTML, JSX, Vue ํ๊ทธ์์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํ ์ค์ ์ฌ๋ฌ ์์ฑ ๋ฐฐ์น
singleAttributePerLine: false,
};
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[DevTools] ESLint 9 Flat Config + Prettier ์ค์ (TypeScript, React)
[DevTools] ESLint 9 Flat Config + Prettier ์ค์ (TypeScript, React)
2024.06.30 -
[DevTools] nvm๋ณด๋ค 40๋ฐฐ ๋น ๋ฅธ ๋ ธ๋ ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ — fnm
[DevTools] nvm๋ณด๋ค 40๋ฐฐ ๋น ๋ฅธ ๋ ธ๋ ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ — fnm
2024.06.18 -
[Algorithm] ์ด์ง ํ์ ๋ฐ ๋ณํ ์๊ณ ๋ฆฌ์ฆ Binary Search Algorithm
[Algorithm] ์ด์ง ํ์ ๋ฐ ๋ณํ ์๊ณ ๋ฆฌ์ฆ Binary Search Algorithm
2024.06.02 -
[Network] ์ฃ์ง ํ๋ซํผ ์ํคํ ์ฒ Edge Platform Architecture
[Network] ์ฃ์ง ํ๋ซํผ ์ํคํ ์ฒ Edge Platform Architecture
2024.06.02