Pick-Git์ Infrasturcture
1. ๋ค์ด๊ฐ๋ฉฐ
์๋ ํ์ธ์, ์ผ๋น์ ๋๋ค. Pick-Git ์๋น์ค ๊ฐ๋ฐ ์ด๊ธฐ์๋ ์ ๋ง ๋ช ๊ฐ ์๋๋ AWS EC2๋ง์ ์ฌ์ฉํ์๋๋ฐ์. ์ง์์ ์ผ๋ก ์๋น์ค๋ฅผ ๊ฐ์ ๋ฐ ์ด์ํ๋ฉด์ ๋ค์ํ ์๊ตฌ ์ฌํญ์ ์ง๋ฉดํ๊ฒ ๋์์ผ๋ฉฐ, ์๊ธฐ์ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํด ์ ๋ง์ AWS EC2๋ฅผ ์์ฑํด ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ Pick-Git์ Infrasturcture๊ฐ ๋ค์ ๋ณต์กํด์ก๊ณ , ํ๋ก ํธ์๋๋ฟ๋ง ์๋๋ผ ๋ฐฑ์๋ ํ์์กฐ์ฐจ ์์ ์ด ๋งก์ ์์ญ์ด ์๋๋ฉด ์ ๋๋ก ์ดํดํ๊ธฐ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Infrasturcture์ ๋ํ ํ๋ด WiKi ์๋ฃ๋ฅผ ์ ์ํ๊ฒ ๋์๋๋ฐ์. ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ํตํด ๋ ์๋๋ค์๊ฒ๋ Pick-Git ์๋น์ค๋ฅผ ์งํฑํ๋ Infrasturcture๋ฅผ ํจ๊ป ๊ณต์ ํ๊ณ ์ ํฉ๋๋ค.
2. Overall
Pick-Git์์ ์ฌ์ฉ ์ค์ธ EC2๋ ํฌ๊ฒ 4๊ฐ์ง ๊ทธ๋ฃน์ผ๋ก ๋ถ๋ฅ๋ฉ๋๋ค.
- Product ํ๊ฒฝ ๊ด๋ จ EC2
- Develop ํ๊ฒฝ ๊ด๋ จ EC2
- Test ํ๊ฒฝ ๊ด๋ จ EC2
- ๊ธฐํ EC2 (Jenkins, SonarQube, nGrinder ๋ฑ)
์๋น์ค์์ ์ฌ์ฉ ์ค์ธ EC2 ์๋ฒ์ ๋ํ SSH(22๋ฒ ํฌํธ) ์ ๊ทผ์ Bastion ์๋ฒ ๋ด๋ถ์์๋ง ์ ์ ๊ฐ๋ฅํ๋๋ก ๊ตฌ์ฑํ์ต๋๋ค. ๊ฐ๋ฐ ํ์์ ์์ ์ Local PC์์ SSH๋ฅผ ํตํด ์๋น์ค EC2 ์๋ฒ๋ก ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. Bastion EC2 ์๋ฒ๋ก SSH ์ ์ํ ๋ค์, Bastion ์๋ฒ ๋ด๋ถ์์ ์๋น์ค EC2 ์๋ฒ๋ก SSH ์ ์์ด ๊ฐ๋ฅํฉ๋๋ค.
SSH(22๋ฒ ํฌํธ)๋ ํธ์คํธ๋ค์ด Public Network๋ฅผ ํตํด ํต์ ํ ๋ ๋ณด์์ ์ผ๋ก ์์ ํ๊ฒ ํต์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋กํ ์ฝ(๊ณต๊ฐํค & ๋น๋ฐํค ๋ฐฉ์)์ ๋๋ค. ๋ง์ฝ SSH ๊ด๋ จ ๋ณด์ ๊ฒฐํจ์ด ๋ฐ์ํ๋ฉด ์๋น์ค์ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์์ต๋๋ค.
SSH(22๋ฒ ํฌํธ)๋ก ์ ๊ทผํ ์ ์๋ ๋ชจ๋ EC2 ์๋ฒ์ ๋ํด ๋์ผํ ์์ค์ ๋ณด์์ ์ค์ ํ๋ ค๋ฉด, Auto-Scaling ๋ฑ ํ์ฅ์ฑ์ ๊ณ ๋ คํ ๊ตฌ์ฑ๊ณผ ๋ฐฐ์น๊ฐ ํ์ํฉ๋๋ค. Infrasturcture ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ๊ด๋ฆฌ ํฌ์ธํธ ๋ํ ๋์ด๋๊ธฐ ๋๋ฌธ์, ์ผ๋ฐ์ ์ผ๋ก ๋ณด์ ์ค์ ์ ์ผ์ ๋ถ๋ถ ํฌ๊ธฐํด์ผ ํฉ๋๋ค.
Bastion ์๋ฒ๋ก ๋ณด์์ ์ง์ค ์ํค๊ณ , ์๋ก ์์ฑํ๋ EC2 ์๋ฒ๋ฅผ Bastion ์๋ฒ๋ก ์ฐ๊ฒฐ์ํค๋ฉด ๋ชจ๋ ์๋ฒ๊ฐ ๋์ผํ ์์ค์ ๋ณด์์ ์์ฝ๊ฒ ๊ฐ์ง ์ ์์ต๋๋ค. ์ ์ฑ ๋ฃจํธํท ํน์ ๋์ฌ์จ์ด ๋ฑ์ผ๋ก ํผํด๋ฅผ ๋ณด๋๋ผ๋ Bastion Server๋ง ์ฌ๊ตฌ์ฑํ๋ฉด ๋๋ฏ๋ก, ์๋น์ค์ ๋ผ์น๋ ์ ์ํฅ์ ์ต์ํํ ์ ์์ต๋๋ค.
Bastion ์๋ฒ์ ๋ํ ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ Bastion ์๋ฒ ๊ตฌ์ฑ ๊ธ์ ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋๋๋ค.
3. Product ํ๊ฒฝ
์๋น์ค ์ด๊ธฐ์๋ ์น ์๋ฒ(Product Reverse Proxy)์ ํ๋ก ํธ์๋ ์ ์ ํ์ผ์ ๋ฐฐํฌํ ๋ค์, ์ ์ ํ์ผ ์์ฒญ์ ์น ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๊ณ ๋์ ์ธ ์ปจํ ์ธ ์์ฒญ์ ๋ท๋จ์ WAS๋ก ์์ฒญ์ ์์ํด ์ฒ๋ฆฌํ๋๋ก ๊ตฌ์ฑํ์์ต๋๋ค.
๊ทธ๋ฌ๋ AWS์์ ์ ๊ณตํ๋ CDN ์๋น์ค์ธ CloudFront๋ก๋ ์น ์๋ฒ๊ฐ ์ ๊ณตํ๋ ์บ์ฑ ๊ธฐ๋ฅ ๋ฑ์ ์ด์ ์ ์ถฉ๋ถํ ๋๋ฆด ์ ์๋ค๊ณ ํ๋จํ์ต๋๋ค. ๋ฐ๋ผ์ AWS S3์ ํ๋ก ํธ์๋ ์ ์ ํ์ผ์ ๋ฐฐํฌํ ๋ค์, S3 ์ ์ ํ์ผ ์ฝ๊ธฐ ์์ ์ ์ํํ๋ CloudFront ์ฃผ์์ Pick-Git ์๋น์ค ์ค ๋๋ฉ์ธ ์ฃผ์(https://pick-git.com)๋ฅผ ์ฐ๊ฒฐํ์ต๋๋ค.
Product Reverse Proxy ์ฃผ์๋ TLS ์ ์ฉ ๋ฐ Product API ์๋ฒ ๋๋ฉ์ธ ์ฃผ์๋ฅผ ์ฐ๊ฒฐํด๋ ์ํ์ ๋๋ค. ์ด ์ธ์๋ Reverse Proxy๋ Product WAS์ ๋ํ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฐ Blue/Green ๋ฐฐํฌ ์์ ๋ฑ์ ์ํํฉ๋๋ค.
์๋น์ค ์ด๊ธฐ์๋ ๋จ์ผ DB ์๋ฒ๋ฅผ ๊ตฌ์ฑํ์ผ๋, ๋จ์ผ ์ฅ์ ์ ์ ์์ ๊ณ ๊ฐ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด DB Replication์ ์ ์ฉํ์ต๋๋ค. DB Replication์ ์ด๋ฒ ๊ธ์์ ์ ๋ถ ์ค๋ช ํ๊ธด ์ด๋ ค์ธ ๊ฒ ๊ฐ์๋ฐ์. ์งง๊ฒ ์์ฝํ์๋ฉด DB ์คํ ๋ฆฌ์ง๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ค๋ฅธ ์๋ฒ์ ๋ณต์ ํ๋ ๊ฒ์ ๋๋ค. 2๋ ์ด์์ DB ์๋ฒ๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ด๋๋ก ์ค์๊ฐ์ผ๋ก ๋๊ธฐํํ๋ ๊ธฐ์ ์ธ๋งํผ DB ๋ฐ์ดํฐ ๋ฐฑ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
ํ๋์ Slave Node์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ค๋ฅธ Slave Node(๋ค์คํ)๋ฅผ ํตํด ์๋น์ค๊ฐ ์ค๋จ๋์ง ์๊ณ ๊ณ์ ์ ์ ์ด์๋ฉ๋๋ค. ํนํ Master Node ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํด ์๋ฒ๊ฐ ์ค์ง๋๋๋ผ๋, Slave Node ์ค 1๊ฐ๋ฅผ Master Node๋ก ์น๊ฒฉ์์ผ ์๋น์ค ์ค๋จ ์์ด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋ณต๊ตฌํ๋ ์๋ Failover ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
Write ์์ ์ Master Node๊ฐ ๋ด๋นํ๊ณ Read ์์ ์ Slave Node๊ฐ ๋ด๋นํจ์ผ๋ก์จ DB ์๋ฒ ๋ถํ๋ฅผ ๋ถ์ฐ์ํฌ ์ ์์ต๋๋ค. ์ดํ๋ฆฌ์ผ์ด์ ์์ DB ๋ถํ๋ก ์ธํ ๋ณ๋ชฉ ํ์์ด ์๋น์ค ์ฅ์ ์ ์ฃผ ์์ธ์ธ๋ฐ, ์ด๋ฅผ ๊ฐ์ ํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ด๋ฏธ์ง ์ ๋ก๋ ์์ฒญ API์ ๊ฒฝ์ฐ Product WAS๊ฐ S3๋ก ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํฉ๋๋ค. ์์ธ๋ฌ ์ ์ ๊ฒ์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ํด Elasticsearch๋ฅผ ์ฌ์ฉ ์ค์ ๋๋ค.
4. Test ํ๊ฒฝ
Test ํ๊ฒฝ์ ๋ฐฑ์๋ API์ ์๋๋ฆฌ์ค์ ๋ํ Load & Stress Test ์ํ ๋ฐ ์ฑ๋ฅ ์ง๋จ์ ๋ชฉ์ ์ผ๋ก ์์ฑํ์ต๋๋ค. ์ต๋ํ Product ํ๊ฒฝ๊ณผ ์ ์ฌํ๊ฒ ๊ตฌ์ฑํ์ผ๋ฉฐ, nGrinder ์๋ฒ๋ฅผ ํตํด ํ ์คํธ๋ฅผ ์งํํฉ๋๋ค.
ํ ์คํธ ๋์ ์์คํ ์ ์ฑ๋ฅ์ ์ธก์ ํ๊ธฐ ์ํด์ ์ธ๋ถ ์์คํ ์ ํญ์ ๊ธฐ๋ํ ๊ฒฐ๊ณผ๋ง์ ๋ฐํํ๋ ํ๊ฒฝ์ด ํ์ํฉ๋๋ค. ์ด ๋, ์ดํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฒด๋ฅผ Mockingํ๊ฑฐ๋ Dummy Controller๋ฅผ ์ฌ์ฉํ์ง ์์์ต๋๋ค.
- Http Connection Pool ๋ฏธ์ฌ์ฉ
- Connection Thread ๋ฏธ์ฌ์ฉ
- I/O ๋ฏธ๋ฐ์
๋ฑ์ ๋ฌธ์ ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฑ๋ฅ ํ ์คํธ์์ ์ค์ํ ๊ด์ ์ธ Thread ๋ฐ ๋ฆฌ์์ค ์ฌ์ฉ์ ๋ฌด์ํ๊ฒ ๋๋ฉฐ, ํ ์คํธ ์์คํ ์ ์์๊ณผ ๋ฆฌ์์ค๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๋ฑ ํ ์คํธ์ ์ ๋ขฐ์ฑ์ด ๋จ์ด์ง๋๋ค.
ํ ์คํธ๋ฅผ ์ํ ์์๋ ํ ์คํธ ๋์ ์์คํ ์ ์ ๋๋ก ์ํฅ์ ๋ฏธ์ณ์๋ ์ ๋๊ธฐ ๋๋ฌธ์, S3 ์ด๋ฏธ์ง ์ ๋ก๋ ๋ฐ GitHub API์ ๊ฐ์ ์ธ๋ถ ์์คํ ์ ํ ์คํธ ๋์ ์์คํ ๊ณผ ์๋ฒฝํ ๋ถ๋ฆฌ๋ Mock ์๋ฒ๋ฅผ ๋ง๋ค์ด ๋ฐฐํฌํ ๋ค์ ํ ์คํธ๋ฅผ ์งํํ์ต๋๋ค.
nGrinder๋ฅผ ํ์ฉํ ๋ถํ ๋ฐ ์คํธ๋ ์ค ํ ์คํธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฐ์ํํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ์ ๊ฒฐ์ ์์คํ ์ฑ๋ฅ, ๋ถํ, ์คํธ๋ ์ค ํ ์คํธ ๊ธ์ ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋๋๋ค.
5. Develop ํ๊ฒฝ
Develop ํ๊ฒฝ์ ๊ฒฝ์ฐ ์ฃผ๋ก ๊ฐ๋ฐ ๊ณผ์ ์์ ํ๋ก ํธ์๋ ๋ฐ ๋ฐฑ์๋ ๊ธฐ๋ฅ๋ค์ด ์ ๊ธฐ์ ์ผ๋ก ์ ์ฐ๋๋๋์ง ๋ฑ์ ํ์ธํ๋ ์ญํ ์ ๋๋ค. ์น ์๋ฒ(Develop Reverse Proxy)์ ํ๋ก ํธ์๋ ์ ์ ํ์ผ์ ๋ฐฐํฌํฉ๋๋ค.
6. CI / CD Pipeline
์ ๋ฐ์ ์ธ CI / CD Pipeline ํ๋ก์ฐ์ ๋๋ค. ํ๋์ฉ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
6.1. SonarQube Pipeline
Pick-Git ๋ฐฑ์๋ ํ๋ก์ ํธ๋ SonarQube๋ฅผ ํตํด ํ๋ก์ ํธ ์ฝ๋์ ๋ํ ์ ์ ๋ถ์์ ์งํํ๊ณ ์์ต๋๋ค.
Backend
๋ผ๋ฒจ์ด ๋ฌ๋ฆฐ Pull Request๊ฐ ์์ฑ ๋ฐ ์
๋ฐ์ดํธ๋ ๋๋ง๋ค WebHook์ด Jenkins ์๋ฒ๋ก ์ ์ก๋ฉ๋๋ค. Jenkins ์๋ฒ์ SonarQube ํ์ดํ๋ผ์ธ์ด ์ด๋ฅผ ๊ฐ์งํ๊ณ ์์
์ ์์ํฉ๋๋ค. Build & Test ์์
์ ์งํํ๊ณ , JaCoCo ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋ถ์ ๋ฆฌํฌํธ๋ฅผ ์์ฑํฉ๋๋ค. ์ต์ข
์ ์ผ๋ก SonarQube ์๋ฒ์ ์ ์ ๋ถ์์ ์์ฒญํฉ๋๋ค.
์ด๋ฌํ ๋ถ์ ๊ณผ์ ์ ์งํํ๋ฉด์ ์ฑ๊ณต ํน์ ์คํจํ์ ๋ Jenkins๋ GitHub Open API๋ฅผ ๋ฐํ์ผ๋ก ํด๋น PR์ ๊ฒฐ๊ณผ๋ฅผ ๋๊ธ๋ก ์๋ฆผํฉ๋๋ค. ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ๊ธฐ์ค ๋ฏธ์ถฉ์กฑ ๋ฑ ํ์ดํ๋ผ์ธ์ด ์คํจํ ๊ฒฝ์ฐ Pull Request Merge๋ฅผ ๋ฐฉ์งํ๊ณ ์์ต๋๋ค.
6.2. Deploy Pipeline
Pull Request Merge๊ฐ ๋ฐ์ํ๋ฉด WebHook์ด Jenkins ์๋ฒ๋ก ์ ์ก๋ฉ๋๋ค. ์ด ๋, ์ด๋ค ๋ธ๋์น๋ก ์ฝ๋๊ฐ ๋ณํฉ๋ฌ์ผ๋ฉฐ Pull Request์ ๋ผ๋ฒจ์ด Backend
์ Frontend
์ค ์ด๋ค ๊ฒ์ธ์ง ๋ฑ์ ์ ๋ณด๋ฅผ Jenkins๊ฐ ๋ถ์ํฉ๋๋ค. ์ดํ ์กฐ๊ฑด์ ๋ถํฉํ๋ Pipeline์ ์ฐพ์ ์์
์ ์ํํ๊ณ ์ ํฉํ ์๋ฒ๋ก ์ฝ๋๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
๋ฐฑ์๋์ ๊ฒฝ์ฐ Build & Test ์์ ๋ฐ Rest Docs ๋ฑ์ ์์ ์ ์ํํ ๋ค์ ์ฝ๋๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
7. ๋ง์น๋ฉฐ
์ด๋ฒ WiKi ์๋ฃ๋ฅผ ์ ์ํ๋ฉด์ ์ปค๋ฎค๋์ผ์ด์ ์ ์ค์์ฑ์ ๋ํด ๋ค์๊ธ ์๊ฐํด๋ณด๋ ๊ณ๊ธฐ๊ฐ ๋์์ต๋๋ค. ํ๋ก ํธ์๋ ํ์๋ค๊ณผ ๊ธฐ๋ฅ ์์ฐ์ ์งํํ๋ ๋์ค ๋ฐฑ์๋ ์ด์๋ก ์ธํด ์์ฐ์ด ์ค๋จ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ ์์๋๋ฐ์. ๋ฐฑ์๋ ํ์๋ค์ ๋๋ฆ๋๋ก(?) ๋ฌธ์ ์์ธ์ ์ค๋ช ํ๊ณ ๋๋ฒ๊น ์ ์ฐฉ์ํ๊ณค ํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ฌธ์ ์์ธ์ ํ๋ก ํธ์๋ ํ์์ ๋๋์ด๊ฐ ์๋ ๋ฐฑ์๋ ์ ์ฅ์์ ๋๋ฌด ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๊ณ ๋์ด๊ฐ์ต๋๋ค. ๐ ์ดํ ํ๊ณ ๋, ํ๋ก ํธ์๋ ํ์์ด ๋ฌธ์ ์์ธ์ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ๊ณ ๋ฐฑ์๋๊ฐ ๋ฌธ์ ๊ฐ ํด๊ฒฐํ ๋๊น์ง ๊ทธ์ ๋๊ธฐํด์ผ๋ง ํ๋ ์ฝ๊ฐ ๋ต๋ตํ๋ค๋ ๊ณ ์ถฉ์ ํ ๋กํ์ต๋๋ค.
๋ฐ๋ผ์ Infrasturcture ์ค๋ช
์๋ฃ๋ฅผ ์ ์ํ๋ฉด์, ์ ๊ท ๊ธฐ๋ฅ ๋ฐฐํฌ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ฐฑ์๋ ์ด์๋ค์ ๋ํ FAQ๋ฅผ ์ ๋ฆฌํด ํ๋ก ํธ์๋ ํ์๋ค๊ณผ ์ํตํ๋ ์๊ฐ์ ๊ฐ์ก์ต๋๋ค. ํญ์ ๋๋ง ์๋ ์ง์์ด ์๋๋ก ํ์
๋ ํ ๊ท์น์ ์ค์ํ๋ ค๊ณ ๋
ธ๋ ฅํ๋๋ฐ์. ์ํต์ ์์์ ์๋๋ฐฉ๊ณผ ๋๋์ด๋ฅผ ๋ง์ถ๋ ๊ฒ์์ ์์
ํ๋ค๋ ๊ธฐ๋ณธ์ ์ธ ๊ฒฉ์ธ๋ถํฐ ์ถฉ์คํ ์ค์ฒํด์ผ๊ฒ ๋ค๊ณ ๋๋ ํ๋ฃจ์์ต๋๋ค.