์ง์ ๋ ธ์ ์ผ๋ก ์ ์ํ์ฌ ์ฌ๋ด์ ๊ณต์ ํ๋ ์ ๋๋ฉ์ด์ ์ปค๋ฎค๋ํฐ๋ฅผ ์น ์๋น์ค๋ก ๊ตฌํํ์ฌ ๊ธฐ์กด์ ํ์ฉํ๋ ๋ฑ๊ธ์ , ํ์ ์ , ์ปค๋ฎค๋ํฐ ๊ธฐ๋ฅ ๋ฑ์ ์ฌํํ์์ต๋๋ค.
- JWT๋ฅผ ํ์ฉํ ์ธ์ฆ/์ธ๊ฐ ๋ก์ง ๊ตฌํ
- ์ ๋๋ฉ์ด์ ์กฐํ ํํฐ๋ง ๋ฐ ํ์ด์ง๋ค์ด์ , AND OR ๊ฒ์ ๊ตฌํ
- ๋ฆฌ๋ทฐ์ ๋ณ์ ์ผ๋ก ์ ๋๋ฉ์ด์ ์ ํ์ ์ ๋ฐ์ดํธ
- ํ์์ด ์์ฑํ ๋ฆฌ๋ทฐ, ์ ๋๋ฉ์ด์ ๊ธ ๊ฐ์๋ก ํ์๋ฑ๊ธ์ ๋ ์ด์
- ์ ๋๋ฉ์ด์ ๊ณผ ๊ฐ์ IP์ ์ฌ๋ฌ ์ํ๋ค์ ์๋ฆฌ์ฆ๋ก ๋ฌถ์ด ์กฐํ
- ํ์์ด ๋ง์ ๋๋ ์ ๋๋ฉ์ด์ ์ ์คํฌ๋ฉํ๊ณ ๋ฐ๋ก ์กฐํํ ์ ์๋๋ก ์ ๊ณต
Nest.js, TypeORM
database: MySQL 8.0
tools: dbeaver, docker, erd-cloud, postman, swagger
Deploy : Docker, Google Cloud Platform(VM instance, Storage, SQL, Cloud Functions)
RDBMS์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๊ณผ ๋ฐ์ดํฐ ์ต์ ํ๋ฅผ ์ํด ์ปฌ๋ผ ํ์ ์ ์ต๋ํ ์ ๊ฒฝ์ผ๊ณ ๊ธฐํ์ ์ธ ๋ฐฉํฅ์ ๋ง๊ฒ ํ์ฅ ๊ฐ๋ฅํ๋๋ก ์ค๊ณํ์ต๋๋ค.
-
๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํตํ ์๋ฆฌ์ฆ ๊ธฐ๋ฅ : ๊ทน์ฅํ์ด๋ ํ์๋๋ ์ํ์ด ๋ง์ ์ ๋๋ฉ์ด์ ์ ํน์ฑ์ ํ์ด์ด๋ผํค ๋ชจ๋ธ์ ์ด์ฉํด ๋ถ๋ชจ๊ฐ ๋๋ ์๋ณธ ์ ๋๋ฉ์ด์ ๊ณผ ๊ฐ์ IP์ ์ฌ๋ฌ ์ ๋๋ฉ์ด์ ์ ์๋ฆฌ์ฆ๋ก ๋ฌถ์ด ์กฐํ ๊ฐ๋ฅํ๋๋ก ์ค๊ณํ์ต๋๋ค.
-
ํจ์จ์ ์ธ ๋ฆฌ๋ทฐ ํ๊ท ์ ์ : ์ ๋๋ฉ์ด์ ์ ์กฐํํ ๋๋ง๋ค ๋ชจ๋ ๋ฆฌ๋ทฐ๋ฅผ ์กฐํํด ์ ์ ํ๊ท ์ ๊ตฌํ๋ ๊ฒ์ด ๋นํจ์จ์ ์ด๋ผ ๋๊ปด ํ๊ท ์ ์ ์ปฌ๋ผ์ ์ถ๊ฐํ์ฌ ๋ฆฌ๋ทฐ๊ฐ ์์ฑ/๊ฐฑ์ ๋ ๋๋ง ํ๊ท ์ ์๋ฅผ ๊ณ์ฐํ์ฌ ์ ๋ฐ์ดํธํ์์ต๋๋ค.
-
์คํฌ๋ฉ : ์ฌ์ฉ์๊ฐ ์ข์ํ๋ ์ ๋๋ฉ์ด์ ์ ๊ฐ์ธํ๋ ๋ชฉ๋ก์ ์ ์งํ ์ ์๊ณ ์์ ์ด ์ ํํ ์ ๋๋ฉ์ด์ ์ ๋น ๋ฅด๊ฒ ๊ฒ์ํ๊ณ ๊ด๋ฆฌํ ์ ์๊ฒ ํ์์ต๋๋ค.
-
๋ ผ๋ฆฌ์ ์ญ์ : ํ์ ๊ตฌํํ ํ์ ์ ๋ณด ์ญ์ ์ ์ฑ ์ด๋ ์ ์ฑ ๋ฆฌ๋ทฐ ๋ฑ ์กฐํ๋ ๋์ง ์๊ฒ ํ๋ ์ ์ฅ์ ํ๊ณ ์์ด์ผ ๋๊ธฐ ๋๋ฌธ์ ๋ฌผ๋ฆฌ์ ์ญ์ ๋ณด๋ค ์ต๋ํ ๋ ผ๋ฆฌ์ ์ญ์ ๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
์๋์ผ๋ก ๋ฐฐํฌํ๋ ๊ณผ์ ์ ์๋ํํ๊ธฐ ์ํด GitHub Actions๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์์ต๋๋ค. Github Repository์ Main ๋ธ๋์น์ ์๋ก์ด Commit์ด ํธ์๋ ๋๋ง๋ค GitHub Actions๋ฅผ ํตํด YAML ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ด ์๋ ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์์ํฉ๋๋ค.
-
์์ค ์ฝ๋ ๋ณ๊ฒฝ ์ Docker ์ด๋ฏธ์ง๋ฅผ ์๋์ผ๋ก ๋น๋ํ๊ณ Docker Hub์ ํธ์
-
Docker Hub์์ ์ต์ ์ด๋ฏธ์ง๋ฅผ Pull ํ์ฌ GCP VM ์ธ์คํด์ค์ ์๋์ผ๋ก ๋ฐฐํฌํ๊ณ , ์ปจํ ์ด๋๋ฅผ ์ต์ ์ํ๋ก ์ ์ง
-
Webhook์ ํ์ฉํ์ฌ Telegram Bot์ผ๋ก ๋ฐฐํฌ์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ์ค์๊ฐ์ผ๋ก ์๋ฆผ
Rolling Deploy ์ ๋ต์ ์ฑํํ์ฌ Nginx๋ฅผ ์ด์ฉํ ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ ์ผ๋ก ๋์ผํ ๋ฒ์ ์ ๋ ๊ฐ์ ์ปจํ
์ด๋๋ฅผ ์์ฐจ์ ์ผ๋ก ์
๋ฐ์ดํธํจ์ผ๋ก์จ ์๋น์ค ์ค๋จ(downtime) ์์ด ์์ ์ ์ธ ๋ฐฐํฌ๋ฅผ ๋ฌ์ฑํ์ต๋๋ค. nginx.conf
์ค์ ์ ์กฐ์ ํ์ฌ ์
๋ฐ์ดํธ ๋์ ์ปจํ
์ด๋์ ํฌํธ๋ฅผ ์ฐ์ ์ค๋จ ์ฒ๋ฆฌํ ๋ค, nginx reload ๋ช
๋ น์ ์คํํ์ฌ ํธ๋ํฝ์ ์๋ก์ด ์ปจํ
์ด๋๋ก ์ํํ๊ฒ ์ ํํ๋ ๋ฐฉ์์ ๋ฐ๋ณตํจ์ผ๋ก์จ ๊ตฌํ๋์์ต๋๋ค.
์๋น์ค ํจ์์์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ฟผ๋ฆฌ๋ฌธ๋ค์ด ์์ฌ์์ด ์ ์ง๋ณด์ํ๊ธฐ ์ด๋ ค์ด ๋ฉด์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ํฌ์งํ ๋ฆฌ ํจํด์ ์ ์ฉํ์๊ณ ๊ฐ๋ ์ฑ์ด ํจ์ฌ ๊ฐ์ ๋์์ผ๋ฉฐ ๋ฐ์ดํฐ ์กฐํ์ ๋น์ฆ๋์ค ๋ก์ง ๊ด์ฌ์ฌ๊ฐ ๋ถ๋ฆฌ๋์ด ์ ์ง๋ณด์๋ ํจ์ฌ ์ฌ์์ก์ต๋๋ค.
์๋น์ค ํจ์์์ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ Handler ํด๋์ค๋ก ์์ฑํ์ฌ ์ฌ์ฌ์ฉํ์์ต๋๋ค. ์คํ ์ ์ฃผ์ ๋ ์ปค์คํ ๋ ํฌ์งํ ๋ฆฌ์ ์ค์ฝํ ๋ด์์ ์์ฑ๋ QueryRunner๊ฐ ์ฐ๊ฒฐ๋์ง ์๋๋ค๋ ๋ฌธ์ ์ ์ด ์์์ง๋ง ์ปค์คํ ๋ ํฌ์งํ ๋ฆฌ ๋ด๋ถ ํจ์๋ก ์ปค์คํ ๋ฉ์๋๊ฐ extend๋์ด์๋ ์ ๋ ํฌ์งํ ๋ฆฌ๋ก ๋ฆฌํดํ๋๋ก ์์ฑํ์ฌ ํด๊ฒฐํ์ต๋๋ค.