๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90

๐Ÿ’ป Programming85

[Kubernetes] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Deployment ๋ฐ Service ํŒŒ์ผ ๊ฐ€์ด๋“œ 1. ๊ฐœ์š”Kubernetes์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ  ์šด์˜ํ•˜๋ ค๋ฉด Deployment์™€ Service ํŒŒ์ผ์ด ํ•„์ˆ˜์˜ˆ์š”. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” deployment.yaml๊ณผ service.yaml์„ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ , ๊ฐ ์•„๊ทœ๋จผํŠธ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณผ๊ฒŒ์š”. 2. Deployment ํŒŒ์ผ (deployment.yaml)Deployment๋Š” Kubernetes์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฆฌ์†Œ์Šค ์ค‘ ํ•˜๋‚˜์˜ˆ์š”.๊ธฐ๋ณธ ์˜ˆ์ œ (deployment.yaml)apiVersion: apps/v1kind: Deploymentmetadata: name: my-app-deployment labels: app: my-appspec: replicas: 3 # ์‹คํ–‰ํ•  Pod ๊ฐœ์ˆ˜ selector:.. 2025. 2. 17.
[Kubernetes] ๋กœ์ปฌ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹ค์Šตํ•˜๊ธฐ - Minikube ํ™œ์šฉ ๐Ÿ’ก ์‹ค์Šต ๊ฐœ์š”์ด ๊ธ€์—์„œ๋Š” Mac์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Minikube)๋ฅผ ํ™œ์šฉํ•˜์—ฌ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ๋‹ค๋ค„๋ณด๋ ค ํ•ด์š”. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆํ™”ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์˜ˆ์š”. ํ•˜์ง€๋งŒ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š”  ๋ณต์žกํ•  ์ˆ˜ ์žˆ์ฃ . ์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ Minikube๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๊ฒฝํ—˜ํ•˜๊ณ , FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. โœ… ์‹ค์Šต ์ˆœ์„œํ™˜๊ฒฝ ์„ค์ •Kubernetes(Minikube, kubectl) ์„ค์น˜Minikube ์‹คํ–‰ ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ ํ™•์ธFastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑDocker๋กœ ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰ ํ…Œ์ŠคํŠธKubernetes์— ๋ฐฐํฌ (deployment.yaml, service.yaml ์ž‘์„ฑ ๋ฐ ์ ์šฉ)๋กœ์ปฌ์—์„œ API .. 2025. 2. 12.
์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ '์•Œ๊ณ ๋ฆฌ์ฆ˜' ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‹จ๊ณ„์ ์ธ ์ ˆ์ฐจ์ด๋‹ค. ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•˜๋ฉด ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฌธ์ œ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์•Œ์•„๋‘ฌ์•ผ๊ฒ ์ง€? (๋งจ๋‚  ๊นŒ๋จน๋Š”๋‹ค)Brute Force๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ๊ณ ๋ คํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋งค์šฐ ์ง๊ด€์ ์ด๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋งค์šฐ ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ๋กœ ์ œํ•œ์ด ์ ๊ฑฐ๋‚˜, ๋ฌธ์ œ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๋‹ค.ํŠน์ง•๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ : ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›€.์‹œ๊ฐ„ ๋ณต์žก๋„: ๋ฌธ์ œ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ O(n^2), O(n!)์™€ ๊ฐ™์€ ๋†’์€ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ.๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์‹œ๋„: ์ตœ์ ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์‹œ๋„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.. 2025. 1. 16.
์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ '์ž๋ฃŒ ๊ตฌ์กฐ' ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹ ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๊ฐ ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ํŠน์„ฑ์„ ์ดํ•ดํ•˜๊ณ , ๋ฌธ์ œ์— ๋งž๊ฒŒ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค...๋Š” ๋ง์€ ์ง„๋ถ€ํ•˜๊ณ  ์•ˆ ๊นŒ๋จน๊ฒŒ ์ ์–ด๋ผ๋„ ๋‘”๋‹ค. 1. ๋ฆฌ์ŠคํŠธ (List)๋ฆฌ์ŠคํŠธ๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ, ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ํŒŒ์ด์ฌ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์ž„.์‹œ๊ฐ„ ๋ณต์žก๋„: ์ธ๋ฑ์Šค ์ ‘๊ทผ O(1), ์‚ฝ์ž…/์‚ญ์ œ O(n) (์ค‘๊ฐ„์— ์‚ฝ์ž…/์‚ญ์ œ ์‹œ)์‚ฌ์šฉ ์‚ฌ๋ก€: ์ˆœ์ฐจ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ, ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜ ์ ‘๊ทผ, ๋ฆฌ์ŠคํŠธ์˜ ๋์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ๋•Œ ์œ ์šฉ# ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑarr = [1, 2, 3]# ๋ฆฌ์ŠคํŠธ์— ์š”์†Œ ์ถ”๊ฐ€arr.append(4) # O(1)# ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ์š”์†Œ ์ ‘๊ทผprint(arr[2]).. 2025. 1. 15.
[FastAPI] API ํ‚ค๋กœ ์ธ์ฆ ์ ์šฉํ•˜๊ธฐ | API KEY ์˜ค๋Š˜์€ FastAPI๋ฅผ ์‚ฌ์šฉํ•ด์„œ API๋ฅผ ์ œ๊ณตํ•  ๋•Œ API ํ‚ค๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ด์š”. API ํ‚ค๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ๋ณผ๊ฒŒ์š” ~!API ํ‚ค๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?API ํ‚ค(API Key)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ณ ์œ  ์‹๋ณ„์ž์˜ˆ์š”. API ํ‚ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์‚ฌ์šฉ๋ผ์š”:์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ: ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด API์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ์‚ฌ์šฉ ์ถ”์  ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง: ์–ด๋–ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋–ค API ํ˜ธ์ถœ์„ ํ–ˆ๋Š”์ง€ ์ถ”์ ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋ง์š”์ฒญ ์ œํ•œ: ํŠน์ • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„ ๋‚ด์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ ์ˆ˜๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Œ FastAPI์—์„œ API ํ‚ค ์ ์šฉํ•˜๊ธฐ API ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด ์ž‘์„ฑํ•˜๊ธฐfr.. 2024. 8. 6.
[python] ํ˜„์žฌ ํŒŒ์ผ์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์†์‰ฝ๊ฒŒ ์ฐพ๊ธฐ: os.path ๋Œ€์‹  pathlib ์‚ฌ์šฉํ•˜๊ธฐ Python์—์„œ ํ˜„์žฌ ํŒŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ์ƒ์œ„๋‚˜ ์ƒ์œ„ ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ๋ฐœ์ƒํ•˜๋Š”๋ฐ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ์ผ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ๊ฐ€ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต ๋งŽ์€ ๋ถ„๋“ค์ด(๊ณผ๊ฑฐ์˜ ๋‚˜๋„...) os ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ, pathlib ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์‰ฝ๊ณ  ์ง๊ด€์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์•„๋ž˜ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! 1. os ๋ชจ๋“ˆ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๋จผ์ €, os ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ํŒŒ์ผ์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณผ๊ฒŒ์š”. import oscurrent_dir = os.path.dirname(os.path.abspath(__file__))print(current_dir) ์ด ๋ฐฉ๋ฒ•์€ __file__ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„, os.p.. 2024. 7. 30.
728x90