Blue/Green ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์‹œ ๊ตฌ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์–ธ์ œ ์ข…๋ฃŒํ•ด์•ผ ํ• ๊นŒ? (graceful shutdown)

Blue/Green ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์‹œ ๊ตฌ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์–ธ์ œ ์ข…๋ฃŒํ•ด์•ผ ํ• ๊นŒ? (graceful shutdown)

1. ๊ฐœ์š”์ง„ํ–‰ ์ค‘์ธ Jikgong ์„œ๋น„์Šค์—์„œ Nginx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Blue/Green  ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์ „๋žต์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ ์‹œ ๋‹ค์šด ํƒ€์ž„์„ ์ตœ์†Œํ™” ์‹œ์ผฐ๋‹ค.  ๊ทธ ๊ณผ์ •์—์„œ ์ž‘์„ฑํ•œ deploy.sh ํŒŒ์ผ์—” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด์žˆ๋‹ค. # ๊ธฐ์กด์— ์‹คํ–‰ ์ค‘์ด์—ˆ๋˜ docker-compose๋Š” ์ข…๋ฃŒ์‹œ์ผœ์ค๋‹ˆ๋‹ค.echo "jikgong-${TERMINATE_CONTAINER} down"sudo docker-compose -f docker-compose.${TERMINATE_CONTAINER}.yml down --rmi all ์ด ๋ถ€๋ถ„์ด ๋ฌธ์ œ์˜€๋‹ค. ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ Blue/Green ๋ฐฉ์‹์˜ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด 1. ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™2. ์ง€์†์ ์ธ ํ—ฌ์Šค์ฒดํฌ๋กœ ๊ตฌ๋™ ์™„๋ฃŒ ํ™•์ธ3. ๊ตฌ๋™ ..

  • textsms
AWS RDS์— ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผํ•ด๋ณด์ž (EC2 ํ„ฐ๋„๋ง)

AWS RDS์— ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผํ•ด๋ณด์ž (EC2 ํ„ฐ๋„๋ง)

1. ๊ฐœ์š”์ตœ๊ทผ ์•„๋ฌด์ƒ๊ฐ์—†์ด RDS๋ฅผ ํผ๋ธ”๋ฆญ์œผ๋กœ ์—ด์–ด๋’€๋‹ค๊ฐ€ ์š•(?)์„ ๋จน๊ณ  ์ˆ˜์ •ํ•œ ๊ณผ์ •์— ๋Œ€ํ•ด ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค.     2. ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค ํ—ˆ์šฉ ์—ฌ๋ถ€๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด RDS๋ฅผ ๋งŒ๋“œ์‹  ๋ถ„๋“ค์€ ๋Œ€๋ถ€๋ถ„ ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ–ˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐ์ด ๋“ ๋‹ค. "RDS ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค" ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ ๊ตฌ๊ธ€๋ง ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๋ธ”๋กœ๊ทธ๋“ค์ด ๋งŽ์ด ๋ณด์ธ๋‹ค.   ์˜ˆ์ „์— ๋‚˜๋„ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ RDS์— ์ ‘๊ทผํ•˜๋ ค ํ•˜๋Š”๋ฐ ์ ‘๊ทผ์ด ๋ง‰ํ˜”๊ณ  ๊ตฌ๊ธ€๋งํ•ด์„œ ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค๋ฅผ ์—ด์–ด์คฌ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค.  ํ•˜์ง€๋งŒ ์™ธ๋ถ€์—์„œ DB์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š”๊ฑด ์œ„ํ—˜ํ•˜๋‹ค. EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ RDS ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๋ฉด ์™ธ๋ถ€์—์„œ ์ ‘์†ํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋”์šฑ ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค๋ฅผ ๋ง‰์„ ๊ฒฝ์šฐ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ๋ฐฉ๋ฒ•์ด ์—†์ง€ ์•Š๋Š๋ƒ? ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Š” ๊ฐ™์€ VPC..

  • textsms
์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ, ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ, ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ ์ฐจ์ด

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ, ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ, ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ ์ฐจ์ด

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

  • textsms
PromTail, Loki, Grafana๋กœ ๋กœ๊ทธ ์ˆ˜์ง‘ ํ™˜๊ฒฝ ๊ตฌ์ถ•

PromTail, Loki, Grafana๋กœ ๋กœ๊ทธ ์ˆ˜์ง‘ ํ™˜๊ฒฝ ๊ตฌ์ถ•

1. ๊ฐœ์š”๋กœ๊ทธ ์ˆ˜์ง‘์„ ํ•˜๊ธฐ ์œ„ํ•œ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ํ•˜๋ฉด ๋‹น์—ฐํžˆ ELK(Elasticsearch, Logstash, Kibana)๋ฅผ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌด๊ฑฐ์šด ELK๋ฅผ ๊ฐ๋‹นํ•˜๊ธฐ์—” ์„œ๋ฒ„ ์ŠคํŽ™์ด ๋‚ฎ์•˜๊ณ , ๋น„๊ต์  ๊ฐ€๋ณ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” PromTail, Loki, Grafana๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.  ๋˜ํ•œ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘์€ Prometheus, Grafana๋กœ ์ด๋ฏธ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„์ž…์˜ ๊ทผ๊ฑฐ๋Š” ๋”์šฑ ๋ช…ํ™•ํ–ˆ๋‹ค.   ์–ด์ฉŒ๋‹ค๋ณด๋‹ˆ ๋กœ๊ทธ ์ˆ˜์ง‘ ํ™˜๊ฒฝ ๊ตฌ์ถ•๋งŒ 3๋ฒˆ์งธ์ด๋‹ค. Cloud Watch, ELK, Loki..       2. Grafana & Promtail & Loki ์„ค์น˜ Grafana๋Š” ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ œ๊ณต๋˜๋Š” ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ์‹œ๊ฐํ™” ํ”Œ๋žซํผ์ด๋‹ค. ๊ทธ๋ผํŒŒ๋‚˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋Œ€์‹œ๋ณด๋“œ์™€ ๊ทธ๋ž˜ํ”„ ..

  • textsms
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ž„๊ณ„์น˜ ๋„๋‹ฌ ์‹œ Slack์œผ๋กœ ์•Œ๋ฆผ ๋ฐ›์•„๋ณด๊ธฐ (Grafana Alert)

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ž„๊ณ„์น˜ ๋„๋‹ฌ ์‹œ Slack์œผ๋กœ ์•Œ๋ฆผ ๋ฐ›์•„๋ณด๊ธฐ (Grafana Alert)

1. ๊ฐœ์š”์˜ˆ์ „์— ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค, ๊ทธ๋ผํŒŒ๋‚˜๋ฅผ ๋„์ปค๋กœ ๋„์›Œ ์Šคํ”„๋ง ๋ถ€ํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๋งค๋ฒˆ ๋ˆˆ์œผ๋กœ๋งŒ ํ•˜๊ธฐ๋Š” ํž˜๋“ค๋‹ค. ๊ทธ๋ผํŒŒ๋‚˜์—์„  ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด slack, email ๋“ฑ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋กœ ์•Œ๋ฆผ์„ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ๋‹ค.  ์‚ฌ์‹ค ์ฒ˜์Œ ๋ชจ๋‹ˆํ„ฐ๋ง ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ–ˆ์„ ๋•Œ๋„ slack์œผ๋กœ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋„๋ก ํ•˜๊ณ ์‹ถ์—ˆ๋Š”๋ฐ, PromQL ๋‹ค๋ฃจ๋Š”๋ฐ ๋ฏธ์ˆ™ํ•ด์„œ ์‹คํŒจํ–ˆ์—ˆ๋‹ค.  ์ด๋ฒˆ์— ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•ด์„œ ๊ธฐ๋กํ•ด๋‘๋ ค ํ•œ๋‹ค.       2. Slack ์„ค์ •๋จผ์ € ์•Œ๋žŒ ๋ฉ”์‹œ์ง€๋ฅผ Slack์œผ๋กœ ์ „๋‹ฌ๋ฐ›๊ธฐ ์œ„ํ•ด Slack์˜ Web Hook ์„ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.   Slack App ์ƒ์„ฑํ•˜๊ธฐ Slack API ํ™ˆํŽ˜์ด์ง€์— ์ ‘์†ํ•œ ํ›„ ๋กœ๊ทธ์ธ ํ•ด์ค€๋‹ค. ๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, Create New App ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด Slack App์„ ์ƒ์„ฑํ•ด..

  • textsms
์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ณ ๋ คํ•œ AI ๋ชจ๋ธ ์žฌํ•™์Šต ์Šค์ผ€์ค„๋ง ํ™˜๊ฒฝ ๊ตฌ์ถ• (crontab)

์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ณ ๋ คํ•œ AI ๋ชจ๋ธ ์žฌํ•™์Šต ์Šค์ผ€์ค„๋ง ํ™˜๊ฒฝ ๊ตฌ์ถ• (crontab)

1. ๊ฐœ์š” ์กธ์—… ์ž‘ํ’ˆ์œผ๋กœ POI (Point Of Interest) ์ถ”์ฒœ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ํŒ€์› ์ค‘ 2๋ช…์ด Python์„ ์‚ฌ์šฉํ•˜์—ฌ AI ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ถ€๋ถ„์„ ๋งก์•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ DB์— ๋„ฃ๊ณ , ํ•™์Šต๋œ AI ๋ชจ๋ธ์„ ์„œ๋น„์Šค๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ์—ญํ• ์„ ๋งก์•˜๋‹ค. AI ๋ชจ๋ธ์˜ ํ•™์Šต ๋ฐ์ดํ„ฐ๋กœ๋Š” Yelp์˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์…‹์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋ฐ์ดํ„ฐ์…‹์—๋Š” ์•ฝ 900๋งŒ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๊ณ , ์ด ๋ฐ์ดํ„ฐ์™€ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AI๋ฅผ ์žฌํ•™์Šตํ•ด์•ผ ํ–ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” Spring ์„œ๋ฒ„๋ฅผ ๋„์šฐ๊ณ , ์Šคํ”„๋ง ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Python ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜์—ฌ ์žฌํ•™์Šต์„ ์ง„ํ–‰ํ•  ๊ณ„ํš์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€์šฉ..

  • textsms