2025/02
-
- [PyQt] ๋ค์ด์ผ๋ก๊ทธ(Dialog)๋ค์ด์ผ๋ก๊ทธ(Dialog)๋ค์ด๊ฐ๋ฉฐPyQt์์ ๋ค์ด์ผ๋ก๊ทธ(Dialog)์ ์๋ฏธ์ ์ข ๋ฅ๋ฅผ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณธ๋ค. ๋ค์ด์ผ๋ก๊ทธ(Dialog)๊ฐ๋ ์ฌ์ฉ์์ ์ํธ์์ฉํ๊ธฐ ์ํด ๋ํ๋๋ ๋ณ๊ฐ์ ์ฐฝ์ผ๋ฐ์ ์ผ๋ก ๋ค์ด์ผ๋ก๊ทธ๋ ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ์ ๋ฐ๊ฑฐ๋, ํ์ธ ๋ฐ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ข ๋ฅPyQt์์๋ ์ฃผ๋ก @QDialog@ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ๊ตฌํํ๋ค.PyQt์์ ๋ค์ด์ผ๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ 2๊ฐ์ง ํํ๋ก ์ ๊ณต๋๋ค. 1๏ธโฃ ๋ชจ๋ฌ ๋ค์ด์ผ๋ก๊ทธ(Modal Dialog)์ฌ์ฉ์์๊ฒ ํด๋น ์ฐฝ๊ณผ ์ํธ์์ฉ์ ์๋ฃํ๊ธฐ ์ ๊น์ง๋ ๋ค๋ฅธ ์ฐฝ๊ณผ์ ์ํธ์์ฉ์ ํ์ฉํ์ง ์๋๋ค.@exec_()@ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ํ์ํ๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ๋ซ๊ธฐ ์ ๊น์ง ๋ค๋ฅธ ์ฐฝ๊ณผ์ ์ํธ์์ฉ์ ์ฐจ๋จํ๋ค. 2๏ธโฃ ๋ชจ๋ธ๋ฆฌ์ค(๋น๋ชจ๋ฌ) ๋ค์ด์ผ๋ก๊ทธ(Mode..
2025.02.25 -
- [React Native] ์นด๋ฉ๋ผ ๊ถํ ์์ฒญ ๋ฉ์์ง ํ์ ๋ฐฉ๋ฒ (Expo)์นด๋ฉ๋ผ ๊ถํ ์์ฒญ ๋ฉ์์ง ํ์ ๋ฐฉ๋ฒ (Expo)๋ค์ด๊ฐ๋ฉฐ์์คํฌ(Expo)๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ(React Native) ํ๋ก์ ํธ์์ ์นด๋ฉ๋ผ ๊ถํ ์์ฒญ ๋ฉ์์ง๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒํจํค์ง ์ค์นํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ ์คํํ์ฌ @expo-camera@ ํจํค์ง๋ฅผ ์ค์นํด์ค๋ค.$ npx expo install expo-camera ์ฑ ์ค์ ํ์ผ ๊ตฌ์ฑํ๊ธฐ (@app.json@)ํ๋ก์ ํธ์ ์ต์๋จ์ ์๋ ์ฑ ์ค์ ํ์ผ(@app.json@)์ ์๋์ ๋ด์ฉ์ ์ถ๊ฐํด์ค๋ค. /app.json{ "expo": { "plugins": [ [ "expo-camera", { "cameraPermission": "Allow $(PRODUCT_NAME) t..
2025.02.24 -
- [React Native] ํด๋ฆฝ๋ณด๋ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ (expo-clipboard)ํด๋ฆฝ๋ณด๋ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ (expo-clipboard)๋ค์ด๊ฐ๋ฉฐ์์คํฌ(Expo)๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ(React Native) ํ๋ก์ ํธ์์ ํด๋ฆฝ๋ณด๋(Clipboard) ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒ๊ฐ๋จํ๊ฒ @expo-clipboard@ ํจํค์ง๋ฅผ ์ค์นํ์ฌ ํด๋ฆฝ๋ณด๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค. expo-clipboard ํจํค์ง ์ค์นํ๊ธฐ$ npx expo install expo-clipboard ์ฌ์ฉํ๊ธฐํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ ๋๋ @Clipboard.setStringAsync()@ ํจ์๋ฅผ ์ฌ์ฉํ๊ณ , ํด๋ฆฝ๋ณด๋์ ์๋(๋ณต์ฌ๋) ๊ฐ์ ๊ฐ์ ธ์ฌ ๋๋ @fetchCopiedText()@ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.import { useState } from 'react';import { View, Text, Button..
2025.02.24 -
- [React Native] blurOnSubmit ์์ฑ๊ณผ submitBehavior ์์ฑblurOnSubmit ์์ฑ๊ณผ submitBehavior ์์ฑ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ(React Native)์ @TextInput@ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์๋ @blurOnSubmit@ ์์ฑ๊ณผ @submitBehavior@ ์์ฑ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. blurOnSubmit ์์ฑ๊ฐ๋ ์ฐ์ @blurOnSubmit@ ์์ฑ์ ๋ค์๊ณผ ๊ฐ์ด @TextInput@ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์๋ค. { setIsFocused(false); Keyboard.dismiss(); }}/> @blurOnSubmit@ ์์ฑ์ @TextInput@ ์ฐฝ ํ ์คํธ๋ฅผ ์ ๋ ฅํ๊ณ , ์ํฐ(Enter) ๋ฒํผ์ ๋๋ฅด๋ฉด ์ ๋ ฅํ ํ ์คํธ๊ฐ ์ ์ถ(Submit)๋๋๋ก ํด์ฃผ๋ ์์ฑ์ด๋ค.๋ฐ๋ผ์ ํ ์คํธ ํ๋๊ฐ ๋ธ๋ฌ ์ฒ๋ฆฌ๋๊ฒ ๋๋ค.๊ธฐ๋ณธ๊ฐ์..
2025.02.23 -
- [React Native] TailwindCSS IntelliSense ํ์ฑํํ๊ธฐ (VS Code)TailwindCSS IntelliSense ํ์ฑํํ๊ธฐ (VS Code)๋ค์ด๊ฐ๋ฉฐVS Code์์ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ(React Native)๋ฅผ ์ด์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋, TailwindCSS IntelliSense๋ฅผ ํ์ฑํ ์ํค๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒ(1) Tailwind CSS IntelliSense ํ์ฅ ์ค์นํ๊ธฐVS Code์์ Tailwind CSS IntelliSense ํ์ฅ์ ์ค์นํ๋ค. Tailwind CSS IntelliSense - Visual Studio MarketplaceExtension for Visual Studio Code - Intelligent Tailwind CSS tooling for VS Codemarketplace.visualstudio.com (2) Tailwi..
2025.02.19 -
- [Testing] ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ (Vite, TypeScript, React)๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ (Vite, TypeScript, React)๋ค์ด๊ฐ๋ฉฐVite, TypeScript, React๋ฅผ ์ด์ฉํ์ฌ ํ๋ก์ ํธ ํ ํ๋ฆฟ์ ์์ฑํ๊ณ , ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒ1๏ธโฃ ํ๋ก์ ํธ ์์ฑํ๊ธฐVite ํ๋ก์ ํธ ์ค์ ํ๊ธฐํ๋ก์ ํธ ์ด๋ฆ์ ์ค์ ํ๋ค.@React@์ @TypeScript@๋ฅผ ์ ํํ๋ค.$ npm create vite@latest ์์กด์ฑ ์ค์นํ๊ธฐ์๋์ ๋ช ๋ น์ ์คํํ์ฌ ํจํค์ง๋ฅผ ์ค์นํ ํ, ์คํํด๋ณธ๋ค.$ npm install$ npm run dev 2๏ธโฃ Vite ํ๊ฒฝ์์ ํ ์คํธ ์ค์ ํ๊ธฐVitest ์ค์นํ๊ธฐ์๋์ ๋ช ๋ น์ ์คํํ์ฌ Vitest๋ฅผ ์ค์นํ๋ค.$ npm install -D vitest VitestVite ๊ธฐ๋ฐ์ ๋น ๋ฅด๊ณ ๊ฐ..
1 2025.02.15 -
- [Testing] ์ํํธ์จ์ด ํ ์คํธ ๋ฐฉ๋ฒ์ํํธ์จ์ด ํ ์คํธ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐ๋ค์ํ ์ํํธ์จ์ด ํ ์คํธ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณธ๋ค. โ ๋จ์ ํ ์คํธ(Unit Test)๊ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ์์ ๋จ์(๋ฉ์๋, ํจ์, ํด๋์ค ๋ฑ)๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ๋ ๋ฐฉ๋ฒ๋จ์ผ ๋ชจ๋, ํจ์, ๋ฉ์๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๊ฒ์ฆ์ธ๋ถ ์ข ์์ฑ(DB, ๋คํธ์ํฌ ๋ฑ)์ ๋ฐฐ์ ํ๊ธฐ ์ํด Mocking(๋ชจ์ ๊ฐ์ฒด) ํ์ฉ๋น ๋ฅด๊ฒ ์คํ๋๋ฉฐ, ๊ฐ๋ฐ ์ด๊ธฐ์ ๋ฒ๊ทธ๋ฅผ ์ฝ๊ฒ ์ก์ ์ ์๋ค. ์์@add(2, 3)@ ํจ์๊ฐ @5@๋ฅผ ๋ฐํํ๋์ง ํ์ธํ๊ธฐimport unittestdef add(a, b): return a + bclass TestMathOperations(unittest.TestCase): def test_add(self): self.assertEqual(add(2, 3), ..
2025.02.15 -
- [Tip] ์์ถ ํด์ ์ "ํ์ผ ์ด๋ฆ์ด๋ ํ์ฅ๋ช ์ด ๋๋ฌด ๊น๋๋ค" ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์์ถ ํด์ ์ "ํ์ผ ์ด๋ฆ์ด๋ ํ์ฅ๋ช ์ด ๋๋ฌด ๊น๋๋ค" ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐ์น ๊ฐ๋ฐ ํ๋ก์ ํธ ํด๋๋ฅผ ์์ถํ ํ, ์์ถ ํด์ ๋ฅผ ํ ๋, "ํ์ผ ์ด๋ฆ์ด๋ ํ์ฅ๋ช ์ด ๋๋ฌด ๊น๋๋ค" ์ ๊ฐ์ ์ค๋ฅ๋ก ์ธํด ์คํจํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.์๋์ฐ(Windows)์์ '๊ฒฝ๋ก + ํ์ผ ์ด๋ฆ + ํ์ฅ์'์ ์ต๋ ๊ธธ์ด๊ฐ 260์์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋ฌธ์ ์ด๋ค.์ด๋, ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒโ ์์ ๊ธธ์ด ์ ํ ํด์ ํ๊ธฐ@[Window]@ + @[R]@ ํค๋ฅผ ๋๋ฌ ์คํ์ฐฝ์ ๋์ด ํ, @regedit@์ ์คํํ๋ค. ๋ ์ง์คํธ๋ฆฌ ํธ์ง๊ธฐ์์ ์๋์ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ค.์ปดํจํฐ\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem @LongPathsEnabled@ ๊ฐ์ @1@๋ก..
1 2025.02.11 -
- [Database] ์ ๊ทํ ๋ฐฉ๋ฒ ์ ๋ฆฌ (1NF, 2NF, 3NF, BCNF, 4NF, 5NF)์ ๊ทํ ๋ฐฉ๋ฒ ์ ๋ฆฌ (1NF, 2NF, 3NF, BCNF, 4NF, 5NF)๋ค์ด๊ฐ๋ฉฐ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทํ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ์ฉ์ด ์ ๋ฆฌ์์ฑ(Attribute) : ํ ์ด๋ธ์ ์ปฌ๋ผ(Column)ํค(Key) : ํ ํ(Row)์ ๊ณ ์ ํ๊ฒ ์๋ณํ ์ ์๋ ์์ฑ (๋๋ ์์ฑ๋ค์ ์งํฉ)๊ธฐ๋ณธํค(Primary Key) : ํ ์ด๋ธ์ ๋ํํ๋ ์ ์ผํ ํคํ๋ณดํค(Candidate Key) : ๊ธฐ๋ณธํค๊ฐ ๋ ์ ์๋ ๋ชจ๋ ํค๊ธฐ๋ณธํค๋ ํ๋ณดํค ์ค์์ ์ ํํ ํ๋์ ํค์ด๋ค.ํ๋ณดํค๋ ์ํผํค ์ค์์ ์ต์์ฑ์ ๋ง์กฑํ๋ ํค์ด๋ค.์ํผํค(Super Key) : ์ ์ผ์ฑ์ ๋ง์กฑํ์ง๋ง ์ต์์ฑ์ ๋ง์กฑํ์ง ์์ ์ ์๋ ํค์ ์ผ์ฑ(Uniqueness)ํน์ ์์ฑ(๋๋ ์์ฑ๋ค์ ์กฐํฉ)์ด ์ค๋ณต๋์ง ์๊ณ ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ ธ์ผ ํ๋ ์ฑ์ง์ ์ผ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๊ธฐ๋ณธํค(P..
2025.02.10 -
- [Database] ์ ๊ทํ(Normalization), ๋ฐ์ ๊ทํ(Denormalization), ์ด์(Anomaly)์ ๊ทํ(Normalization), ๋ฐ์ ๊ทํ(Denormalization), ์ด์(Anomaly)๋ค์ด๊ฐ๋ฉฐ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ๊ทํ(Normalization)์ ๋ฐ์ ๊ทํ(Denormalization), ์ด์(Anomaly)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ์ ๊ทํ(Normalization)๊ฐ๋ ๋ฐ์ดํฐ์ ์ค๋ณต์ ์ต์ํํ๊ณ , ์ด์ ํ์(Anomalies)์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ตฌ์กฐํํ๋ ๊ณผ์ 1์ฐจ ์ ๊ทํ(1NF), 2NF, 3NF, BCNF, 4NF, 5NF ๋ฑ์ ์ ๊ทํ์ด ์๋ค. ์ฅ์ ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ์ ์ด์ ธ ๊ฐฑ์ ์ด๋ ์ญ์ ์ ํ ๋ฒ๋ง ๋ณ๊ฒฝํด๋ ์ผ๊ด์ฑ์ด ์ ์ง๋๋ค.๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ณณ์ ๋ณด๊ดํ์ง ์์๋ ๋์ด ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์๋ค.ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ์ ์ ๋ฆฌ๋์ด ์์ด ๊ฐฑ์ ์ด์, ์ญ์ ์ด์, ์ฝ์ ์ด์ ๊ฐ์ ๋ฌธ์ ๋ค์..
2025.02.10