๋ฐ˜์‘ํ˜•

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ 490

next.js ์—์„œ https ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฒ•

"scripts": { "dev": "next dev --experimental-https"}package.json ์— dev๋ถ€๋ถ„ ์ˆ˜์ • ํ›„ npm run dev ๋กœ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด http๊ฐ€ ์•„๋‹Œ https localhost ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋จ ์•ˆ๋œ๋‹ค๋ฉด , ๋‹ค์Œ๊ณผ๊ฐ™์ด ์„ค์น˜ ํ›„ ์‹คํ–‰npm i next@latest react@latest react-dom@latest eslint-config-next@latest ์ง„์งœ ๋„ˆ๋ฌด ํŽธํ•˜๋‹ค

react์—์„œ props๋ž€?

Props๋Š” React์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Props๋Š” "properties"์˜ ์ค„์ž„๋ง๋กœ, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Props๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๋ฉฐ, ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ํ•˜์—ฌ, ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋™์ž‘์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.Props ์‚ฌ์šฉ ๋ฐฉ๋ฒ•Props๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:Props ์ „๋‹ฌํ•˜๊ธฐ: ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ props๋ฅผ ์ „๋‹ฌํ•  ๋•Œ๋Š”, ์ž์‹ ์ปดํฌ๋„ŒํŠธ ํƒœ๊ทธ์˜ ์†์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.jsx// ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธfunction ParentComponent() { return ;}Props ์‚ฌ์šฉํ•˜๊ธฐ: ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ props๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜..

ํƒ€์ž…์Šคํฌ๋ฆฌํŠธ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ž€? (๊ฐœ๋…, ์‚ฌ์šฉ๋ฒ•)

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(Typescript)์—์„œ ์ธํ„ฐํŽ˜์ด์Šค(interface)๋Š” ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด๊ฐ€ ํŠน์ • ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ณ  ์—๋Ÿฌ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํด๋ž˜์Šค, ํ•จ์ˆ˜, ๋ฐฐ์—ด ๋“ฑ ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ ๋ฐฉ๋ฒ•์ธํ„ฐํŽ˜์ด์Šค๋Š” interface ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์•ˆ์— ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ ธ์•ผ ํ•  ์†์„ฑ๊ณผ ๊ทธ ํƒ€์ž…์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.typescriptinterface Person { name: string; age: number;}์œ„ ์˜ˆ์‹œ์—์„œ Person ์ธํ„ฐํŽ˜์ด์Šค๋Š” name๊ณผ age ๋‘ ๊ฐ€์ง€ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ,..

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ์›นํŒฉ์ด๋ž€?

์›นํŒฉ(Webpack)์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JS) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์ •์  ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์ž…๋‹ˆ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์ž์›(HTML, CSS, ์ด๋ฏธ์ง€, JS ํŒŒ์ผ ๋“ฑ)์„ ๋ชจ๋‘ ๋ชจ๋“ˆ๋กœ ๋ณด๊ณ , ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ๋“ค์„ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋กœ ๋งŒ๋“ค์–ด ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฒˆ๋“ค๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์›นํŒฉ์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชจ๋“ˆ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ์ตœ์ข…์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ž์›๋“ค์„ ๋ฒˆ๋“ค๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›นํŒฉ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: ๋กœ๋”(Loaders): ์›นํŒฉ์€ ์˜ค์ง ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ JSON ํŒŒ์ผ๋งŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›นํŒฉ์ด ๋‹ค๋ฅธ ํƒ€์ž…์˜ ํŒŒ์ผ๋“ค์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, CSS, ์ด๋ฏธ์ง€, HTML ํŒŒ์ผ๋“ค์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜..

fastAPI pydamic์œผ๋กœ ์Šคํ‚ค๋งˆ ์„ค์ •ํ•˜๊ธฐ

schema.py ์— Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ ๋ฐ ์‘๋‹ต ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ ์˜ˆ์‹œ: from pydantic import BaseModel from typing import Optional class JapaneseBase(BaseModel): type: Optional[str] = None letter: str pronounciation: str audio: Optional[str] = None lesson: Optional[int] = None img: Optional[str] = None # ์„ ํƒ์  ํ•„๋“œ vid: Optional[str] = None # ์„ ํƒ์  ํ•„๋“œ class JapaneseCreate(JapaneseBase): pass ๋‹ค์‹œ routers/ ํด๋”์˜ ํ•ด๋‹น ํŒŒ์ผ๋กœ๊ฐ€์„œ, ๋ผ์šฐํ„ฐ์— ..

FastAPI ์—์„œ ์˜์กด์„ฑ ์ฃผ์ž… ์ด๋ž€? (Dependency Injection)

FastAPI์˜ "Dependency Injection"์€ FastAPI ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Dependency Injection์€ ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์ด๋Š” ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ์œ ์ง€๋ณด์ˆ˜์™€ ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ์„ค๊ณ„ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. FastAPI์—์„œ๋Š” ์ด๋ฅผ ํ†ตํ•ด ๋”์šฑ ๊น”๋”ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ API๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(์žฌ์‚ฌ์šฉ์„ฑ, ํšจ์œจ์„ฑ ์ฆ๊ฐ€์˜ ํšจ๊ณผ) Dependency Injection์˜ ๊ธฐ๋ณธ ์›๋ฆฌ FastAPI์—์„œ Dependency Injection์„ ์‚ฌ์šฉํ•˜๋ฉด, ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , FastAPI๊ฐ€ ์‹คํ–‰ ์‹œ๊ฐ„(runtime)์— ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋กœ์จ, ํ•„์š”ํ•œ ๊ฐ์ฒด๋‚˜ ์„ค์ •, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋“ฑ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•  ..

fastapi๋กœ ๋ผ์šฐํ„ฐ ์ž‘์„ฑ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ

์˜ˆ์ œ์—์„œ ๋ณธ ๋ฐฉ์‹(alemdic ์‚ฌ์šฉ) https://github.com/tiangolo/full-stack-fastapi-template/tree/master/backend/app router = APIRouter( prefix="/", ) @router.get("/list")# /list ๊ฒฝ๋กœ๋กœ GET ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด question_list ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. def question_list(): db = SessionLocal() _question_list = db.query(Question).order_by(Question.create_date.desc()).all() db.close() return _question_list ๋‹จ์  : ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ธ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ..

fastapi ์—์„œ alembic ์‚ฌ์šฉํ•˜๊ธฐ

SQLAlchemy + pydamic ๋ณด๋‹ค๋Š” SQLAlchemy+ alembic๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ถ”์„ธ. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ด ๋” ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Alembic์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ช‡ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ดˆ๊ธฐ ์„ค์ •, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํฌ๋ฆฝํŠธ์˜ ์ƒ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์˜ ์ ์šฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. SQLAlchemy ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ๋จผ์ € Alembic ์„ค์ •์„ ์™„๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„, ๋ชจ๋ธ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Alembic ์„ค์ •: ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์—์„œ $ pip install alembic ; alembic init alembic ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Alembic์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ..

fastAPI ๋กœ ๋ฐฑ์—”๋“œ ์‹œ์ž‘ํ•˜๊ธฐ (ํ™˜๊ฒฝ ์„ธํŒ…, ํด๋” ๊ตฌ์กฐ, mysql ์‚ฌ์šฉ)

flask๋ฅผ ์จ๋ดค๋‹ค๋ฉด ์กฐ๊ธˆ ์ต์ˆ™ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ์‹œ ์ฐธ๊ณ  https://github.com/tiangolo/full-stack-fastapi-template GitHub - tiangolo/full-stack-fastapi-template: Full stack, modern web application template. Using FastAPI, React, SQLModel, Post Full stack, modern web application template. Using FastAPI, React, SQLModel, PostgreSQL, Docker, GitHub Actions, automatic HTTPS and more. - tiangolo/full-stack-fastapi-template git..

mysql ์—์„œ username ์ƒ์„ฑํ•˜๊ณ  ๊ถŒํ•œ์ฃผ๊ธฐ

ํ…Œ์ŠคํŠธ๋ฅผํ•˜๋ ค๋ฉด ๋ฃจํŠธ๋ณด๋‹ค๋Š” ์œ ์ €๋ฅผ ์ƒ์„ฑํ•ด์„œ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. mysql์—์„œ user๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. CREATE USER 'username'@'host' IDENTIFIED BY 'password'; ์—ฌ๊ธฐ์„œ Your password does not satisfy the current policy requirements. ๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ๋•Œ๋ฌธ์ธ๋ฐ SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | ..

๋ฐ˜์‘ํ˜•