[๊ธฐํƒ€] ํฌํŠธํฌ์›Œ๋”ฉ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•(iptime)
ยท
๊ธฐํƒ€
์šฐ๋ฆฌ๋Š” ์ข…์ข… ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์˜ ํŠน์ • ์žฅ๋น„๋‚˜ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿด ๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ 'ํฌํŠธํฌ์›Œ๋”ฉ'์ด๋‹ค. ํฌํŠธํฌ์›Œ๋”ฉ์€ ๋งˆ์น˜ ๊ฑด๋ฌผ์˜ ์•ˆ๋‚ด ๋ฐ์Šคํฌ์ฒ˜๋Ÿผ ์™ธ๋ถ€์—์„œ ์˜ค๋Š” ์š”์ฒญ์„ ๋‚ด๋ถ€์˜ ์˜ฌ๋ฐ”๋ฅธ ์žฅ์†Œ๋กœ ์•ˆ๋‚ดํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ตœ๊ทผ ์™ธ์ฃผ์—…์ฒด์— ๋งก๊ธด ์žฅ๋น„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์›๊ฒฉ์œผ๋กœ ์ž์ฃผ ์ ‘์†ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ฒผ๋‹ค. AnyDesk์™€ ๊ฐ™์€ ์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋” ์•ˆ์ •์ ์ด๊ณ  ์ง์ ‘์ ์ธ ์ ‘๊ทผ์„ ์œ„ํ•ด ํฌํŠธํฌ์›Œ๋”ฉ ์„ค์ •์„ ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ํฌํŠธํฌ์›Œ๋”ฉ์ด๋ž€ ๋ฌด์—‡์ธ์ง€, ์„ค์ •์€ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์†Œ๊ฐœํ•œ๋‹ค. ํฌํŠธํฌ์›Œ๋”ฉ์ด๋ž€?ํฌํŠธํฌ์›Œ๋”ฉ์€ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์˜ ์š”์ฒญ์„ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์˜ ํŠน์ • ๊ธฐ๊ธฐ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์„ค์ • ๊ธฐ๋ฒ•์ด๋‹ค. ๊ณต์œ ๊ธฐ๊ฐ€ ์™ธ๋ถ€์™€ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ ์‚ฌ์ด์—์„œ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜๋ฉฐ, ..
[Python] VS Code์—์„œ Python ์ฝ”๋“œ์˜ ์ž๋™ ์žฌ์‹คํ–‰์„ ์œ„ํ•œ ๋ฐฉ๋ฒ•(nodemon)
ยท
Python
React๋‚˜ Node.js ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์ฝ”๋“œ ์ˆ˜์ • ํ›„ ์ž๋™ ์žฌ์‹คํ–‰ ๊ธฐ๋Šฅ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์–ด ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค. ํŠนํžˆ Node.js์—์„œ๋Š” nodemon์ด๋ผ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ํ•œ๋‹ค. ๋ฐ˜๋ฉด, Python ๊ฐœ๋ฐœ ์‹œ์—๋Š” ์ฝ”๋“œ ์ˆ˜์ • ํ›„ ๋งค๋ฒˆ ์ˆ˜๋™์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ข…๋ฃŒ(ctrl + c)ํ•˜๊ณ  ์žฌ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์ €ํ•˜์‹œํ‚ค๊ณ  workflow๋ฅผ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Python ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋„ nodemon์„ ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ์ž๋™์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์žฌ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค. 1๏ธโƒฃ ํ”„๋กœ์ ํŠธ ํด๋” ๋‚ด package.json ํŒŒ์ผ ์ƒ์„ฑnpm init -y 2๏ธโƒฃ nodemon ์„ค์น˜# ์ „์—ญ ์„ค์น˜(์‹œ์Šคํ…œ ์ „์ฒด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)npm i..
[Python] ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ ๋ฐฉ๋ฒ•
ยท
Python
JavaScript๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐฑ์ค€, ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์™”๋‹ค. ์ตœ๊ทผ์—๋Š” ์ธ๊ณต์ง€๋Šฅ์˜ ํ•œ ๋ถ„์•ผ์ธ ์ปดํ“จํ„ฐ ๋น„์ „์— ๊ด€์‹ฌ์„ ๊ฐ€์ง€๋ฉด์„œ, ํŒŒ์ด์ฌ์— ์ต์ˆ™ํ•ด์ง€๊ธฐ ์œ„ํ•ด ์–ธ์–ด๋ฅผ ์ „ํ™˜ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ ์ฒซ๊ฑธ์Œ์œผ๋กœ, ํŒŒ์ด์ฌ์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ณ  ์ •๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋ ค๊ณ  ํ•œ๋‹ค. ํ•œ ์ค„์˜ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ ๋ฐ›๊ธฐinput() ํ•จ์ˆ˜๋Š” ํ•œ ์ค„์˜ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ˆ˜ํ˜•์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด, int() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด์„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.# ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜ ์ž…๋ ฅn = int(input()) ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ ๋ฐ›๊ธฐ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ๋Š” ๋ณดํ†ต ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๊ฒฝ์šฐ list(map(int, inpu..
[Python] IDLE can't import Tkinter. Your Python may not be configured for Tk. ์—๋Ÿฌ ํ•ด๊ฒฐ
ยท
Python
๋ฐœ์ƒํ•œ ์—๋Ÿฌ(๋งฅ ์‚ฌ์šฉ์ž) ํ„ฐ๋ฏธ๋„์—์„œ idle3 ๋ช…๋ น ์ž…๋ ฅ** IDLE can't import Tkinter.Your Python may not be configured for Tk. **๋‚˜๋Š” ๋งฅ ์‚ฌ์šฉ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— IDLE ์…ธ ์ฐฝ์„ ๋„์šฐ๊ธฐ ์œ„ํ•ด ํ„ฐ๋ฏธ๋„์—์„œ idle3 ๋ช…๋ น์„ ์ž…๋ ฅํ–ˆ๋‹ค.ํ•˜์ง€๋งŒ "IDLE can't import Tkinter. Your Python may not be configured for Tk."๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์›์ธ ๋ถ„์„ํ•ด๋‹น ์—๋Ÿฌ๋Š” Python์˜ Tkinter ๋ชจ๋“ˆ์ด ์ œ๋Œ€๋กœ ์„ค์น˜๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜, Python์ด Tkinter ๋ชจ๋“ˆ์„ ์ฐพ์ง€ ๋ชปํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋‹ค. ์—๋Ÿฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•1. ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธbrew updatebrew upgrade 2. Homebrew๋ฅผ ์ด์šฉํ•ด Tkin..
[Netlify] FirebaseError: Firebase: Error (auth/invalid-api-key). ์—๋Ÿฌ ํ•ด๊ฒฐ
ยท
๊ธฐํƒ€/Netlify
๐Ÿ”ฅ ๋ฐœ์ƒํ•œ ์—๋ŸฌUncaught FirebaseError: Firebase: Error (auth/invalid-api-key).๋กœ์ปฌ์—์„œ๋Š” ์ž˜ ๋™์ž‘ํ–ˆ์ง€๋งŒ Netlify์— ๋ฐฐํฌ ํ›„ ํ™•์ธํ•ด๋ณด๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๋ฐฐํฌํ•  ๋•Œ ์ฐธ๊ณ ํ•œ ์‚ฌ์ดํŠธ(https://create-react-app.dev/docs/deployment#netlify) ์›์ธ ๋ถ„์„ํ•ด๋‹น ์—๋Ÿฌ์— ๋Œ€ํ•ด ๊ธ€์„ ์“ด ์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐพ์•„์„œ ์ฝ์–ด๋ณด๋‹ˆ ๋‹ค์Œ์˜ ๊ฒฝ์šฐ์— ์ด๋Ÿฌํ•œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•œ๋‹ค..env ํŒŒ์ผ์ด ๋ฃจํŠธ์— ์—†๋Š” ๊ฒฝ์šฐAPI ํ‚ค๊ฐ€ ์ž˜๋ชป๋œ ๊ฒฝ์šฐfirebaseConfig๋ฅผ exportํ•˜๊ณ , ๋‹ค๋ฅธ JS ํŒŒ์ผ์—์„œ import ํ•  ๊ฒฝ์šฐ ๋กœ์ปฌ์—์„œ๋Š” ์ž˜ ๋™์ž‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Netlify์—์„œ ๋‚ด๊ฐ€ ์„ค์ •ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ œ๋Œ€๋กœ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐ..
[React] ๋ฆฌ์•กํŠธ์˜ Key์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž
ยท
Frontend/React
ํ•œ ํšŒ์‚ฌ์˜ ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์—์„œ ๋ฆฌ์•กํŠธ์˜ key์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ๋ฐ›์•˜๋‹ค. ํ•ด๋‹น ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋Œ€๋‹ต์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ทธ๋™์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ํ•ญ๋ชฉ์— key๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋„ˆ๋ฌด ๋‹น์—ฐ์‹œํ•œ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋ฐฐ์—ด์—์„œ ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง const people = [ { id: 0, name: 'Creola Katherine Johnson', profession: 'mathematician', }, { id: 1, name: 'Mario José Molina-Pasquel Henríquez', profession: 'chemist', }, ]; export default function List() { const listItems = people.map((person) =>..
[Sequelize] Sequelize findAndCountAll ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ์‹œ count๊ฐ€ ์˜ˆ์ƒ๋ณด๋‹ค ๋” ๋งŽ์ด ์นด์šดํŒ… ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
ยท
Backend/Sequelize
๐Ÿ”ฅ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ getBoards ํ•จ์ˆ˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์‹œ๊ธ€ ์ „์ฒด๋ฅผ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜๋‹ค. (๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๊ด€๋ จ ์—†๋Š” ์ฝ”๋“œ ์ผ๋ถ€ ์ƒ๋žต) /* ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ•จ์ˆ˜๋“ค(์ฐธ๊ณ ์šฉ) const getPagination = (page, size) => { const limit = size ? +size : 10; // ๊ฐ€์ ธ์˜ฌ ๋ฐ์ดํ„ฐ ์–‘ const offset = page ? page * limit : 0; // ๊ฐ€์ ธ์˜ฌ ๋ฐ์ดํ„ฐ์˜ ์ดˆ๊ธฐ ์œ„์น˜๊ฐ’ return { limit, offset }; }; const getPagingData = (data, page, limit) => { // count: where ์ ˆ, ์—ฐ๊ฒฐ ๊ด€๊ณ„ ๋“ฑ์˜ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ ˆ์ฝ”๋“œ์˜ ์ „์ฒด ๊ฐœ์ˆ˜ // rows: where ์ ˆ, ์—ฐ๊ฒฐ ๊ด€..
[React] onKeyDown, onKeyUp ์ด๋ฒคํŠธ, ํ•œ๊ธ€ ์ž…๋ ฅ ์‹œ ํ•จ์ˆ˜ ๋‘ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
ยท
Frontend/React
๐Ÿ”ฅ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์—”ํ„ฐ(Enter) ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ชฉ๋ก์— ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋˜๊ณ  input ์ฐฝ์€ ๋น„์›Œ์ง€๋„๋ก ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ ์™ ์ง€ ๋ชจ๋ฅด๊ฒŒ ํ•จ์ˆ˜๊ฐ€ ๋‘ ๋ฒˆ ์‹คํ–‰๋˜๋ฉด์„œ ๊ธฐ์กด ํ…์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๊ธ€์ž๊ฐ€ ๋ชฉ๋ก์— ์ถ”๊ฐ€๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹คโ—๏ธ ์›์ธ ๋ถ„์„ ๊ฒ€์ƒ‰ํ•ด๋ณธ ๊ฒฐ๊ณผ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•œ๊ธ€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (์˜์–ด๋กœ ์ž…๋ ฅํ•˜๋ฉด ํ‚ค ์ด๋ฒคํŠธ๊ฐ€ ์ค‘๋ณต์œผ๋กœ ๋ฐœ์ƒํ•˜์ง€ โŒ) ๊ตฌ์ฒด์ ์œผ๋กœ ์œ„ GIF๋ฅผ ๋ณด๋ฉด ํ•œ๊ธ€ ์ž…๋ ฅ ์‹œ ์ž…๋ ฅ ์ค‘์ธ ๊ธ€์ž ์•„๋ž˜ ๊ฒ€์€ ๋ฐ‘์ค„์ด ์ƒ๊ธฐ๋Š”๋ฐ ํ•ด๋‹น ๋ฐ‘์ค„์ด ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ํ‚ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•จ์ˆ˜๊ฐ€ ๋‘ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํ•œ๊ธ€์˜ ๊ฒฝ์šฐ ์ž์Œ๊ณผ ๋ชจ์Œ์˜ ์กฐํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ์กฐํ•ฉ ๋ฌธ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธ€์ž๊ฐ€ ์กฐํ•ฉ ์ค‘์ธ์ง€ ์กฐํ•ฉ์ด ๋๋‚œ ์ƒํƒœ์ธ์ง€๋ฅผ ์•Œ ์ˆ˜ ์—†์–ด ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์ด๋‹ค. ๐Ÿงฏ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ..
_์„ฑํ˜ธ_
๐ŸŒฑ ์„ฑํ˜ธ ๋ธ”๋กœ๊ทธ