-
Notifications
You must be signed in to change notification settings - Fork 3
13. Architecture
์ด๋ฒ ํ๋ก์ ํธ์ ๊ฐ๋ณ ์๋น์ค๋ฅผ ์๊ท๋ชจ ๋ชจ๋๋ก ๊ตฌ์ฑํ์ฌ ๋ฐฐํฌํ ์ ์๋๋ก Microservice architecture๋ฅผ ๋์ ํ๊ธฐ๋ก ํ์๋ค.
์๋น์ค๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํด ํ์๋ค๊ณผ ํจ๊ป DDD์ ์ ๋ต์ ์ค๊ณ์ธ ์ด๋ฒคํธ์คํ ๋ฐ์ ํตํด ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋์ถํ์๋ค.
์ด ํ๋์ ํตํด ๋ค์๊ณผ ๊ฐ์ด ์๋น์ค๋ฅผ ๋ถ๋ฆฌํ๊ธฐ๋ก ํ์๋ค.
- Authentication Service (์ธ์ฆํ ํฐ๊ด๋ฆฌ)
- User Service (์ฌ์ฉ์๊ด๋ฆฌ)
- Team Service (ํ๊ด๋ฆฌ)
- Document Service (๋ฌธ์๊ด๋ฆฌ)
- Document History Service (๋ฌธ์์ด๋ ฅ๊ด๋ฆฌ)
- Editor Service (๊ณต๋๋ฌธ์์์ฑ)
- Video Conference Service (ํ์์ฑํ )
- Chat Service (์ฑํ )
๊ฐ ์๋น์ค๋ง๋ค ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํด์ผํ๋์ง ์์ธํํ๊ธฐ ์ํด monolithic์ด๋ผ ๊ฐ์ ํ๊ณ aquery tool์ ์ด์ฉํ์ฌ database๋ฅผ ์ค๊ณ๋ฅผ ํด๋ณด์๋ค.
'microservice = ์๋น์ค ๋ถ๋ฆฌ'๋ผ๋ ๊ฒ์ ์ด์ ์ ๋์ด ํด๋ผ์ด์ธํธ๋ ํ๋๋ก ๊ฐ๋ฐํ๋ ์๋ฒ ์ชฝ์ ์๋น์ค๋ง๋ค ๋ชจ๋ ๋ถ๋ฆฌ์์ผฐ๋ค.
bbzzkk ํ์ ๋ชจ๋ AWS EC2๋ฅผ ์ด์ฉํ์ฌ ๋ฐฐํฌํ ๊ฒฝํ์ด ์๋ค. ๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๋ ํ๋์ EC2 ์ธ์คํด์ค์, ์๋ฒ๋ ์๋น์ค ๋ณ๋ก EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ์์ฑํ์๋ค.
- Client: React + Nginx
- Document Service: SpringBoot + MySQL
- Authentication Service: Express + MongoDB
- User Service: Express + MongoDB
- Team Service: Express + MongoDB
- Editor Service: Express + MongoDB
- Video Conference Service: Express
- Chat Service: Express
์๋น์ค๊ฐ ๋ถ๋ฆฌ๋์ด Client์์ ์ฌ๋ฌ ๊ฐ์ ์๋ฒ๋ฅผ ํธ์ถํ๋ค. ์ค์์ API GATEWAY๋ฅผ ๋์ด client๊ฐ ํ๋์ url๋ก ์ฌ๋ฌ endpoint api๋ฅผ ํธ์ถ์ ํ ์ ์๋๋ก ํ์๋ค. Express Gateway์ AWS API Gateway ๋ ์ค์ ํ๋๋ฅผ ๊ณ ๋ฏผํ์๋ค. Express Gateway์์ socket ์ฐ๊ฒฐ์ ์ง์ํ์ง ์์ AWS Gateway๋ก ์ ์ ํ์๋ค.
์ฌ์ฉ์ ์ธ์ฆ ๋ฐฉ์์ผ๋ก ์ค์ Session Storage์ ๋์ด Session ๋ฐฉ์์ผ๋ก ํ๋ ๊ฒ์ด ์๋ ๋ก๊ทธ์ธ ์ JWT๋ฅผ ๋ฐํํ์ฌ JWT ์ธ์ฆ ๋ฐฉ์์ ๋์ ํ๊ธฐ๋ก ํ์๋ค. ๊ฐ ์๋น์ค์์๋ ์ฐ์ ์ ์ผ๋ก JWT๋ฅผ ํ์ธํ์ฌ ์ธ์ฆ๋ ์ฌ์ฉ์์ธ์ง ํ์ธํ๊ณ request ์ฒ๋ฆฌํ ๊ฒ์ด๋ค.
- ํ๋์ AWS EC2์ server ์ฝ๋์ database๋ฅผ ๊ฐ์ด ๋ฐฐํฌํ์ ๊ฒฝ์ฐ
microservice ์ฅ์ ์ ์ต๋ํํ์ง ๋ชปํ๋ค.
ํด๋น ์ธ์คํด์ค(๋
ธ๋)์ 3 tier layer๋ฅผ ๊ตฌ์ฑํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์ฒซ ๋ฒ์งธ, ํด๋น ์ธ์คํด์ค์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ฌ์ฉ์๋ ํด๋น ์๋น์ค๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ค. ๋ ๋ฒ์งธ, ํด๋น ์ธ์คํด์ค ๊ฐ ์ฃฝ๊ฒ ๋๋ฉด database๊ฐ ์ด๊ธฐํ ๋์ด ์ ์ฅ๋ ์ ๋ณด๊ฐ ์ฌ๋ผ์ง ์ ์๋ค.
๋ ๋ฒ์งธ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ณ ์ ํ์ฌ ์ฌ์ฉํ๊ณ ์๋ database๋ฅผ ๋ฐ๋ก ์๋น์ค๋ก ๋ถ๋ฆฌํ๋ ๊ฒ ์ข์ ๊ฒ์ผ๋ก ํ๋จํ๋ค.
- MySQL Service
- MongoDB Service
- command๋ฅผ ํ๋์ฉ ์ ๋ ฅํด์ nginx๋ฅผ ๊ตฌ์ฑํ์๋ค. ํ๊ฒฝ ์ค์ ์๋ํ๊ฐ ์ -๋ง ํ์ํ๋ค๊ณ ๋๊ผ๋ค. nginx์ ๊ฐ์ middleware์ service ๊ด๋ จ config๋ฅผ AMI๋ docker image๋ก ๊ตฌ์ฑํด์ ๋น ๋ฅด๊ฒ ์ธ ์ ์๋๋ก ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์ํ๋ EC2 ์ธ์คํด์ค๋ฅผ ๋ง๋ค์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ EC2 ์ธ์คํด์ค์ ๋ฌธ์ ๋ฐ์ ์ ๋ฐ์ดํฐ ์ด๊ธฐํ์ ๋์ํ๊ธฐ ์ํด ์ธ๋ถ ์คํ ๋ฆฌ์ง EBS๋ฅผ ์ฌ์ฉํ์๋ค.
- EC2 ์ธ์คํด์ค๋ผ๋ฆฌ ์ฐ๋์ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด API Gateway๋ฅผ ์ ์ธํ์ฌ ์ํคํ ์ฒ๋ฅผ ๋จ์ํํ์๋ค.
- ๊ฐ ์๋น์ค๋ง๋ค Auto scaling group์ ๋ง๋ค์๋ค. ๊ณ ์ AMI(Amazon machine image)๋ก ๋ง๋ค์ด ํน์ ์๋น์ค ec2 ์ธ์คํด์ค์ cpu ์ฌ์ฉ๋ฅ ์ด 80% ์ด์์ผ ๋ ํด๋น AMI๋ฅผ ์ฌ์ฉํ์ฌ EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ๋๋ก ํ์๋ค.
ํ์ ์ค์ ๊ณผ์ ์์ ๋ฐฐ์ ๋ k8s ๊ฐ๋ ์ ๋ณต์ตํ๊ณ ๋ ๊น์ด ๊ณต๋ถํ๊ณ ์ถ๋ค๋ ํ์์ด ์์ด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ํ๊ฒฝ์ ํตํด ์ฒซ ๋ฒ์งธ ๋ฌธ์ ์ ์ ํด๊ฒฐ์ ์ ์ฐพ๊ณ ์ ํ๋ค. ์ฌ์ฉ์์๊ฒ ๋ฌด์ค๋จ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์๋๋ก ์ด๋ฒ ํ๋ก์ ํธ์ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ k8s ํ๊ฒฝ์ ๊ตฌ์ฑํ ์ ์๋ AWS EKS๋ฅผ ๋์ ํ๊ธฐ๋ก ํ์๋ค.
- ํ๋์ k8s ํด๋ฌ์คํฐ ์์ Client์ ๋ชจ๋ ์๋น์ค๋ฅผ ์ด์ํ๊ธฐ๋ก ํ์๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์๊ฐ ํ๋์ EKS ingress point๋ก ์์ฒญ์ ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ AWS API Gateway๋ฅผ ์ ์ธ์ํฌ ๊ฒ์ด๋ค.
- eks๋ฅผ ์ง์ํ๋ CI๋ก circle CI๋ฅผ ๋์ ํ ์์ ์ด๋ค.
- eks ํด๋ฌ์คํฐ์ ์ ๊ทผํ๋ ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด openID๋ฅผ ์ด์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
ํ๋์ k8s ํด๋ฌ์คํฐ ์์ Client์ ๋ชจ๋ ์๋น์ค๋ฅผ ์ด์ํ ์์ ์ด๋ค. EC2์ ๋ฐฐํฌ๋ ๊ฐ ์๋น์ค๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ Deployment์ Service ๊ฐ์ฒด์ ์์ผ๋ก ๊ตฌ์ฑ๋๋ค. ์ฆ, ํด๋ฌ์คํฐ์์ ๊ฐ์ฅ ์์ ์๋น์ค ๊ธฐ๋ฅ ๋จ์๋ Deployment + Service
์ด๋ค. ingress controller๋ nginx-ingress ์ด์ฉํ๊ณ ์ปจํธ๋กค๋ฌ์๋ ssl ์ธ์ฆ์ ์ ์ฉํ ์์ ์ด๋ค. ์ฌ์ฉ์์ ์์ฒญ์ ํ๋์ EKS nginx ingress ์ปจํธ๋กค๋ฌ๋ก ์ ๋ฌ๋๋ค.
ํ๋์ ์๋น์ค๋น ๊ฐ DB๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋ฐ๋์งํ MSA ์ํคํ
์ฒ๋ผ๊ณ ๋ฐฐ์ ๋ค. ํ์ง๋ง ๊ตณ์ด ๋ฌผ๋ฆฌ์ ์ผ๋ก DB๋ฅผ ๋ถ๋ฆฌํด์ผํ๋๊ฐ? ๊ฐ ์๋น์ค๋ณ๋ก ๋
๋ฆฝ์ ์ผ๋ก collection์ ์ด์ฉํ๋ฉด ๋์ง ์๋๊ฐ
๋ผ๋ ์๊ฒฌ์ด ๋์์๋ค. ์ด๋ฅผ ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒด๋ฅผ ํ๋์ ์๋น์ค ๋จ์๋ก ๋ถ๋ฆฌํ๊ธฐ๋ก ํ๋ค. ์ด๋ฒ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ mongo db์ mysql๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ์๋น์ค ๋จ์๋ก ๋ถ๋ฆฌํ์๋ค. ์ฆ, ์ค์ง์ ์ผ๋ก MongoDB์ ์ ๊ทผํ๋ ๊ฐ ์๋น์ค๋ ๊ฐ์ ๋
๋ฆฝ์ ์ธ collection์ ์ด์ฉํ๋ ๊ฒ์ด๋ค.
google client id, aws s3 client id, db password์ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์๋ .env, application.properties ํ์ผ์ ์ธ๋ถ์ ๋
ธ์ถ์ด ๋๋ฉด ์๋๋ค. .gitignore ํ์ผ์ ํ์ฉํ์ฌ github์ ํด๋น ํ์ผ์ด ์ฌ๋ผ๊ฐ์ง ์๋๋ก ํ์๋ค. ํ์ง๋ง ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ์ฌ ์๋น์คํํ๊ธฐ ์ํด์ ํด๋น ๋น๋ฐ์ ๋ณด๊ฐ ํ์ํ๋ค. ์ด๋ฅผ ์ด๋ป๊ฒ ํ๋ฉด ์ข์๊นํ๋ ๊ณ ๋ฏผ์ ๊ฐํ๊ธฐ ๋ฉํ ๋๊ป ๊ณต์ ํ์๋ค. k8s์์ ์ง์ํ๋ configmap
๊ฐ์ฒด๋ฅผ ํตํด ํด๋ฌ์คํฐ์ ์๋ ๊ฐ ์๋น์ค์์ ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ํด๋น ์ ๋ณด๋ฅผ ์ธ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
Team bbzzkk
Members
'๊ณฝ'๋ณ์ | '์กฐ'์ฑ์ | '์ '์์ | '์ด'์ฐ์ฃผ | 'ํ'ํ๋ฆฐ
๐ Planning
- ํ๋ฉด๊ธฐํ์
- ๊ธฐํ์ ์์(์์ )
- ์๊ตฌ์ฌํญ ์ ์์
- API ๋ช ์ธ์(๊น๋ถ)
๐ Summary
- ์ํคํ ์ฒ
- ์คํ ํ๋ฉด
- ๊ธฐ์ ์คํ(์์ )
- Why Log
- Feed Back Log