2024/10
-
- [Next.js] ๊ฐ์๊ธฐ "'next'์(๋) ๋ด๋ถ ๋๋ ์ธ๋ถ ๋ช ๋ น, ์คํํ ์ ์๋ ํ๋ก๊ทธ๋จ, ๋๋๋ฐฐ์น ํ์ผ์ด ์๋๋๋ค." ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
๊ฐ์๊ธฐ "'next'์(๋) ๋ด๋ถ ๋๋ ์ธ๋ถ ๋ช ๋ น, ์คํํ ์ ์๋ ํ๋ก๊ทธ๋จ, ๋๋๋ฐฐ์น ํ์ผ์ด ์๋๋๋ค." ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐNext.js ํ๋ก์ ํธ ์๋ฒ๋ฅผ ์คํํ ๋, ๊ฐ์๊ธฐ ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.$ yarn devyarn run v1.22.22$ next dev'next'์(๋) ๋ด๋ถ ๋๋ ์ธ๋ถ ๋ช ๋ น, ์คํํ ์ ์๋ ํ๋ก๊ทธ๋จ, ๋๋๋ฐฐ์น ํ์ผ์ด ์๋๋๋ค.error Command failed with exit code 1.info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. ์ด๋, ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค. ์บ์๋ฅผ ์ง์์ค ํ, ํ๋ก์ ..
2024.10.30 -
- [JavaScript] Faker.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Faker.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด๊ฐ๋ฉฐFaker.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Faker.js๊ฐ๋ ๋ค์ํ ์ ํ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ, ํ ์คํธ, ๋ฐ๋ชจ์ฉ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํ ๋ ์ ์ฉํ๋ค.์ด๋ฆ, ์ฃผ์, ์ ํ๋ฒํธ, ์ด๋ฉ์ผ, ๋ ์ง, ์ด๋ฏธ์ง URL ๋ฑ์ ๋ฌด์์๋ก ์์ฑํ ์ ์๋ค.๊ด๋ฆฌ ๋ฌธ์ ๋ก 2021๋ ์ ๊ฐ๋ฐ์ด ์ค๋จ๋์๊ณ , ์ดํ ์ปค๋ฎค๋ํฐ์์ @๏ผ faker-js/faker@๋ผ๋ ์ด๋ฆ์ผ๋ก ํฌํฌ(Fork)ํ์ฌ ์ ์ง๋ณด์ํ๊ณ ์๋ค.๊ธฐ์กด์ @faker.js@๋ ๋ ์ด์ ์ ์ง๋ณด์๋์ง ์๋๋ค.์์ธํ ๋ด์ฉ์ ์ด ๊ธ์ ์ฐธ๊ณ ํ๋ค. ๋ฐ๋ผ์ ์ปค๋ฎค๋ํฐ์ ์ํด ๊ด๋ฆฌ๋๊ณ ์๋ @๏ผ faker-js/faker@๋ฅผ ์ฌ์ฉํ๋ค.Faker๋ก ์์ฑํ ๋ฐ์ดํฐ๋ ๋ฌด์์์ด๋ฉฐ ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋๋ฏ..
2024.10.30 -
- [Python] Pyinstaller๋ก ํจํค์งํ ๋ ํ๊ฒฝ ๋ณ์ ํ์ผ(.env) ์ธ์ ์๋๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
Pyinstaller๋ก ํจํค์งํ ๋ ํ๊ฒฝ ๋ณ์ ํ์ผ(.env) ์ธ์ ์๋๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐPyinstaller๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ํ์ผ(@.exe@)๋ก ํจํค์ง ํ ๋, ํ๊ฒฝ ๋ณ์ ํ์ผ(@.env@) ์ธ์์ด ์๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ด์ฌ(Python)์์ ํ๊ฒฝ ๋ณ์ ํ์ผ(@.env@)์ ๋ด์ฉ์ ๋ถ๋ฌ์ค๋ ค๋ฉด @dotenv@ ํจํค์ง๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.@dotenv@ ํจํค์ง์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋์ ๊ธ์ ์ฐธ๊ณ ํ๋ค. [Python] .env ํ์ผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ.env ํ์ผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐํ์ด์ฌ(Python)์์ @.env@ ํ์ผ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. .env ํ์ผ๊ฐ๋ ํค(Key)-๊ฐ(Value) ์์ผ๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํ๋ ๊ฐ๋จํ ํ ์คํธ ํ์ผ์ด ํ์ผ์ ์ฌ์ฉํ๋ฉดdev-a..
2024.10.30 -
- [Next.js] ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ ๋ฐฉ๋ฒ
ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐNext.js์์ ํ๊ฒฝ ๋ณ์(Environment Variable)๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒโ ํ๊ฒฝ ๋ณ์ ํ์ผ ์ค์ ํ๊ธฐNext.js๋ @.env@ ํ์ผ์ ํตํด ํ๊ฒฝ ๋ณ์๋ฅผ ๋ถ๋ฌ์ฌ ์ ์๋ค.ํ๋ก์ ํธ ์ต์์ ๊ฒฝ๋ก(@/@)์ ๋ค์๊ณผ ๊ฐ์ @.env@ ํ์ผ์ ์์ฑํ๋ค. /.env.localNEXT_PUBLIC_API_URL=https://api.example.comAPI_SECRET_KEY=your-secret-key ⇒ ๋ค์๊ณผ ๊ฐ์ด @.env@๋ค์ ์ฉ๋์ ๋ฐ๋ผ ๋ค์ํ ์ ๋ฏธ์ด๋ฅผ ๋ถ์ผ ์ ์๋ค. ํ๊ฒฝ๋ณ์ ํ์ผ๋ช ์ค๋ช @.env.local@๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ํ๊ฒฝ ๋ณ์ (Git์ ์ถ๊ฐํ์ง ์๋ ๊ฒ์ด ์ข๋ค.)@.env.development@๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ํ๊ฒฝ ๋ณ์@..
1 2024.10.29 -
- [React.js] Clerk
Clerk๋ค์ด๊ฐ๋ฉฐNext.js ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ธ์ฆ(Authentication) ๋ฐ ์ฌ์ฉ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๋์์ฃผ๋ Clerk ์๋น์ค์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค.์ด ์๋น์ค๋ฅผ ์ด์ฉํ๋ฉด, ์์ ๋ก๊ทธ์ธ ๋ฑ ์ธ์ฆ์ ์ํ ๊ธฐ๋ฅ๋ค์ ์ง์ ์ฝ๋๋ก ๊ตฌํํ์ฌ ๋ง๋ค์ด์ฃผ์ง ์์๋ ๋๋ค. Clerk๊ฐ๋ Next.js ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ธ์ฆ(Authentication) ๋ฐ ์ฌ์ฉ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋๋ ์๋น์ค์์ ๋ก๊ทธ์ธ, ๋ฉํฐํฉํฐ ์ธ์ฆ(MFA), ์ธ์ ๊ด๋ฆฌ ๋ฑ์ ๊ธฐ๋ณธ ์ ๊ณตํ๋ค.Next.js์ ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ๊ณผ๋ ์ ๋ง๊ธฐ ๋๋ฌธ์ API ๋ผ์ฐํธ์ ๋ฏธ๋ค์จ์ด์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.Clerk์ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ์์ ๋ก๊ทธ์ธ(Google, Facebook, GitHub ๋ฑ) ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค. ํ์๊ฐ์ ๋ฐ ํ๋ก์ ํธ ์์ฑ Cler..
2024.10.28 -
- [React.js] use-debounce ํจํค์ง
use-debounce ํจํค์ง๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์ Next.js ๊ฐ์ ํ๊ฒฝ์์ ์ปดํฌ๋ํธ๊ฐ ์์ฃผ ์ ๋ฐ์ดํธ ๋์ง ์๋๋ก ํด์ฃผ๋ @use-debounce@ ํจํค์ง์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. use-debounce๊ฐ๋ ๋ฆฌ์กํธ(React.js)์ Next.js ๊ฐ์ ํ๊ฒฝ์์ ์ปดํฌ๋ํธ๊ฐ ์์ฃผ ์ ๋ฐ์ดํธ๋์ง ์๋๋ก ํน์ ๋์์ ๋๋ฐ์ด์ค(Debounce) ํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ์ ํธ๋ฆฌํฐ ํ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ์ ๋น ๋ฅด๊ฒ ๋ฐ๋ณตํ ๋ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ด๋ API ํธ์ถ์ ๋ฐฉ์งํ๋ ๋ฐ ์ ์ฉํ๋ค. ๋๋ฐ์ด์ค(Debounce)์ฌ์ฉ์๊ฐ ๋ง์ง๋ง์ผ๋ก ๋ฐ์ํ ์ด๋ฒคํธ ์ดํ, ์ผ์ ์๊ฐ ๋์ ์ถ๊ฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์์์ ๋๋ง ํจ์๋ฅผ ์คํํ๋ ํจํด์ฃผ๋ก API ์์ฒญ์ด๋ ๋ฆฌ์์ค๊ฐ ๋ง์ด ํ์ํ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ค.๊ฒ์์ฐฝ์์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋๋ง๋ค..
1 2024.10.27 -
- [๋น ๋ฐ์ดํฐ๋ถ์๊ธฐ์ฌ ์ค๊ธฐ] ํ๋ค์ค(pandas) ์ถ๋ ฅ ๊ธธ์ด ์ ํ ํด์ ํ๊ธฐ
ํ๋ค์ค(pandas) ์ถ๋ ฅ ๊ธธ์ด ์ ํ ํด์ ํ๊ธฐ๋ค์ด๊ฐ๋ฉฐํ๋ค์ค(@pandas@)์ ์ถ๋ ฅ ๊ธธ์ด ์ ํ์ ํด์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค.๊ธด ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ๊ฒฝ์ฐ ์ค๊ฐ์ @...@์ผ๋ก ์๋ต๋์ด ์์ด์ ๋ถํธํ๋ฐ, ์ด ์ค์ ์ ํด์ฃผ๋ฉด ์ ์ฒด ๋ด์ฉ์ด ๋ณด์ด๊ฒ ๋๋ค. ๋ฐฉ๋ฒ๋ค์๊ณผ ๊ฐ์ด @pd.set_option()@์ ์ด์ฉํ์ฌ ์ต๋ ์ถ๋ ฅ ํ๊ณผ ์ด์ ๊ฐ์๋ฅผ ์์จ ์ ์๋ค.import pandas as pd# ํ๊ณผ ์ด์ ์ต๋ ์ถ๋ ฅ ์ ํ ํด์ ํ๊ธฐpd.set_option('display.max_rows', None) pd.set_option('display.max_columns', None) ์ฐธ๊ณ ์ฌ์ดํธ pandas.set_option — pandas 2.2.3 documentationdisplay.[large_repr, max_c..
2024.10.27 -
- [VS Code] ์ฝ๋ ์๋ ์์ฑ, ์ค๋ํซ ๊ธฐ๋ฅ ๋๋ ๋ฐฉ๋ฒ (settings.json)
์ฝ๋ ์๋ ์์ฑ, ์ค๋ํซ ๊ธฐ๋ฅ ๋๋ ๋ฐฉ๋ฒ (settings.json)๋ค์ด๊ฐ๋ฉฐ๋น์ฃผ์ผ ์คํ๋์ค ์ฝ๋(VS Code)์์ ์ฝ๋ ์๋ ์์ฑ, ์ค๋ํซ(Snippet) ๊ธฐ๋ฅ์ ๋๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค.๋ก์ปฌ์์ ์ฝ๋ฉ ํ ์คํธ๋ ๋น ๋ฐ์ดํฐ๋ถ์๊ธฐ์ฌ ์ค๊ธฐ ์ํ์ ์ค๋นํ ๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ ์ฉํ๋ค. ๋ฐฉ๋ฒ์ค๋ช @settings.json@ ํ์ผ์ ์๋์ ๋ด์ฉ์ ์ถ๊ฐํด์ค๋ค.@[Ctrl/Cmd]@ + @[Shift]@ + @[P]@๋ฅผ ๋๋ฌ์ ๋ช ๋ น ํ๋ ํธ(Command Pallette) ์ด๊ธฐ@settings@ ๊ฒ์ํ๊ธฐ@[Preferences: Open User Settings (JSON)]@ ํญ๋ชฉ ํด๋ฆญํ๊ธฐ ๋ง์ฝ ๋ก์ปฌ ํ๋ก์ ํธ์๋ง ์ ์ฉ์ํค๊ณ ์ถ๋ค๋ฉด, ํ๋ก์ ํธ ์ต์๋จ ๊ฒฝ๋ก์ @.vscode@ ํด๋ ์์ฑ ํ, @settings.json..
2024.10.27 -
- [React.js] antd ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
antd ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js) ๊ธฐ๋ฐ์ UI ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์ธ antd(Ant Design)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Ant Design(antd)๊ฐ๋ ์๋ฆฌ๋ฐ๋ฐ ๊ทธ๋ฃน์ด ๋ง๋ ๋ฆฌ์กํธ(React.js) ๊ธฐ๋ฐ์ UI ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋์์ธ ์ผ๊ด์ฑ์ ์ ์งํ๋ฉด์ ์์ฐ์ฑ์ ๋์ด๋ ๊ฒ์ ๋ชฉํ๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ธฐ์ ์ฉ ์์คํ ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋๋ค.์ฃผ๋ก ๊ด๋ฆฌ ์์คํ , ๋์๋ณด๋, ๊ธฐ์ ์ฉ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ํฉํ๋ค. ์ฃผ์ ํน์ง๋ฒํผ, ์ ๋ ฅ ํ๋, ํ ์ด๋ธ, ๋ชจ๋ฌ, ํผ, ์ฐจํธ ๋ฑ ๋ค์ํ UI ์ปดํฌ๋ํธ๋ฅผ ์ ๊ณตํ๋ค.@@, @@, @@, @@, @@, @@๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๊ฐ ๋ฏธ๋ฆฌ ์คํ์ผ๋ง๋์ด ์์ด, ์ต์ํ์ ์ค์ ์ผ๋ก ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ ๊ฐ๋ฅํ๋ค.๋์์ธ ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๋ฅด๋ฉฐ, ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ์กฐํฉํด๋ ํต์ผ๋..
1 2024.10.23 -
- [Styled-Components] ์ธ๋ถ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ UI ์ปดํฌ๋ํธ ์คํ์ผ์ ์ง์ ์์ ํ๋ ๋ฐฉ๋ฒ
์ธ๋ถ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ UI ์ปดํฌ๋ํธ ์คํ์ผ์ ์ง์ ์์ ํ๋ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐ@antd@ ๋ฑ ์ธ๋ถ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ UI ์ปดํฌ๋ํธ๋ฅผ Styled-Components๋ฅผ ์ด์ฉํ์ฌ ์ง์ ์์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒ์คํ์ผ ํ์ผ(@์ปดํฌ๋ํธ๋ช .style.js@)์ด๋ ์ปดํฌ๋ํธ ํ์ผ(@์ปดํฌ๋ํธ๋ช .js/jsx/tsx@)์์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ณ๊ฒฝ/์ถ๊ฐํ๊ณ ์ ํ๋ ์คํ์ผ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.import styled from "styled-components";import { ์ธ๋ถ์ปดํฌ๋ํธ๋ช } from "์ธ๋ถ_์ปดํฌ๋ํธ_๋ผ์ด๋ธ๋ฌ๋ฆฌ_ํจํค์ง";export const ์ปค์คํ ์ธ๋ถ์ปดํฌ๋ํธ๋ช = styled(์ธ๋ถ์ปดํฌ๋ํธ๋ช )` ์์ฑ: ๊ฐ;`; ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ Styled-Components ์์์ฒ๋ผ ์ฌ์ฉํ๋ฉด ๋๋ค.i..
1 2024.10.23 -
- [Service] ํ๋ฆฌ์ฆ๋ง(Prisma)
ํ๋ฆฌ์ฆ๋ง(Prisma)๋ค์ด๊ฐ๋ฉฐORM(Object-Relational Mapping) ๋๊ตฌ ์ค ํ๋์ธ ํ๋ฆฌ์ฆ๋ง(Prisma)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ํ๋ฆฌ์ฆ๋ง(Prisma)๊ฐ๋ ORM(Object-Relational Mapping) ๋๊ตฌ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐํธํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ฐ๋ฐ ๋๊ตฌ์ฃผ๋ก Node.js์ TypeScript ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ค.SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ ํ์ ์์ด ์์ ํ ํ์ ์ ์ฝ๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ ์ ์๋๋ก ๋์์ค๋ค. ORM(Object-Relational Mapping)๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด(Object)์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Relational Database)์ ํ ์ด๋ธ ๊ฐ์ ๋งคํ์ ์๋ํํ๋ ๊ธฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ SQL์ด ์..
3 2024.10.22 -
- [Service] Supabase
Supabase๋ค์ด๊ฐ๋ฉฐFirebase์ ๋์์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ Supabase์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Supabase๊ฐ๋ ๊ฐ๋ฐ์๋ค์ด ์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ ์ ์๋๋ก ๋๋ ์คํ ์์ค ๋ฐฑ์๋ ์๋น์คFirebase์ ๋์์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ฉฐ, PostgreSQL์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ฃผ์ ๊ธฐ๋ฅ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌPostgreSQL์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ฌ์ฉํ๋ค.์คํค๋ง ๊ด๋ฆฌ, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ค์๊ฐ ๊ธฐ๋ฅ ๋ฑ์ ์ง์ํ๋ค.SQL ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. ์ค์๊ฐ ๊ธฐ๋ฅ์ค์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ ์ ์๋ค.์) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ก์ด ๋ ์ฝ๋๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์ ๋ฐ์ดํธ๋๋ฉด ์๋์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฆผ ๋ณด๋ด๊ธฐ ์ธ์ฆ ๋ฐ ๊ถํ ๊ด๋ฆฌ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ๋ก๊ทธ์ธ, ์์ ..
1 2024.10.21 -
- [Tailwind CSS] asChild ์์ฑ
asChild ์์ฑ๋ค์ด๊ฐ๋ฉฐ@asChild@ ์์ฑ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. asChild ์์ฑ๊ฐ๋ Radix UI์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉ๋๋ ์์ฑ์ปดํฌ๋ํธ๊ฐ ๋ํ(Wrapping)๋ ์์ ์ปดํฌ๋ํธ์ ์คํ์ผ์ด๋ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ ํน์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ์๋ฏธ์์ ์์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.๋ํ๋ ์ปดํฌ๋ํธ๊ฐ ์๋ก์ด DOM ๋ ธ๋๋ฅผ ์์ฑํ์ง ์๊ณ , ํด๋น ์์ ์์์ DOM์ ๊ทธ๋๋ก ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ๋ง ์ถ๊ฐํ๋ค.๋ถํ์ํ DOM ๋ ธ๋๊ฐ ์ถ๊ฐ๋์ง ์์ HTML ๊ตฌ์กฐ๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ๊ณ , ์คํ์ผ์ด ๊นจ์ง์ง ์๋๋ก ๋ณด์ฅํ๋ค. ์ฌ์ฉ ์ Menu ⇒ @@์ @@์ ์์์ด์ง๋ง, @@๊ฐ ์๋ก์ด DOM ๋ ธ๋๋ฅผ ๋ง๋ค์ง ์๋๋ค.⇒ ๋์ @@ ์์ฒด๊ฐ @DropdownMenuTrigger@๋ก ์๋ํ๊ฒ ๋๋ค. ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ์ถ๊ฐ..
2024.10.21 -
- [Tailwind CSS] shadcn/ui
shadcn/ui๋ค์ด๊ฐ๋ฉฐ๊ฐ๋จํ๊ฒ ๋ณต์ฌ & ๋ถ์ฌ๋ฃ๊ธฐ๋ก ์ฌ์ฉํ ์ ์๋ shadcn/ui์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. shadcn/ui๊ฐ๋ ๋ค์ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ฌ์ฉํ ์ ์๋ ์ ๊ทผ ๊ฐ๋ฅํ๊ณ ์ปค์คํฐ๋ง์ด์ฆ ๊ฐ๋ฅํ UI ์ปดํฌ๋ํธ ๋ชจ์์ผ๋ฐ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ๋ค๋ฅด๊ฒ npm ํจํค์ง๋ก ์ค์นํ๋ ๋์ , ์ฌ์ฉ์๊ฐ ํ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ณต์ฌํด์ ์ง์ ํ๋ก์ ํธ์ ๋ถ์ฌ๋ฃ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค.๋ถํ์ํ ์์กด์ฑ์ ํผํ ์ ์๊ณ , ์์ ๋ง์ ์ปค์คํ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ ์ ์๋ค.๋ฆฌ์กํธ(React.js)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์๊ณ , Tailwind CSS ๋ฐ Radix UI์ ๊ฐ์ ์คํ ์์ค ๊ธฐ์ ๋ค์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์ฌ ๋ง๋ค์ด์ก๋ค.Next.js์ ๊ฐ์ ํ๋ ์์ํฌ์ ์ ํตํฉ๋๋๋ก ์ค๊ณ๋์๋ค.MIT ๋ผ์ด์ผ์ค๋ก ๊ณต๊ฐ๋์ด ์์ด ๋๊ตฌ๋ ์์ ๋กญ๊ฒ ์์ ..
2024.10.20 -
- [Next.js] ํด๋ ๊ตฌ์กฐ ๋ฐ ๋์ ๊ฒฝ๋ก ์ค์ ํ๊ธฐ
ํด๋ ๊ตฌ์กฐ ๋ฐ ๋์ ๊ฒฝ๋ก ์ค์ ํ๊ธฐ๋ค์ด๊ฐ๋ฉฐNext.js๋ฅผ ์ด์ฉํ์ฌ ํด๋ ๊ตฌ์กฐ ๋ฐ ๋์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒโ ๋น๊ณต๊ฐ ํด๋(Private Folder) ์์ฑํ๊ธฐ์ฑ(@app@) ํด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก URL ์ธ๊ทธ๋จผํธ๊ฐ ๋๋ค.๋น๊ณต๊ฐ ํด๋(Private Folder)๋ฅผ ๋ง๋ค๊ณ ์ถ์ ๊ฒฝ์ฐ, ํด๋ ์ด๋ฆ ์์ ๋ฐ์ค(@_@)์ ์ถ๊ฐํ๋ค._css ⇒ @_css@ ํด๋ ์์ฑ ์, ํด๋น ํด๋๋ URL ์ธ๊ทธ๋จผํธ๋ก ๋ ธ์ถ๋์ง ์์ผ๋ฉฐ, ๋ง์ฝ ํด๋น ๊ฒฝ๋ก์ ์ ์ํ ๊ฒฝ์ฐ 404 ํ์ด์ง๋ฅผ ๋ฐํํ๋ค. ๋น๊ณต๊ฐ ํด๋๋ ๋ผ์ฐํ ์ ์ง์ ํฌํจ๋์ง ์๋ ํด๋์ด๋ค.์ผ๋ฐ์ ์ผ๋ก ๋ด๋ถ ๊ด๋ฆฌ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. โก ๋ผ์ฐํธ ๊ทธ๋ฃน(Route Group) ์์ฑํ๊ธฐ๋ผ์ฐํธ ๊ทธ๋ฃน(Route Group)์ ํน์ ํ์ด์ง๋ ๊ฒฝ๋ก๋ฅผ ๊ทธ๋ฃนํํ๋ค.์ด๋ฌํ ๊ทธ๋ฃน์ ์ด๋ฆ..
2024.10.16 -
- [React.js] ์ผ๋ฐ CSS์ CSS Module ๋น๊ต
์ผ๋ฐ CSS์ CSS Module ๋น๊ต๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ CSS Module๊ณผ ์ผ๋ฐ CSS์ ์ฐจ์ด์ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค.๋ ๋ฐฉ์์ ํฐ ์ฐจ์ด์ ์ CSS ํด๋์ค์ ๋ฒ์(Scope)์ ์ด๋ฆ ์ถฉ๋ ๋ฐฉ์ง์ด๋ค ์ผ๋ฐ CSS ๋ฐฉ์์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ CSS๋ ์ ์ญ์ ์ผ๋ก ๋์ํ๋ค.์คํ์ผ ์ํธ์์ ์ ์๋ ํด๋์ค ์ด๋ฆ์ด ํ๋ก์ ํธ์ ๋ชจ๋ ์ปดํฌ๋ํธ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.๋ชจ๋ ์ปดํฌ๋ํธ๋ ๊ฐ์ CSS ํ์ผ์ ์ฐธ์กฐํ ์ ์๊ณ , ํด๋์ค ์ด๋ฆ์ด ๊ฒน์น๋ฉด ์คํ์ผ์ด ๋ฎ์ด์์์ง ๊ฐ๋ฅ์ฑ์ด ์๋ค. HomePage.css.button { background-color: blue; color: white;} HomePage.jsximport './HomePage.css';const HomePage = () => { return (..
2024.10.16 -
- [Redis] CCI Cake
CCI Cake๋ค์ด๊ฐ๋ฉฐRedis๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง CCI Cake์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. CCI Cake๊ฐ๋ ์ค์๊ฐ ๋ฐ์ดํฐ ํ์คํ ๋ฆฌ์ธ(Historian)๊ณผ ์๊ฐํ ๋๊ตฌ๋ก, Redis๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ํ๋ก๊ทธ๋จ์ฃผ๋ก ์ฐ์ , ์ ์กฐ, ์๋์ง ๋ถ์ผ์์ ์ค์๊ฐ ๋ฐ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ค.๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ๋น ๋ฅด๊ฒ ๊ฒ์ํ์ฌ ๋ถ์ํ ์ ์๋ค.10๋ฐฑ๋ง ํ๊ทธ ์ด์์ ์ ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ์ด๋น 50๋ฐฑ๋ง ํ๊ทธ ์ด์์ ์ฒ๋ฆฌํ ์ ์๋ค.1,000๋ช ์ด์ ๋์ ์ ์ ์์๋ ์๋ ์ ํ๊ฐ ์๋ค.http://sfsi.co.kr/OTIT-solution/?bmode=view&idx=2525997ํ์ด์ฌ(Python) ๊ธฐ๋ฐ์ ์คํฌ๋ฆฝํ ํ๊ฒฝ์ ์ ๊ณตํ์ฌ, NumPy ๊ฐ์ ๋ฐ์ดํฐ ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.E..
2024.10.15 -
- [Redis] Redis(Remote Dictionary Server)
Redis(Remote Dictionary Server)๋ค์ด๊ฐ๋ฉฐ์ค์๊ฐ ๋ฐ์ดํฐ(Real Time Data)๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ํ๋ซํผ์ธ Redis(Remote Dictionary Server)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Redis(Remote Dictionary Server)๊ฐ๋ 'ํค-๊ฐ' ๊ตฌ์กฐ์ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์คํ ์์ค ๊ธฐ๋ฐ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (DBMS)๊ณ ์ฑ๋ฅ์ ์ธ๋ฉ๋ชจ๋ฆฌ(In-memory) ๋ฐ์ดํฐ ๊ตฌ์กฐ ์คํ ์ด์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์บ์, ๋ฉ์์ง ๋ธ๋ก์ปค๋ก ์ฌ์ฉ๋๋ฉฐ, ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋ค.2009๋ ์ด๋ฐํ ๋ฅด ์ฐํ๋ฆฌํฌ(Salvatore Sanfilippo)๊ฐ ์ฒ์ ๊ฐ๋ฐํ๋ค. ํน์ง๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ์ ์ฅํ๋ค. ๋ฐ๋ผ์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ..
2024.10.15 -
- [Git] git push ์ทจ์ํ๋ ๋ฐฉ๋ฒ
git push ์ทจ์ํ๋ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐ๊น(Git)์์ @push@๋ฅผ ํ ํ, ์ทจ์ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒ์ต๊ทผ์ ํธ์ํ ์ปค๋ฐ ์ทจ์ํ๊ธฐ๋ง์ง๋ง ์ปค๋ฐ์ ์ญ์ ํ๋ ๋ช ๋ น์ด๋ค.ํ์ง๋ง ์์ ๋๋ ํฐ๋ฆฌ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ทธ๋๋ก ์ ์ง๋๋ค.$ git reset --soft HEAD^ ๋ง์ฝ, ์์ ๋๋ ํฐ๋ฆฌ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ด๊ธฐํํ๋ ค๋ฉด ์๋์ ๋ช ๋ น์ ์คํํ๋ค.$ git reset --hard HEAD^ @--hard@ ์ต์ ์ ์ด์ฉํ์ฌ ๋ฆฌ์ ํ ๊ฒฝ์ฐ, ์์ ๋๋ ํฐ๋ฆฌ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ด๊ธฐํ๋๋ค. (๋ณ๊ฒฝ๋ ๋ด์ฉ์ด ๋ชจ๋ ์ฌ๋ผ์ง๋ค.) ์๊ฒฉ ์ ์ฅ์์ ์ด ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ๋ก ๋ฐ์ํ๊ณ ์ ํ ๊ฒฝ์ฐ, ์๋ ๋ช ๋ น์ ์คํํ๋ค.$ git push --force ์ฐธ๊ณ ๋๋ ๋ค์๊ณผ ๊ฐ์ด @HEAD@ ํค์๋๋ฅผ ์ด์ฉํ์ฌ ์ทจ์ํ ์ ์๋ค.# ๋ก์ปฌ ๋ธ๋์น๋ฅผ ์ด์ ์ปค๋ฐ์ผ..
2024.10.15 -
- [PyQt] self.function(param)๊ณผ function(self, param)์ ์ฐจ์ด์
self.function(param)๊ณผ function(self, param)์ ์ฐจ์ด์ ๋ค์ด๊ฐ๋ฉฐPyQt๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋ฐ์ ํ ๋, ์ธ์ @self.function(param)@ ๋๋ @function(self, param)@๋ฅผ ์จ์ผํ ์ง ํท๊ฐ๋ฆด ๋๊ฐ ์๋ค.์ด ๋์ ์ฐจ์ด์ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. self๊ฐ๋ ํ์ด์ฌ ํด๋์ค์ ์ธ์คํด์ค ๋ฉ์๋์์ ํ์ฌ ๊ฐ์ฒด ์์ ์ ์ฐธ์กฐํ๊ธฐ ์ํ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ํด๋์ค์ ์ธ์คํด์ค(๊ฐ์ฒด) ์์ ์ ์ฐธ์กฐํ๋ ๋ณ์ํด๋์ค ๋ด์์ ์ ์๋ ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ์๋์ผ๋ก ํด๋น ๋ฉ์๋๊ฐ ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค.ํด๋์ค์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์์ ๋งค์ฐ ์ค์ํ ๊ฐ๋ ๋ฉ์๋ ๋ด์์ ๊ฐ์ฒด์ ์์ฑ์ด๋ ๋ค๋ฅธ ๋ฉ์๋์ ์ ๊ทผํ ๋ ์ฌ์ฉ @self@๋ ๋ฉ์๋ ๋ด์์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๋ค๋ฅธ ๋ฉ์๋์ ์ ๊ทผํ ์ ์..
2024.10.12 -
- [TypeScript] ํด๋์ค(Class)
ํด๋์ค(Class)๋ค์ด๊ฐ๋ฉฐํ์ ์คํฌ๋ฆฝํธ(TypeScript)์์ ์ฌ์ฉํ ์ ์๋ ํด๋์ค(Class)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ํด๋์ค(Class)๊ฐ๋ ๊ฐ์ฒด(Object)๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ค๊ณ๋(Blueprint)๋ฐ์ดํฐ๋ฅผ ์บก์ํํ๊ณ , ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๋ฉ์๋๋ฅผ ํฌํจํ์ฌ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP, Object Oriented Programming) ํจํด์ ๋ฐ๋ฅธ๋ค.์์(Inheritance)๋ฅผ ์ง์ํ๋ฉฐ, ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค. ํด๋์ค์ ์์ฑ์(Contructor)ํด๋์ค์์ ์์ฑ์(Constructor)๋ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ํธ์ถ๋๋ ํน๋ณํ ๋ฉ์๋์ด๋ค.์์ฑ์๋ ๋ณดํต ๊ฐ์ฒด์ ์ด๊ธฐ ์ํ๋ฅผ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.class Book { // ํด๋์ค ์์ฑ ์ ์ธ title: string; au..
2024.10.12 -
- [TypeScript] ์ ๋ค๋ฆญ(Generic)
์ ๋ค๋ฆญ(Generic)๋ค์ด๊ฐ๋ฉฐํ์ ์คํฌ๋ฆฝํธ(TypeScript)์ ์ ๋ค๋ฆญ(Generic)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ์ ๋ค๋ฆญ(Generic)๊ฐ๋ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ๋ค์ํ ํ์ ์ ๋ํด ๋์ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ํ์ ์ ์ฐ์ ํน์ ํ์ง ์๊ณ , ๋์ค์ ์ฌ์ฉํ ๋ ๊ทธ ํ์ ์ ์ง์ ํ ์ ์๋ค.๋ํ, ํ์ ์ถ๋ก ์ด ๋ ๊ฐํ๋๊ณ , ๋ฐ๋ณต์ ์ธ ํ์ ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค.ํจ์, ํด๋์ค, ์ธํฐํ์ด์ค, ํ์ ๋ฑ์ ์ ๋ค๋ฆญ์ ์ ์ฉํ ์ ์๋ค. ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ๋ค๋ฆญ์ ์ฌ์ฉํ ๋๋ ํ์ ๋งค๊ฐ๋ณ์(Type Parameter)๋ฅผ ์ ์ํ๋ค.๋ณดํต @@์ ๊ฐ์ ํ์์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ์ํ๋ ์ด๋ฆ์ ์ง์ ํ๋ฉด ๋๋ค.@T@, @K@, @U@ ๋ฑ์ด ๊ด์ต์ ์ธ ์ด๋ฆ์ผ๋ก ์ฐ์ธ๋ค. ์์ ์ฝ๋ 1 : ํจ์์์ ์ ๋ค๋ฆญ ์ฌ์ฉํ๊ธฐ@identity@ ํจ์๋ ์ ๋ ฅ๋ฐ..
2024.10.12 -
- [TypeScript] ์ธํฐํ์ด์ค(Interface)
์ธํฐํ์ด์ค(Interface)๋ค์ด๊ฐ๋ฉฐํ์ ์คํฌ๋ฆฝํธ(TypeScript)์ ์ธํฐํ์ด์ค(Interface) ํ์ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ์ธํฐํ์ด์ค(Interface)๊ฐ๋ ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ์ ๊ฐ์ฒด๊ฐ ๊ฐ์ ธ์ผ ํ ์์ฑ, ๊ทธ ์์ฑ์ ํ์ , ๊ทธ๋ฆฌ๊ณ ๋ฉ์๋๋ฅผ ์ง์ ํ ์ ์๋ค.์๋ฐ์คํฌ๋ฆฝํธ์๋ ์กด์ฌํ์ง ์์ผ๋ฉฐ, ํ์ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.์ฝ๋์ ๊ฐ๋ ์ฑ ๋ฐ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํ๊ณ , ํ์ ์์ ์ฑ์ ๋์ฌ์ค๋ค. ์ฃผ์ ๊ธฐ๋ฅ๊ฐ์ฒด๊ฐ ํน์ ์์ฑ๋ค์ ๋ฐ๋์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ ๊ตฌ์กฐ๋ฅผ ์ ์ํ ์ ์๋ค.ํน์ ์์ฑ์ ์ ํ์ ์ผ๋ก ํฌํจ๋ ์ ์๋๋ก ์ ์ํ ์ ์๋ค.์) @age?: number;@ํจ์์ ๋งค๊ฐ๋ณ์์ ๋ฐํ๊ฐ์ ํ์ ๋ ์ธํฐํ์ด์ค๋ก ์ ์ํ ์ ์๋ค.ํด๋์ค๋ ์ธํฐํ์ด์ค๋ฅผ @implements@ ํค์๋๋ฅผ ํตํด ๊ตฌํํ ์ ์๋ค...
2024.10.12 -
- [TypeScript] Zod ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Zod ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด๊ฐ๋ฉฐํ์ ์คํฌ๋ฆฝํธ(TypeScript)์์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฝ๊ฒ ํด์ฃผ๋ Zod ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Zod ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ๋ ํ์ ์คํฌ๋ฆฝํธ(TypeScript)์์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฝ๊ฒ ํด์ฃผ๋ ์คํค๋ง ์ ์ธ ๋ฐ ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌํ์ ์์ ์ฑ์ ์ ์งํ๋ฉด์ ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ ์ ์๋๋ก ์ค๊ณ๋์ด ์๋ค.๋ฐ์ดํฐ ๊ฒ์ฆ์ ๋์ฑ ๋ช ํํ๊ณ ์ง๊ด์ ์ผ๋ก ์ํํ ์ ์๋๋ก ๋์์ค๋ค. ์ค์น$ npm install zod # yarn add zod ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ ๋ฌธ์์ด(String) ์คํค๋ง๋ฅผ ๋ง๋ค ์ ์๋ค.import { z } from "zod";// creating a schema for stringsconst mySchema = z.string();// parsingmySchem..
2024.10.11 -
- [TypeScript] ํ์ ๊ฐ๋(Type Guard)
ํ์ ๊ฐ๋(Type Guard)๋ค์ด๊ฐ๋ฉฐํ์ ์คํฌ๋ฆฝํธ(TypeScript)์ ํ์ ๊ฐ๋(Type Guard)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ํ์ ๊ฐ๋(Type Guard)๊ฐ๋ ํ์ ์คํฌ๋ฆฝํธ์์ ๋ณ์์ ํ์ ์ ์ขํ๋ ๋ฐฉ๋ฒ์ฃผ๋ก ์กฐ๊ฑด๋ฌธ(Conditional Statement)์ ์ฌ์ฉํ์ฌ ํน์ ํ์ ์์ ํ์ธํ ํ, ํด๋น ํ์ ์ ๋ง๋ ์์ ํ ์์ ์ ์ํํ ์ ์๋๋ก ๋์์ค๋ค.ํ์ ๊ฐ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ ์์ ์ ํ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ณ , ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์์ ์ฑ์ ๋์ผ ์ ์๋ค.ํ์ ๊ฐ๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ๋ฐํ์ ์ค๋ฅ๋ฅผ ์ค์ด๊ณ , ๊ฐ๋ฐ ๊ณผ์ ์์ ํ์ ๊ด๋ จ ๋ฒ๊ทธ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐฉ์งํ ์ ์์ผ๋ฉฐ, ์ฝ๋์ ์๋๋ฅผ ๋ช ํํ๊ฒ ํํํ์ฌ ํ์ ์ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๋ฐ ํฐ ๋์์ด ๋๋ค. ํ์ ๊ฐ๋๋ ๋ฐํ์์์ ๋ณ์์ ํ์ ์ ํ์ธํ์ฌ ํ์ ์คํฌ๋ฆฝํธ์๊ฒ ํด๋น ๋ณ์..
2024.10.10 -
- [TypeScript] ๋ชจ๋ ๋ฐฉ์ ์ฌ์ฉํ๊ธฐ
๋ชจ๋ ๋ฐฉ์ ์ฌ์ฉํ๊ธฐ๋ค์ด๊ฐ๋ฉฐํ์ ์คํฌ๋ฆฝํธ(TypeScript)์์ ๋ชจ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒํ์ ์คํฌ๋ฆฝํธ ํ์ผ(@.ts@/@.tsx@)์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋(Module)๋ก ๊ฐ์ฃผ๋์ง ์๊ณ , ์ ์ญ ๋ฒ์์ ์คํฌ๋ฆฝํธ๋ก ์ฒ๋ฆฌ๋๋ค.์ฌ๋ฌ ํ์ผ์์ ๋์ผํ ๋ณ์๋ช ์ ์์ฑํ ๊ฒฝ์ฐ, ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.fileA.tslet name = 'stickman';const susan = 'susan'; fileB.tsconst susan = 'susan'; // ์ค๋ฅ ๋ฐ์ ์ด๋, ๋ค์๊ณผ ๊ฐ์ด 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ์ ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ชจ๋๋ก ๋ณํํ ์ ์๋ค. ๋ฐฉ๋ฒ โ : @import@, @export@ ๋ฌธ ์ฌ์ฉํ๊ธฐํ์ ์คํฌ๋ฆฝํธ ํ์ผ์ @import@ ๋๋ @export@ ๋ฌธ์ ์ถ๊ฐํ์ฌ ES6 ๋ชจ๋๋ก ์ทจ๊ธ๋๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ..
2024.10.10 -
- [TypeScript] ์ธํฐํ์ด์ค(Interface)์ ํ์ ๋ณ์นญ(Type Alias) ๋น๊ต
์ธํฐํ์ด์ค(Interface)์ ํ์ ๋ณ์นญ(Type Alias) ๋น๊ต๋ค์ด๊ฐ๋ฉฐ์ธํฐํ์ด์ค(Interface)์ ํ์ ๋ณ์นญ(Type Alias)์ ํ์ ์คํฌ๋ฆฝํธ์์ ํ์ ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ด๋ค.ํ์ ์คํฌ๋ฆฝํธ(TypeScript)์์ ์ธํฐํ์ด์ค(Interface)์ ํ์ ๋ณ์นญ(Type Alias)์ ์ฐจ์ด์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ์ธํฐํ์ด์ค(Interface)๊ฐ๋ ์ธํฐํ์ด์ค๋ ์ฃผ๋ก ๊ฐ์ฒด(Object)์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.์ฃผ๋ก ๊ฐ์ฒด์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ ํด๋น ์ธํฐํ์ด์ค์์ ์๊ตฌํ๋ ์์ฑ์ด๋ ๋ฉ์๋๋ฅผ ๋ฐ๋์ ํฌํจํด์ผ ํ๋ค.์ฝ๋์์ ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ๊ฒ ์ ์ํ๊ณ , ๋ค๋ฅธ ์ฝ๋์์ ํด๋น ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๋๋ก ๊ฐ์ ํ ๋ ์ ์ฉํ๋ค.@interface@ ํค์๋๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ ์ ์๋ค...
2024.10.09 -
- [React.js] caseReducers ์์ฑ (Redux Toolkit)
caseReducers (Redux Toolkit) ์์ฑ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ๋์ค ํดํท(Redux Toolkit)์ @caseReducers@ ์์ฑ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค.์ด ์์ฑ์ ์ด์ฉํ๋ฉด ์ฌ๋ผ์ด์ค ๋ด์ ๊ฐ๋ณ ๋ฆฌ๋์ ํจ์์ ์ง์ ์ ๊ทผํ๊ณ ํธ์ถํ ์ ์๋ค. createSlice() ํจ์์ caseReducers ์์ฑcreateSlice() ํจ์์ฌ๋ผ์ด์ค(Slice)๋ฅผ ์ ์ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.์ฌ๋ผ์ด์ค๋ ํน์ ์ํ(State)์ ๊ทธ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฆฌ๋์(Reducer)๋ค์ ํ ๊ณณ์ ๋ชจ์๋์ ๊ฒ์ด๋ค.์ฌ๋ผ์ด์ค๋ ์๋์ผ๋ก ์ก์ ์์ฑ์(Action Creators)์ ์ก์ ํ์ (Action Types)์ ์์ฑํด์ค๋ค.reducers ์ต์ @createSlice@ ํจ์์ @reducers@ ์ต์ ์ ์ฌ๋ผ์ด์ค์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์ฌ๋ฌ ๊ฐ์ ๋ฆฌ..
2024.10.03 -
- [React.js] URL์ ํ๋ฆฌ๋ฏธํฐ(Parameter) ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
URL์ ํ๋ฆฌ๋ฏธํฐ(Parameter) ๊ฐ ๊ฐ์ ธ์ค๊ธฐ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ URL์ ํ๋ผ๋ฏธํฐ(Parameter) ๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ํ๋ผ๋ฏธํฐ(Parameter)๊ฐ๋ URL ๊ฒฝ๋ก์ ์ผ๋ถ๋ถ์ผ๋ก, ์ฃผ๋ก ํน์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.RESTful API ์ค๊ณ์์ ํํ ์ฌ์ฉ๋๋ฉฐ, ๋ฆฌ์์ค์ ๊ณ ์ ์๋ณ์๋ฅผ ๋ํ๋ธ๋ค.URL ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ ์ธ ๊ฒฝ๋ก๋ฅผ ์์ฑํ ์ ์์ด, ๋ค์ํ ๋ฆฌ์์ค์ ๋ํด ๋์ผํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ค. ์ข ๋ฅ์ข ๋ฅ์ค๋ช ๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ(Path Parameter)- ํน์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ- ์: @/users/:userId@์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ(Query Parameter)- URL์ @?@ ๋ค์ ์์นํ๋ฉฐ, @ํค-๊ฐ@ ์์ผ๋ก ๋ค์ํ ์ต์ ์ ์ ๋ฌํ๋ค.- ์) @?sea..
1 2024.10.02 -
- [Tailwind CSS] daisyUI ํ ๋ง ์ค์ ํ๊ธฐ
daisyUI ํ ๋ง ์ค์ ํ๊ธฐ ๋ค์ด๊ฐ๋ฉฐํ ์ผ์๋ CSS์ ํ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ daisyUI๋ฅผ ์ด์ฉํ์ฌ ํ์ด์ง์ ํ ๋ง(Theme)๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒํ ๋ง ๊ณ ๋ฅด๊ธฐdasiyUI์ ๊ณต์ ๋ฌธ์์์ ์ํ๋ ํ ๋ง๋ฅผ ์ ํํ๋ค. daisyUI themes — Tailwind CSS Components ( version 4 update is here )How to use daisyUI themes?daisyui.com ์ด ํ์ด์ง์์๋ ๋๋ผํ๋ผ ํ ๋ง(@dracula@)๋ฅผ ์ ํํ๋ค๊ณ ๊ฐ์ ํ๋ค. ํ ์ผ์๋ CSS ์ค์ ํ์ผ์ ์ถ๊ฐํ๊ธฐํ ์ผ์๋ CSS ์ค์ ํ์ผ์ธ @tailwind.config.js@ ํ์ผ์ ์๋์ ํ ๋ง ์์ฑ์ ์ถ๊ฐํด์ค๋ค../tailwind.config.js/** @type {import('tailwind..
2024.10.01