Skip to content
This repository was archived by the owner on Aug 13, 2022. It is now read-only.

๐Ÿ“ ํ”„๋กœ์ ํŠธ ์ •๋ณด

Jeong ki hyuk edited this page May 25, 2021 · 4 revisions

ํ”„๋กœ์ ํŠธ ์ฃผ์ œ : shoe-auction

์ตœ๊ทผ ํŒจ์„ ์—ฝ๊ณ„์—์„œ ํ•œ์ •ํŒ ์Šค๋‹ˆ์ปค์ฆˆ ๋ฆฌ์…€(resell ยท ์žฌํŒ๋งค)์ด ํ™”๋‘๋กœ ๋– ์˜ค๋ฅด๊ณ  ์žˆ๋Š” ์ ์„ ๊ณ ๋ คํ•˜์—ฌ ํŒ๋งค์ž์™€ ๊ตฌ๋งค์ž ์‚ฌ์ด์—์„œ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ†ตํ•ด ๊ฐ€ํ’ˆ ํŒ๋งค ๋ฐฉ์ง€์™€ ์‚ฌ๊ธฐ ๋ฐฉ์ง€๋ฅผ ์ง€์›ํ•˜๋Š” ์ค‘๊ฐœ ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ

๊ณตํ†ต ์‚ฌํ•ญ

์ปค๋ฐ‹ ์ปจ๋ฒค์…˜ ํ†ต์ผ

โœ… ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” ์ œ๋ชฉ / ๋ณธ๋ฌธ / ๊ด€๋ จ์ด์Šˆ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
โœ… feat : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
โœ… fix : ๋ฒ„๊ทธ ์ˆ˜์ •
โœ… docs : ๋ฌธ์„œ ์ˆ˜์ •
โœ… style : ์ฝ”๋“œ ํฌ๋งทํŒ…, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ, ์ฝ”๋ธŒ ๋ณ€๊ฒฝ์ด ์—†๋Š” ๊ฒฝ์šฐ
โœ… refactor : ์ฝ”๋“œ ๋ฆฌํŽ™ํ† ๋ง
โœ… test : ํ…Œ์ŠคํŠธ์ฝ”๋“œ, ๋ฆฌํŽ™ํ† ๋ง ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€
โœ… chore : ๊ธฐํƒ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ
โœ… ์ œ๋ชฉ์€ 50์ž๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š๊ณ , ๋งž์นจํ‘œ๋ฅผ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค.
โœ… ์˜์–ด๋กœ ์ž‘์„ฑํ• ์‹œ ๊ณผ๊ฑฐ์‹œ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ช…๋ น์–ด๋กœ ์ž‘์„ฑํ•˜๋ฉฐ, ์ฒซ ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
โœ… ์„ ํƒ์‚ฌํ•ญ ์ด๋ฏ€๋กœ ๋ชจ๋“  ์ปค๋ฐ‹์— ๋ณธ๋ฌธ๋‚ด์šฉ์„ ์ž‘์„ฑํ•  ํ•„์š”๋Š” ์—†๋‹ค.
โœ… ๋ณธ๋ฌธ์€ "์–ด๋–ป๊ฒŒ" ๋ณด๋‹ค "๋ฌด์—‡์„" ๊ณผ "์™œ"๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.
โœ… ํ•œ์ค„์— ์ตœ๋Œ€ 72์ž๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š๊ณ  ์ œ๋ชฉ๊ณผ ๊ตฌ๋ถ„๋˜๊ธฐ ์œ„ํ•ด ํ•œ์นธ ๋„์›Œ ์ž‘์„ฑํ•œ๋‹ค.
โœ… ์„ ํƒ์‚ฌํ•ญ ์ด๋ฏ€๋กœ ๋ชจ๋“  ์ปค๋ฐ‹์— ๊ผฌ๋ฆฌ๋ง์„ ์ž‘์„ฑํ•  ํ•„์š”๋Š” ์—†๋‹ค.
โœ… ์ด์Šˆ๋ฒˆํ˜ธ๋ฅผ ์ ๋Š”๋‹ค. ์—ฌ๋Ÿฌ๊ฐœ ์ ์–ด๋„ ์ƒ๊ด€ ์—†๋‹ค.

ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜


Git-Flow ๋ธŒ๋žœ์น˜ ์ „๋žต

๊นƒํ”Œ๋กœ์šฐ

โœ… master : ๋ฒ ํฌ ๋‹จ๊ณ„์— ์ถœ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ๋ธŒ๋žœ์น˜
โœ… develop : ๊ฐœ๋ฐœ์ด ๋๋‚œ ๋ฒ„์ „์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
โœ… feature : ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
โœ… release : ๋ฒ ํฌ ๋ฒ„์ „์„ ์ค€๋น„ํ•˜๋Š” ๋ธŒ๋žœ์น˜
โœ… hotfix : ๋ฒ ํฌ ๋ฒ„์ „์—์„œ ๋ฐœ์ƒํ•œ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ • ํ•˜๋Š” ๋ธŒ๋žœ์น˜
โœ… issue/* : issue๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ๊ฐœ๋ฐœ์— ์ ์šฉํ•˜๋Š” ๋ธŒ๋žœ์น˜

Reference : ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ : Git-flow


Shoe-auction ์„œ๋ฒ„ ๊ตฌ์กฐ

shoe-auction ์„œ๋ฒ„

1. Redis Server

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ Cache์˜ ์ ์šฉ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์—„์ฒญ๋‚œ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ๋ณด์ด๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Redis ์„œ๋ฒ„๋ฅผ ๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌ์‹œ์ผœ ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ์บ์‹œ ์ €์žฅ์†Œ์˜ ๊ฐ€์šฉ์„ฑ์„ ์ž˜ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด 3๊ฐœ์˜ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ ˆ๋””์Šค ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

โœ… FCM ํ† ํฐ ์ €์žฅ์†Œ : [Compact] 1vCPU, 2GB Mem, 50GB Disk

โœ… Login Session ์ €์žฅ์†Œ : [Compact] 1vCPU, 2GB Mem, 50GB Disk

โœ… ์บ์‹œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ : [Compact] 1vCPU, 2GB Mem, 50GB Disk

2. WAS

๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ์—์„œ 3000๋ช…์˜ ๊ฐ€์ƒ ์‚ฌ์šฉ์ž ์ ‘์† ์‹œ ๋ถˆ์™„์ „ํ•œ ์„ฑ๋Šฅ์ง€ํ‘œ๋ฅผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด์— WAS 1๋Œ€๋งŒ ์ด์šฉํ•˜๋˜ ๋ฐฉ์‹์—์„œ ์›น์„œ๋ฒ„ nginx์™€ WAS1๋Œ€๋ฅผ ์ถ”๊ฐ€๋กœ ๋„์–ด์„œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ†ตํ•œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์„œ๋ฒ„ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โœ… WAS 1 : [Compact] 1vCPU, 2GB Mem, 50GB Disk

โœ… WAS 2 : [Compact] 1vCPU, 2GB Mem, 50GB Disk

โœ… nginx : [Compact] 1vCPU, 2GB Mem, 50GB Disk

3. MySQL

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์ด์ „์— DB์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ณ‘๋ชฉํ˜„์ƒ์„ ๊ฐœ์„ ํ•˜๊ณ ์ž ์‚ฌ์ „์— Master/Slave ๊ตฌ์กฐ์˜ Replication์„ ๊ตฌ์„ฑํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ Slave์„œ๋ฒ„๋Š” 1๊ฐœ๋งŒ ๊ตฌ์„ฑํ•˜์˜€๊ณ , Master ์„œ๋ฒ„์™€ Slave ์„œ๋ฒ„ ๋ชจ๋‘ ๋™์ผํ•œ ์ŠคํŽ™์˜ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

โœ… MySQL Master : [Compact] 1vCPU, 2GB Mem, 50GB Disk

โœ… MySQL Slave : [Compact] 1vCPU, 2GB Mem, 50GB Disk

4. Jenkins

์ฒ˜์Œ Jenkins ์„œ๋ฒ„๋ฅผ ๋„์—ˆ์„ ๋•Œ๋Š” NCP์—์„œ 1๋…„๊ฐ„ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” micro ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. git push ๋˜๋Š” pull request๊ฐ€ ๋ฐœ์ƒ ํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™ ํ…Œ์ŠคํŠธ์™€ ๋นŒ๋“œ๊ฐ€ ์ง„ํ–‰๋˜๋„๋ก ์„ค์ •ํ–ˆ์—ˆ๋Š”๋ฐ, ํ…Œ์ŠคํŠธ๊ฐ€ ์ง„ํ–‰๋  ๋•Œ๋งˆ๋‹ค 20๋ถ„์—์„œ ์ตœ๋Œ€ 1์‹œ๊ฐ„๊นŒ์ง€ ๊ฑธ๋ฆฌ๊ณ  ์‹ฌํ•  ๊ฒฝ์šฐ Timeout์œผ๋กœ ์ธํ•ด ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Jenkins ์„œ๋ฒ„์˜ ์ŠคํŽ™์€ ๋‹ค๋ฅธ ์„œ๋ฒ„๋“ค๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋†’์€ ์‚ฌ์–‘์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

โœ… Jenkins : [Standard] 2vCPU , 4GB Mem, 50GB Disk

5. AWS S3 & Lambda

ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด AWS S3์™€, ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•์„ ์œ„ํ•ด AWS Lambda๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋Š” ๊ด€๋ฆฌ์ž ๋ฟ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ๋Ÿ‰์ด ๊ทธ๋ฆฌ ๋†’์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ์ปค๋ฎค๋‹ˆํ‹ฐ์„ฑ ๊ฒŒ์‹œํŒ์„ ์ถ”๊ฐ€ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์„œ๋ฒ„ ์ŠคํŽ™๋„ Sacle -UP์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

โœ… AWS S3 & Lambda : AWS ํ”„๋ฆฌ ํ‹ฐ์–ด (์ด๋ฏธ์ง€ ์ €์žฅ ๊ธฐ๋ณธ 50GB, Lambda ์›”๋ณ„ ๋ฌด๋ฃŒ์š”์ฒญ 100๋งŒ)

6. ngrinder

์ตœ๋Œ€ํ•œ ์ •ํ™•ํ•œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์ง€ํ‘œ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด Controller์™€ Agent, ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ Target์ด ๋˜๋Š” Server๋ฅผ ๋ชจ๋‘ ๊ฐ๊ฐ ๋„์–ด์„œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Controller์˜ ๋ช…๋ น์„ ๋ฐ›์•„ Agent์—์„œ ์‹ค์ œ ๋ถ€ํ•˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— Agent์˜ ์„œ๋ฒ„ ์ŠคํŽ™์„ ๊ฐ€์žฅ ๋†’๊ฒŒ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โœ… Controller server : [Standard] 2vCPU, 4GB Mem, 50GB Disk

โœ… Agent server : [Standard] 4vCPU, 8GB Mem, 50GB Disk