/images/profile.png

Hi i'am shy.

์‚ฌ๋‚ด CI/CD ๋„์ž…๊ธฐ

๊ธฐ์กด์˜ ์•„ํ‚คํ…์ณ์™€ ๋ฐฐํฌ ๊ณผ์ • ํŒ€์— ํ•ฉ๋ฅ˜ํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์™€ ์ธํ”„๋ผ ๊ตฌ์„ฑ์„ ๋ณด์•˜๊ณ , ๋ฐฐํฌ๋Š” ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•˜๋Š” ์ง€์— ๋“ค์—ˆ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ•ด์•ผ ๋ ์ง€ ๊ฐ์ด ์˜ค์ง€ ์•Š์•˜๋‹ค. ๊ธฐ์กด์—” ์œ„์™€ ๊ฐ™์ด API Gateway๊ฐ€ EC2์˜ public ip ๋กœ ์š”์ฒญ์„ ๋‚˜๋ˆ ์ฃผ๋Š” ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์—ˆ๋‹ค. ๊ฐœ๋ฐœ ์„œ๋ฒ„ / ์šด์˜ ์„œ๋ฒ„์šฉ API Gateway๊ฐ€ ๋‚˜๋ˆ ์ ธ ์žˆ์—ˆ๊ณ , ๊ฐ๊ฐ์˜ ec2 ์„œ๋ฒ„์— ์ ‘์†ํ•ด์„œ ํŠน์ • ํฌํŠธ์—์„œ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฃฝ์ด๊ณ , ์ƒˆ๋กœ ์›น์„œ๋ฒ„๋ฅผ ๋„์šฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ๊ฐœ๋ฐœ์„œ๋ฒ„์™€ ์šด์˜์„œ๋ฒ„์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๋‚˜๋ˆ ์ ธ์žˆ์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์Šˆ๋“ค์„ ์–ด๋–ค ์ƒ๊ฐ์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€๋ฅผ ์ž‘์„ฑํ•˜๊ณ ์ž ํ•œ๋‹ค.

[Spring] Auto Configuration

Auto Configuration ? auto configuration์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ classspath ๋‚˜ bean์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•„์š”ํ•œ ์„ค์ •์„ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด, application.yaml ์— db connection ๊ณผ ๊ด€๋ จ๋œ property๋ฅผ ์ •์˜ํ•˜๊ณ  db dependency๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ db์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์‰ฝ๊ฒŒํ•  ์ˆ˜ ์žˆ๋‹ค. auto configuration์€ @SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜์— ํฌํ•จ๋œ @EnableAutoConfiguration ์–ด๋…ธํ…Œ์ด์…˜์— ์˜ํ•ด ํ™œ์„ฑํ™”๊ฐ€ ๋œ๋‹ค. ์ž‘๋™์›๋ฆฌ @EnableAutoConfiguration ์— ์˜ํ•ด ํ™œ์„ฑํ™” META-INF/spring.factories์— ์ •์˜๋œ ๊ฒƒ์„ ๋ณด๊ณ  ์–ด๋–ค ํด๋ž˜์Šค๋“ค์„ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•  ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. ์กฐ๊ฑด๋ถ€๋กœ ๊ตฌ์„ฑ @Conditional~~ annotation์— ์˜ํ•ด ํŠน์ • ํด๋ž˜์Šค๊ฐ€ classpath์— ์กด์žฌํ•  ๋•Œ๋งŒ ํ™œ์„ฑํ™”๋ฅผ ์‹œํ‚ค๊ฑฐ๋‚˜, ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ๋งŒ ํ™œ์„ฑํ™”๋ฅผ ์‹œํ‚จ๋‹ค.

[Network] docker network ๊ตฌ์„ฑ

์ด์ „ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ผ ์—์„œ ๋†’์€ ์ˆ˜์ค€์—์„œ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ง€ ์•Œ์•„๋ดค์—ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” docker๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์ถ•ํ•ด๋ณด๊ณ  ์ข€ ๋” ๋‚ฎ์€ ์ปค๋„ ์ˆ˜์ค€์—์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š”์ง€ ๊ทธ ์•ˆ์—์„œ ์“ฐ์ด๋Š” ์šฉ์–ด/ ๋ช…๋ น์–ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. red ์™€ blue container ๊ฐ€ ์„œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์„๊นŒ ? ์ฒซ๋ฒˆ์งธ๋กœ ์‹ค์Šตํ•ด๋ณผ ๋‚ด์šฉ์€, host pc ๋‚ด์— red/blue container๋ฅผ ์ƒ์„ฑํ•˜๊ณ  2๊ฐœ์˜ network๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋Š” ๊ฒƒ์ด๋‹ค. ๋„์ปค๋กœ๋Š” ์ด๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

[Network] ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ผ

์œ„ ๊ทธ๋ฆผ์€ ์ง‘์—์„œ ์™€์ดํŒŒ์ด์— ์ ‘์†ํ•œ ๋‚ด ์ปดํ“จํ„ฐ๊ฐ€ ํŠน์ • ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์ด๋‹ค. ์œ„ ๊ทธ๋ฆผ์„ ํ† ๋Œ€๋กœ, ๋„คํŠธ์›Œํฌ๋ฅผ ์ด์šฉํ•ด ํ†ต์‹ ์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ DNS / DHCP / NAT / router / gateway / Network Namespace / ISP / OSI ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ๊ฐ€ ์™€์ดํŒŒ์ด์— ์—ฐ๊ฒฐํ–ˆ์„ ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ผ DHCP ๋กœ ๋ถ€ํ„ฐ private IP, subnet mask, default gateway address, DNS ์„œ๋ฒ„ ์ฃผ์†Œ๋“ฑ์„ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค. ์™€์ดํŒŒ์ด์— ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ๋Š” ๊ณ ์œ ์˜ ip๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋Š”๋ฐ ์ด ip๋Š” ์™ธ๋ถ€์—์„œ๋Š” ์•Œ ์ˆ˜ ์—†๋„๋ก ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

[Project] Youtube Shorts Generator : dall3 api ๋ฅผ ์“ฐ๋ฉด์„œ

Youtube Shorts Generator ๋Š” content ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ gpt์—๊ฒŒ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ํ•˜๊ณ , ์Šคํ† ๋ฆฌ๋ณด๋“œ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์”ฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ฐ ์”ฌ์˜ ์ด๋ฏธ์ง€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ dalle-3 ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์Šคํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ์‹œํ‚ค๊ณ , ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ stability AI ์˜ img2vid ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์งง์€ ๋น„๋””์˜ค๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ชจ๋“  ์”ฌ์„ ์ด์–ด ๋ถ™์ธ ํ›„, ๋Œ€๋ณธ์„ ์ž…ํžˆ๊ณ , ์Œ์„ฑ์„ ์ž…ํ˜€ ์š”์ฆ˜ ์œ ํ–‰ํ•˜๋Š” shorts๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์˜ค๋Š˜ ํฌ์ŠคํŒ…ํ•  ์ฃผ์ œ๋Š”, ์ž‘์„ฑ๋œ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” dalle3 ๋ชจ๋ธ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ–ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ƒ๊ฒผ๋˜ ๋ฌธ์ œ์™€ ๊ทธ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์„ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

[Kafka] Consumer

consumer ์—ญํ•  ์ปจ์Šˆ๋จธ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์–ด๋Š ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ offset ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์นดํ”„์นด์—์„œ๋Š” consumer ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” offset์„ __consumer_offsetํ† ํ”ฝ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋กํ•˜๋Š” ์ •๋ณด์—๋Š” ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน, topic, partition ์ •๋ณด๊ฐ€ ํ•จ๊ป˜ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ปจ์Šˆ๋จธ๋Š” ์–ธ์ œ๋‚˜ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์„ leave/join ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ ๊ณผ์ •์—์„œ ์ƒˆ๋กญ๊ฒŒ join ๋œ consumer๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฃน ์ฝ”๋””๋„ค์ดํ„ฐ ๊ทธ๋ฃน ์ฝ”๋””๋„ค์ดํ„ฐ์˜ ์—ญํ• ์€ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ ๊ณผ์ •์„ ํ†ตํ•ด ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน๋‚ด ์ปจ์Šˆ๋จธ๋“ค์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.