๐Ÿ’ซ ๋ชจ๋†€๋ฆฌํ‹ฑ์—์„œ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋กœ ์ „ํ™˜ํ•œ, ๊ทธ๋Ÿฌ๊ณ  ์•„์ง๋„ ์ „ํ™˜์ค‘์ธ ์‚ฌ๋‚ด ํ”„๋กœ์ ํŠธ ์„œ๋ฒ„ ๊ตฌ์„ฑ๋„

์†์žฌ๋ช…ยท2023๋…„ 5์›” 26์ผ
1
post-thumbnail

๐ŸŒˆ ์„œ๋ก 

์•ˆ๋…•ํ•˜์„ธ์š”! ์˜ค๋Š˜์€ ์ €ํฌ ํšŒ์‚ฌ์—์„œ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์˜ ์„œ๋ฒ„ ๊ตฌ์„ฑ๋„์™€ ๊ด€๋ จ๋œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Š
์ง€๋‚œํ•ด๊นŒ์ง€๋Š” NodeJS์™€ Express๋ฅผ ํ™œ์šฉํ•œ ๋ชจ๋†€๋ฆฌํ‹ฑ ์„œ๋ฒ„์˜€์ง€๋งŒ, 2023๋…„์— ๋“ค์–ด์„œ๋ฉฐ ๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ์„ ํ•ด์™”๊ธฐ์— ๋„๋ฉ”์ธ๋ณ„๋กœ ์„œ๋ฒ„ ๋ถ„ํ• ์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ทธ ๊ตฌ์กฐ์™€ ๊ฐ ์„œ๋ฒ„์˜ ์—ญํ• ์— ๋Œ€ํ•ด ์นœ์ ˆํ•˜๊ฒŒ ์„ค๋ช…๋“œ๋ฆฌ๊ณ , ์ค‘์š” ํฌ์ธํŠธ์—๋Š” ์ด๋ชจ์ง€๋ฅผ ํ™œ์šฉํ•ด ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

1. ๐Ÿฐ ์ „์ฒด ์„œ๋ฒ„ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ

ํ˜„์žฌ ๊ตฌ์กฐ๋Š” VM (Virtual Machine)์— Nest.JS๋กœ ๊ฐœ๋ฐœ๋˜์–ด์žˆ๋Š” ๊ฒŒ์ดํŠธ์›จ์ด, ์ฝ˜ํ…์ธ , ๊ฒฐ์ œ ๋“ฑ์˜ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด ๋ชจ๋“  ์„œ๋ฒ„๋“ค์€ PM2๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ ๊ตฌ์กฐ๋Š” VM์—์„œ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค์— ์‚ฌ์šฉ์ž๊ฐ€ ์—†์–ด์„œ ๋น„์šฉ ์ ˆ๊ฐ์„ ์œ„ํ•ด VM์— ์˜ฌ๋ ค๋‘์—ˆ์ง€๋งŒ ํ˜„์žฌ Docker, AKS๋ฅผ ์ ์šฉํ•˜์—ฌ ์ผ๋ถ€ CI/CD๋ฅผ ๊ตฌ์„ฑํ•œ ์ƒํƒœ์ด๋ฉฐ ์ถ”ํ›„ ์„œ๋น„์Šค๋ฅผ ์กฐ๊ธˆ์”ฉ ํ™•์žฅํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ ์šฉํ•ด๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.


๋จผ์ € ์œ„ ์ด๋ฏธ์ง€๊ฐ€ ํ˜„์žฌ ์ €ํฌ์˜ ์„œ๋ฒ„ ๊ตฌ์„ฑ๋„ ์ž…๋‹ˆ๋‹ค.

NestJS Websocket ์„œ๋ฒ„ ๐ŸŒ
Redis ๐ŸŸฅ
MongoDB ๐Ÿ’พ
MariaDB ๐Ÿ“š
Spring Boot ๋กœ๊ทธ ์„œ๋ฒ„ ๐ŸŒฑ
Grafana & Prometheus ๐Ÿ“Š
Kafka & Zookeeper ๐Ÿฆ“

์ด์ œ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์˜ ์—ญํ• ๋“ค์„ ํ•˜๋‚˜์”ฉ ์†Œ๊ฐœํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜

2. ๐Ÿ’ผ ์„œ๋ฒ„ ๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…

2.1 NestJS ์›น์„œ๋ฒ„ ๋ฐ ์›น์†Œ์ผ“ ์„œ๋ฒ„ ๐ŸŒ

NestJS๋กœ ๊ฐœ๋ฐœ๋œ MSA ๊ตฌ์กฐ์˜ ์›น์„œ๋ฒ„๋“ค์€ ๊ฐ๊ฐ์˜ ๋„๋ฉ”์ธ ๋ณ„๋กœ ๋‚˜๋ˆ ์ ธ์žˆ์Šต๋‹ˆ๋‹ค.
TMI๋ฅผ ํ•˜์ž๋ฉด ๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์„ฑ์—์„œ ๋ฉ€ํ‹ฐ๋ ˆํฌ๋กœ ๋ถ„๋ฆฌ ํ•˜์˜€์œผ๋ฉฐ, ๊ณต์šฉ ๋ชจ๋“ˆ์€ Azure Artifacts์—์„œ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์›น์†Œ์ผ“ ์„œ๋ฒ„๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CPU ์ฝ”์–ด๋งŒํผ์˜ ์›Œ์ปค ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ, ๋ณ„๋„์˜ VM์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

2.2 Redis ๐ŸŸฅ

์„ธ์…˜ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด Redis๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ์…˜ ๊ด€๋ฆฌ์™€ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

2.3 MongoDB ๐Ÿ’พ

์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋กœ๊ทธ๋“ค์„ MongoDB์—์„œ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

2.4 MariaDB ๐Ÿ“š

๊ณตํ†ต์ ์œผ๋กœ ๋ชจ๋“  ์„œ๋ฒ„๋“ค์ด MariaDB๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

2.5 Spring Boot ๋กœ๊ทธ ์„œ๋ฒ„ ๐ŸŒฑ

Nest.JS๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๊ฐ€ ์ƒ๋‹นํžˆ ์ปค์ ธ์„œ Spring Boot๋กœ ์ „ํ™˜ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.
์šฐ์„ ์ ์œผ๋กœ Spring Boot๋กœ ๊ฐœ๋ฐœ๋œ ๋กœ๊ทธ ์„œ๋ฒ„๋ฅผ ์˜ฌ๋ ค๋‘๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  R&D๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ ์ง„์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

2.6 Grafana & Prometheus ๐Ÿ“Š

์„œ๋ฒ„ ์ „๋ฐ˜์˜ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด Grafana๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, Prometheus๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ Grafana๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

2.7 Kafka & Zookeeper ๐Ÿฆ“

Kafka๋Š” ํ˜„์žฌ Zookeeper๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, Kafka UI๋ฅผ ํ†ตํ•ด ํ•œ๋ˆˆ์— ๋ณด๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐ŸŒป ๊ฒฐ๋ก 

์ €ํฌ ํšŒ์‚ฌ ์„œ๋ฒ„ ๊ตฌ์„ฑ๋„๊ฐ€ ์ด๋ ‡๊ฒŒ ๋ฐœ์ „ํ•˜๋Š” ๋ฐ์—๋Š” 1๋…„ 9๊ฐœ์›”์ด ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ ์‹œ์ ๊นŒ์ง€ ์˜ค๋Š” ๊ณผ์ •์—์„œ ๋งŽ์€ ์‹œํ–‰์ฐฉ์˜ค์™€ ๋ฌธ์ œ๋ฅผ ๊ฒช์œผ๋ฉฐ ํ˜„์žฌ์˜ ๊ตฌ์กฐ๋กœ ๋ฐœ์ „ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์ €๋Š” ๋„ˆ๋ฌด ๋ง‰๋ง‰ํ•ด์„œ ์ง€์ธ์ด๋‚˜ ๋‹ค๋ฅธ ๊ธฐ์—… ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค์—๊ฒŒ ๋ฏธํŒ…์„ ์š”์ฒญ ๋“œ๋ฆฌ๊ณ  ๋งŽ์€ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๋ฉด์„œ ํฌ๊ฒŒ ๋ฐœ์ „ํ•˜์˜€๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ใ… ใ… 
์•ž์œผ๋กœ๋„ ๊ณ„์† ๋ฐœ์ „ํ•˜์—ฌ ๋” ํšจ์œจ์ ์ด๊ณ  ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜ƒ
์ง€์†์ ์ธ ์„ฑ์žฅ๊ณผ ํšจ์œจ์„ฑ ๊ฐœ์„ ๊ณผ ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ณ  ์• ์ž์ผํ•˜๊ฒŒ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.. ๐Ÿš€

profile
โ€๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜๋Š” ๋กœ์ผ“ ๊ฐœ๋ฐœ์žโ€œ ์„ฑ์žฅํ•˜๋Š” ๊ณผ์ •์„ ๊ธฐ๋กํ•˜๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€