์ „์ฒด ๊ธ€ 181

[Project] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋“œ๋ผ์ด๋ฒ„ ์„ ํƒ

์ƒํ™ฉ์ฑ—๋ด‡ ์ฝ”๋“œ๋ฅผ ๋น„๋™๊ธฐ๋กœ ๋ฐ”๊พธ๊ณ  ์žˆ๋Š”๋ฐ MySQL DB์™€ ์—ฐ๊ฒฐํ•˜๋Š” pymysql ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋™๊ธฐ์‹์ด๋‹ค.๋”ฐ๋ผ์„œ pymysql์„ ๋Œ€์ฒดํ•  MySQL ๋™๊ธฐ์‹ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.๊ทธ๋ž˜๋„ ์„ฑ๋Šฅ์ด ์ข‹์€ ๊ฑธ ํƒํ•˜๊ณ  ์‹ถ๋‹ค.์„ค๋ช…DB ๋“œ๋ผ์ด๋ฒ„(DB ์–ด๋Œ‘ํ„ฐ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.python์— connect(): Application๊ณผ Database๋ฅผ ์—ฐ๊ฒฐconnection์— ๋Œ€ํ•œ pool ๊ด€๋ฆฌDB ํ’€์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ•˜๋‚˜๋ฅผ ๋นŒ๋ ค์˜จ๋‹ค. ์—ฐ๊ฒฐ์„ ๋นŒ๋ ค์˜จ ํ›„ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ๋ฐ˜๋“œ์‹œ ์—ฐ๊ฒฐ์„ ํ’€์— ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์—ฐ๊ฒฐ์„ ๋นŒ๋ ค์™”๋‹ค๋ฉด ๊ทธ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์‹ค์ œ๋กœ SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด๋ฅผ cursor()๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ฆ‰ DB ์—ฐ๊ฒฐ ์œ„์—์„œ SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. async/await..

[Project] onErrorResume ํƒ€์ž„ ์•„์›ƒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

์ƒํ™ฉํŒŒ์ด์ฌ ์‘๋‹ต์ด ๋Šฆ์–ด์งˆ ๊ฒฝ์šฐ AsyncRequestTimeoutException์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์„œ๋น„์Šค ๋‹จ์˜ onErrorResume์—์„œ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๊ณ  ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.๋‚˜๋Š” WebClientRequestException๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ onErrorResume์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.ํŒŒ์ด์ฌ์—์„œ ์„œ๋ฒ„ ๋กœ๋”ฉ ์‹œ DB ์—ฐ๊ฒฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด์„œ ์Šคํ”„๋ง์—์„œ๋Š” WebClientRequestException์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ onErrorResume์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ํ•ด ์ฃผ์—ˆ๋‹ค. ์„ค๋ช…1. ํƒ€์ž„ ์•„์›ƒ์„ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ๋ฐ ๋ณดํ˜ธ์„œ๋น„์Šค ๊ฑฐ๋ถ€ (DoS) ๊ณต๊ฒฉ ๋ฐฉ์ง€์—๋„ ๋„์›€์ด ๋œ๋‹ค์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ ์žฅ์•  ์ „ํŒŒ ๋ฐฉ์ง€ํ•˜๋‚˜์˜ ๋А๋ฆฌ๊ฑฐ๋‚˜ ์žฅ์• ๊ฐ€ ์žˆ๋Š” ์™ธ๋ถ€ ์„œ๋น„์Šค๋กœ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด..

[Project] ์ฑ—๋ด‡ ํŒŒ์ด์ฌ ์‘๋‹ต ํ๋ฆ„, ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ •๋ฆฌ

LifeSpan@app.on_event("startup") ์ง€, deprecatedlifespan ๋ฐฉ์‹๊ณผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋ฐฉ์‹์€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์„œ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋“ฑ๋ก๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰@app.on_event("startup")@app.on_event("shutdown")- ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋‹น ํ•œ ๋ฒˆ๋งŒ ์ •์˜ ๊ฐ€๋Šฅ@asynccontextmanagerasync def lifespan(app: FastAPI): # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์ „ yield # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์ „ app = FastAPI(lifespan=lifespan) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•  ๋•Œ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ ์ž‘์—…์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒฝ์šฐ ๋งŽ์Œ์ „์—ญ ๋ณ€์ˆ˜ ํ•˜๋‚˜์˜ ์ปจํ…์ŠคํŠธ์—์„œ ๊ฐ™์ด ์‚ฌ์šฉํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌyield..

[Project] CORS ๊ฐœ๋… ๋ฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ

CORS(Cross-Origin Resource Sharing): ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ Origin: URL์—์„œ ๋„๋ฉ”์ธ + ํ”„๋กœํ† ์ฝœ + ํฌํŠธ์ด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋‹ค๋ฅด๋ฉด CORS ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚œ๋‹คCORS๋ฅผ ์„ค์ •ํ•œ๋‹ค๋Š” ๊ฑด ์ถœ์ฒ˜๊ฐ€ ๋‹ค๋ฅธ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ๋ธŒ๋ผ์šฐ์ €์— ์˜ํ•ด ์‹คํ–‰, ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Œ SOP(Same-Origin Policy): ๋™์ผ-์ถœ์ฒ˜ ์ •์ฑ…์„œ๋กœ ๋‹ค๋ฅธ ์ถœ์ฒ˜์ผ ๋•Œ ๋ฆฌ์†Œ์Šค ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฐจ๋‹จํ•˜๋Š” ์ •์ฑ… CORS๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœํ•˜๊ธฐ ํŽธํ•˜๋„๋ก ๋ณด์•ˆ์„ ์™„ํ™”์‹œ์ผœ์ฃผ๋Š” ์žฅ์น˜, SOP๊ฐ€ ์˜ค๋ฅ˜์˜ ์ง„์งœ ๋ฒ”์ธ[์ฐธ๊ณ : https://docs.tosspayments.com/resources/glossary/cors] ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ํŠน์ • ์‚ฌ์ดํŠธ์— ์š”์ฒญ์„ ๋ณด๋‚ด๋„ ๋˜๋Š”์ง€ ์•Œ ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์„ ๋ฐ›..

[python] IntelliJ ํŒŒ์ด์ฌ ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ •, ์‹คํ–‰ํ™˜๊ฒฝ ๊ตฌ์ถ•

venvconda 1. venv ์‚ฌ์šฉ (Python ๋‚ด์žฅ ๋ชจ๋“ˆ)๋กœ์ปฌ ๋ฒ ์ด์Šคํด๋”(1) ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ •: venv ํด๋” ์ƒ์„ฑ$ python -m venv .venv ์ด๋ ‡๊ฒŒ ํ–ˆ๋”๋‹ˆ python ๋ช…๋ น์–ด๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชป ํ–ˆ๋‹ค. ์‹œ์Šคํ…œ PATH์— ํŒŒ์ด์ฌ ์‹คํ–‰ ํŒŒ์ผ์ด ๋“ฑ๋ก๋˜์ง€ ์•Š์•„ ์ธ์‹ํ•˜์ง€ ๋ชป ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ 'python --version' ํ–ˆ์„ ๋•Œ ์ž˜ ์ž‘๋™๋˜์—ˆ๋˜ ๊ทธ 'python' ๋ช…๋ น์–ด๋กœ ์ ‘๊ทผํ•˜๋‹ˆ ์‹คํ–‰๋˜์—ˆ๋‹ค. (2) ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”$ .venv/Scripts/activate (Windows) // source .venv/bin/activate (macOS/Linux) ๊ทธ๋žฌ๋”๋‹ˆ ์ด์ œ๋Š” ๋ณด์•ˆ ๊ด€๋ จ ๊ถŒํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์œˆ๋„์šฐ ๊ธฐ์ค€ PowerShell์„ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•ด ์‹คํ–‰ ์ •์ฑ…์„ ๋ณ€๊ฒฝํ•ด ์ฃผ..

python 2025.05.30

[AI] ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง - (3) ๊ธฐ๋ณธ๊ณผ ์‹ฌํ™”

[๊ธฐ๋ณธ1: ์ด์ „ ๋‚ด์šฉ ๋ณต์Šต]๊ฐ„๋‹จํ•œ ์ง€์นจ์œผ๋กœ ์ž‘์„ฑ์ง€์นจ > ์ปจํ…์ŠคํŠธ > ํŽ˜๋ฅด์†Œ๋‚˜ > ์˜ˆ์ œ > ์‹œ์ž‘ ๋‹จ์–ด์ง€์นจ๊ณผ ์ปจํ…์ŠคํŠธ๋Š” ํ•„์ˆ˜ ์ž‘์„ฑ์‚ฌ์šฉ ์šฉ๋„์— ๋”ฐ๋ผ ์ถ”๊ฐ€NLP: ์˜ˆ์ œ, ์‹œ์ž‘ ๋‹จ์–ด์ปจํ…์ธ : ํŽ˜๋ฅด์†Œ๋‚˜, ์‹œ์ž‘ ๋‹จ์–ด [๊ธฐ๋ณธ2: ๋ถ€์ • ํ‘œํ˜„ ์ตœ์†Œํ™”ํ•˜๊ธฐ]๋ถ€์ •์ ์ธ ํ‘œํ˜„์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ๋ช…๋ น๋ฌธ ํ˜•ํƒœ๋กœ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž‘์„ฑ๋‘ ๊ฐ€์ง€ ๊ฐ€์„ค๋ฌธ์„œ์˜ ๋ฌธ์žฅ ๋Œ€๋ถ€๋ถ„์ด ๋ถ€์ •์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ๋ถ€์ •์ ์ธ ํ‘œํ˜„์ด ์ฃผ๋Š” ํšจ๊ณผ๋ณด๋‹ค, ๋‹จ์–ด ์ž์ฒด๊ฐ€ ๊ฐ–๋Š” ์˜ํ–ฅ์ด ๋” ํฌ๋‹ค (ex. ์ฝ”๋ผ๋ฆฌ๋ฅผ ์ƒ๊ฐํ•˜์ง€ ๋งˆ)๋ถ€์ • ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ  ํ–ˆ์–ด๋„ ์ž˜ ์ดํ–‰ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์ • ํ‘œํ˜„์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐ”๋ฅผ ๋ช…๋ฃŒํ•˜๊ฒŒ ๋ช…๋ น๋ฌธ ํ˜•ํƒœ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. [๊ธฐ๋ณธ3: ํ”„๋กฌํ”„ํŠธ์˜ ๊ธธ์ด ์‹ ๊ฒฝ์“ฐ๊ธฐ]๊ธธ์ด๊ฐ€ ์–ด๋А ์ˆ˜์ค€์„ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด, ์ง€์นจ์˜ ..

AI 2025.05.25

[AI] ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง - (2) Prompt์˜ ๊ตฌ์„ฑ ์š”์†Œ

์ž‘์—… ์ง€์นจ์ปจํ…์ŠคํŠธํŽ˜๋ฅด์†Œ๋‚˜ ์˜ˆ์ œ์‹œ์ž‘ ๋‹จ์–ด ๋ฐ ๊ตฌ๋ฌธ 1. ์ž‘์—… ์ง€์นจ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ์ง€์‹œํ”„๋กฌํ”„ํŠธ์˜ ์ž‘์„ฑ ๋ชฉ์ (ํ•ต์‹ฌ ๋™์‚ฌ ํฌํ•จ), ์ž‘์—…์˜ ์ฐธ๊ณ  ๋ฒ”์œ„, ์ œ์•ฝ ์กฐ๊ฑด2. ์ปจํ…์ŠคํŠธ3์„ธ๋Œ€ ์ด์ƒ(์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ํ™œ์šฉ) ์ฑ—๋ด‡์—์„œ๋Š” ํ•„์ˆ˜์ ์ธ ์š”์†Œ์ ์ ˆํ•œ ์‘๋‹ต ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์•„์ฃผ ํฐ ๋„์›€, ํ• ๋ฃจ์‹œ๋„ค์ด์…˜(๊ฐ€์งœ ์ •๋ณด ์ƒ์„ฑ) ๊ฐ์†Œ๋„๋ฉ”์ธ ๊ด€๋ จ ์ง€์‹/๋…ธํ•˜์šฐ, ์šฉ์–ด ์ •์˜/์„ค๋ช…, ๊ฐœ์ธํ™” ์ •๋ณดex. ์ดˆ๋“ฑํ•™์ƒ์ด ์–ด๋ ค์›Œ ํ•˜๋Š” ๋‹จ์–ด๋“ค์€ ์‰ฌ์šด ๋‹จ์–ด๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋ ค์šด ๋‹จ์–ด: ํƒœํ™˜, ํ†ตํ™” ๋“ฑex. ๋Œ€๋ฏธ๋ฌด์—ญ: ๋ฏธ๊ตญ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋ฌด์—ญSystem Message(๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆŒ ๋•Œ ์ง€์†์ ์œผ๋กœ ๋ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ, ๊ณตํ†ต ์ •) ์ปจํ…์ŠคํŠธ๋ฅผ ๋”ฐ๋กœ ์จ์ฃผ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ3. ํŽ˜๋ฅด์†Œ๋‚˜๋‹ต๋ณ€์˜ ์–ด์กฐ ๋ฐ ์Šคํƒ€์ผ์‚ฌ์šฉ ์šฉ๋„๋‚˜ ํ™œ์šฉ ๋ถ„์•ผ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํŽ˜๋ฅด์†Œ๋‚˜ ..

AI 2025.05.23

[๋””์ž์ธํŒจํ„ด] Adapter - ์‚ฌ์ด์— ๋ผ์›Œ ์žฌ์‚ฌ์šฉํ•œ๋‹ค

'์ด๋ฏธ ์ œ๊ณต๋œ ๊ฒƒ'๊ณผ 'ํ•„์š”ํ•œ ๊ฒƒ' ์‚ฌ์ด์— ๋“ค์–ด๊ฐ€์„œ ๊ทธ ์‚ฌ์ด๋ฅผ ์ฑ„์šฐ๋Š” ๊ฒƒ์ด ์–ด๋Œ‘ํ„ฐ์˜ ์—ญํ• adapter - ์ ์‘์‹œํ‚ค๋Š” ๊ฒƒ, wrapper ํŒจํ„ด์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆผํ”„๋กœ๊ทธ๋žจ์˜ ์„ธ๊ณ„์—์„œ๋„ ์ด๋ฏธ ์ œ๊ณต๋œ ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๋•Œ ํ•„์š”ํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ์ด์šฉํ•œ๋‹คํด๋ž˜์Šค์— ์˜ํ•œ Adapter ํŒจํ„ด (์ƒ์†์„ ์‚ฌ์šฉํ•œ ํŒจํ„ด)์ธ์Šคํ„ด์Šค์— ์˜ํ•œ Adapter ํŒจํ„ด (์œ„์ž„์„ ์‚ฌ์šฉํ•œ ํŒจํ„ด)1. Banner ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ํ•„์š”ํ•œ Print ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„public class Banner { private String string; public Banner(String string) { this.string = string; } public void showWithParen() { ..

[๋””์ž์ธํŒจํ„ด] Observer - ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์•Œ๋ ค์ค€๋‹ค

๊ด€์ฐฐ ๋Œ€์ƒ์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”ํ•˜๋ฉด ๊ด€์ฐฐ์ž์—๊ฒŒ ์•Œ๋ฆฐ๋‹ค์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ์ˆ ํ•  ๋•Œ ํšจ๊ณผ์ observer, ๋Šฅ๋™์ ์ธ '๊ด€์ฐฐ์ž'์˜ ์˜๋ฏธ์™€๋Š” ๋‹ฌ๋ฆฌ Subject ์—ญ์—์„œ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์„ ์ˆ˜๋™์ ์œผ๋กœ ๊ธฐ๋‹ค๋ฆฐ๋‹ค (Publish-Subscribe)view-model (MVC) Subject ๊ด€์ฐฐ๋˜๋Š” ๋Œ€์ƒ, ๊ด€์ฐฐ์ž์ธ Observer๋ฅผ ๋“ฑ๋ก/์‚ญ์ œํ•˜๋Š” ๋ฉ”์„œ๋“œ, ํ˜„์žฌ ์ƒํƒœ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ ์„ ์–ธ, NumberGenerator ํด๋ž˜์ŠคConcreteSubject ๊ตฌ์ฒด์ ์ธ '๊ด€์ฐฐ๋˜๋Š” ๋Œ€์ƒ', ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋“ฑ๋ก๋œ Observer์— ์•Œ๋ฆฐ๋‹ค, RandomNumberGenerator Observer, Subject๋กœ๋ถ€ํ„ฐ ์ƒํƒœ๊ฐ€ ๋ณ€ํ–ˆ๋‹ค๊ณ  ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค, ์ „๋‹ฌ๋ฐ›๊ธฐ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋Š” ์—ฌ๊ธฐ์„œ update, Observer ์ธํ„ฐํŽ˜์ด์ŠคConcreteSubj..

[JavaScript] HTTP ๋ฉ”์„œ๋“œ๋ณ„ fetch() ์ฝ”๋“œ

fetch() let promise = fetch(url, [options])HTTP ์‘๋‹ต์„ ๋‚˜ํƒ€๋‚ด๋Š” Response ๊ฐ์ฒด๋ฅผ ๋ž˜ํ•‘ํ•œ Promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹คurl: fetch ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋Š” ํ•„์ˆ˜๋กœ ์ž…๋ ฅoptions: ์„ ํƒ ๋งค๊ฐœ๋ณ€์ˆ˜, method๋‚˜ header ๋“ฑ ์ง€์ • ๊ฐ€๋ŠฅPromise ๊ฐ์ฒด ๋ฐ˜ํ™˜์„œ๋ฒ„์—์„œ ์‘๋‹ต ํ—ค๋”๋ฅผ ๋ฐ›์ž๋งˆ์ž fetch ํ˜ธ์ถœ ์‹œ ๋ฐ˜ํ™˜๋ฐ›์€ promise๊ฐ€ ๋‚ด์žฅ ํด๋ž˜์Šค Response ์ธ์Šคํ„ด์Šค์™€ ํ•จ๊ป˜ ์ดํ–‰ ์ƒํƒœ๊ฐ€ ๋จ์ด ๋‹จ๊ณ„๋Š” ์•„์ง body๊ฐ€ ๋„์ฐฉํ•˜๊ธฐ ์ „, ๊ฐœ๋ฐœ์ž๋Š” ์‘๋‹ต ํ—ค๋”๋ฅผ ๋ณด๊ณ  ์š”์ฒญ์ด ์„ฑ๊ณต์ ์ธ์ง€ ํ™•์ธ.then()์€ ๊ฐ ๋‹จ๊ณ„๋ฅผ ๋‹ค์Œ ์ž‘์—…์œผ๋กœ ์˜ˆ์•ฝ, ์ฆ‰ ๊ฒฐ๊ณผ๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ์‹คํ–‰ํ•˜์ง€๋งŒ ์ „์ฒด์ ์œผ๋กœ๋Š” ์ „๋ถ€ ๋น„๋™๊ธฐ (await/async ๋ชจ๋‘)// 1. ์ผ๋ฐ˜์ ์ธ fetch ์š”์ฒญ์€ ๋‘ ๊ฐœ..

FrontEnd 2025.05.13