๐ ์ค๋ ๋ด๊ฐ ๋จน์ ์นผ๋ก๋ฆฌ๊ฐ ๊ฑฑ์ ๋ ๋๋??
๐ Calog๊ฐ ๊ทธ ๊ฑฑ์ ํด๊ฒฐ ํด๋๋ฆฌ๊ฒ ์ต๋๋ค!!
Calog๋ก ์นผ๋ก๋ฆฌ๋ฅผ
๊ฑด๊ฐ๊ณผ ์ด๋, ์ฐ๋น์ ๋ํ ์ฌ๋๋ค์ ๊ด์ฌ์ ์ ์ ์ฆ๊ฐ ํ๊ณ ์์ต๋๋ค. ์ด์๋ฐ๋ผ ์์์ ๊ตฌ์ ํ๊ฑฐ๋ ๋จน์๋ ๊ฐ๊ฒฉ๋งํผ์ด๋ ์นผ๋ก๋ฆฌ ์์น๋ฅผ ์์๋ก ํ์ธํ๋ ๊ฒฝํฅ์ด ์ฆ๊ฐ ํ๋ค๋ ์ ์ ์ฐฉ์ํ์ฌ ์๋น์ค ์ ์์ ํ์์ต๋๋ค. ๋ํ, ์์ค์ ๋์์๋ ๊ธฐ์กด ์๋น์ค๋ณด๋ค ์ข๋ ์ง๊ด์ ์ด๊ณ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์นผ๋ก๋ฆฌ๋ฅผ ๊ธฐ๋กํ ์์๋๋ก ํฌ์ง์ ๋์ ํ์ต๋๋ค.
- ์ฐ๋น๊ณผ ์๋จ์ ๊ด์ฌ์๋ 2040 ๋ํ์ ๋ฐ ์ง์ฅ์ธ
- ์นผ๋ก๋ฆฌ๋ฅผ ๊ณ ๋ คํ์ฌ ์์๋ฉ๋ด๋ฅผ ๊ฒฐ์ ํ์๊ณ ์ ํ๋ ๋ถ
- ๋ณธ์ธ์ด ์ญ์ทจํ ์นผ๋ก๋ฆฌ๋ฅผ ๋งค์ผ ๊ธฐ๋กํ๋ฉฐ ๊ด๋ฆฌ๊ฐ ํ์ํ ๋ถ
- ์นผ๋ก๋ฆฌ๋ฅผ ๋ง์ถฐ ์๋จ์ ๊ตฌ์ฑ ํ์๊ณ ์ ํ๋ ๋ถ
1.์ผ๋ฐ ๋ก๊ทธ์ธ ๋ฐ ์ฌ์ฉ์ ํธ์๋ฅผ ์ํ ์์
๋ก๊ทธ์ธ(๊ตฌ๊ธ, ๋ค์ด๋ฒ, ์นด์นด์ค) ๊ธฐ๋ฅ
JWT Token์ ํตํด ๋ก๊ทธ์ธ ์ธ์ฆ ๋ฐ Passport Module์ ํตํด ์์ ๋ก๊ทธ์ธ ๊ตฌํ
2.์ฝ 6๋ง์ฌ๊ฐ์ ์์ ๋ฐ์ดํฐ(์์ฝ์ฒ ์ ๊ณต ๋ฐ์ดํฐ)๋ฅผ 3๋ฒ์ ๋ฐ์ดํฐ ๊ฐ๊ณต์ ํตํด Data Base ๊ตฌ์ถ
Mongo Atlas์์ ํ๊ธ FTS๋ฅผ ์ง์ํ๋ lucene nori๋ฅผ ํตํด Full text search ๊ตฌํ์ ์ฑ๊ณต
Mongo Atlas ์๋ฒ์ ์ง์ญ์ด ๋ฏธ๊ตญ ๋ฒ์ง๋์๋ก ์ค์ ๋์ด์์ด ์๋ฒ ์ง์ญ์ ์ฑ๊ฐํด๋ก ๋ณ๊ฒฝ ๋ฐ $limit ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ 1000๊ฐ์ ๋ฐ์ดํฐ๊น์ง๋ง ์ถ๋ ฅ๋๋๋ก ์ ํ์ ๊ฑธ์ด ๊ฒ์ ์๋๊ฐ์
๋ฐฑ์๋ ๊น๊ณผ travis๋ฅผ ์ฐ๋ํด์ travis๊ฐ CI ๋ถ๋ถ์ ๋งก๊ณ ์๊ณ CD๋ S3์ ๋น๋ํ์ผ์ ์ ์ฅํ๋ค codedeploy์ ํตํด์ ๋ฐฐํฌ,
๋ฐฐํฌ๋ฐฉ์์ ๋์ปค๋ฅผ ์ด์ฉํ์ฌ blue and green๋ฐฉ์์ผ๋ก ๋ฌด์ค๋จ ๋ฐฐํฌ ๊ตฌํ
CSRF ๊ณต๊ฒฉ์ ๋ํ ๋ณด์ ๋์ฑ ์ผ๋ก Security Token ์ ๋ฐ๊ธํ์ฌ ๊ฒ์ฆํ๋ ๋ฐฉ์์ ์ฌ์ฉ
node: v14.17.1
npm: 6.14.13
์ข ๋ฅ | ์ด๋ฆ |
---|---|
์๋ฒ ํ๋ ์์ํฌ | Express |
Database | MongoDB, AtlasDB |
์๋ฒ ๋ชจ๋ํฐ๋ง | netData |
์๋ฌ ๋ชจ๋ํฐ๋ง | sentry |
CI | travis CI |
CD | CodeDeploy |
๋น๋ํ์ผ ์ ์ฅ์ | S3 |
Application ๊ตฌ์ถ software | Docker |
๋ก๋๋ฐธ๋ฐ์ค | nginx |
๋ผ์ด๋ธ๋ฌ๋ฆฌ | Appliance |
---|---|
dotenv | ํฌํธ๊ฐ์ธ ์ค์ํ๊ฐ ๋ณด์์ฒ๋ฆฌ |
Mongoose | MongoDB ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง |
Cors | Request Resource ์ ํ |
passport,passport-google-oauth20,passport-kakao,passport-naver | ์์ ๋ก๊ทธ์ธ |
bcrypt | ์ํธํ |
jsonwebtoken | ์ํธํ |
eslint | ํด๋ฆฐ์ฝ๋ |
prettier | ํด๋ฆฐ์ฝ๋ |
eslint-config-prettier,eslint-plugin-prettier | eslint, prettier ์ถฉ๋๋ฐฉ์ง |
validator,express-validator | ์ ํจ์ฑ ๊ฒ์ฌ |
์นผ๋ก๋ฆฌ ํต๊ณ๋ฅผ ๋ณด์ฌ์ค๋ ๋ชธ๋ฌด๊ฒ์ ๋ฐ๋ฅธ ๊ธฐ์ด๋์ฌ๋์ ๋ฒ ์ด์ค๋ก ๋ณด์ฌ์ฃผ๋๋ฐ ์๋ฅผ ๋ค์ด ์ค๋ ๋ชธ๋ฌด๊ฒ๋ฅผ ์์ ํ๊ณ ์ด์ ๋จน์๋ ์์์ ๊ธฐ๋กํด์ผํ๋ค๋ฉด ํ์ฌ ๋ชธ๋ฌด๊ฒ๊ฐ ์๋ ์ด์ ์ ๋ชธ๋ฌด๊ฒ๊ฐ ๋ค์ด๊ฐ์ผํ๋๋ฐ ์ด๋ป๊ฒ ์ด์ ์ ๋ชธ๋ฌด๊ฒ๋ฅผ ์์์์๊น?
๋ชธ๋ฌด๊ฒ๋ฅผ ์์ ํ ๋๋ง๋ค ์์ ํ ๋ ์ง์ ๋ชธ๋ฌด๊ฒ๋ฅผ ๊ฐ์ด ์ ์ฅ์ ํ์.
mongoDB ํ๊ธ์ธ์ ๋ฌธ์
์์ name ํ๋์ "text"์ธ๋ฑ์ฑ์ ํด์คํ $text $search๋ก ๊ฒ์์ํ๋ฉด ๋ ๋น ๋ฅด์ง๋ง ๊ฒ์๋ฒ์๊ฐ ๋๋ฌด ์ข์์ง๋ค. ์ด์ ๋ ๋ชฝ๊ณ DB default_language๊ฐ ์์ด๋ผ์ ๋ฒ์๋ฅผ ์ปค๋ฒ๋ฅผ ๋ชปํ๋ค. ๊ทธ๋์ default_language: ngram์ ํด์ค์ผํ๋๋ฐ ngram์ full text search ๋ณด๋ค ๊ฒ์์๋๊ฐ ๋๋ฆฌ๋ค.
๊ฒ์ ๊ธฐ๋ฅ์ ์๋์ ์ ํ์ฑ ๊ฐ์ ๊ณผ์
์ฐ์ ์ฒ์์ ๊ฒ์๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ฐ ์์ด ์ ๊ท์๊ณผ levenshtein ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ํ์ง๋ง ์๋์ ์ธ ๋ถ๋ถ๊ณผ ์ฐ๊ด๋ ๋ถ๋ถ์ ์์ด ์์ฌ์ด ๋ถ๋ถ์ ์ฐพ์ ์ ์์๊ณ ๋ชฝ๊ณ DB์ ์ธ๋ฑ์ฑ์ ์ด์ฉํ๊ฒ ๋์ต๋๋ค.
(levenshtein๊ณผ ์ ๊ท์ ์ด์ฉํ์ ๋์ ์๋)
createIndex๋ฅผ ํตํด ์์ name ํ๋์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ณ $search์ $meta score ๋ฑ์ ์ด์ฉํด์ ๊ฒ์์ ํ์ต๋๋ค.ย ์ ๊ท์๊ณผ levenshtein์์ ์์ฌ์ ๋ ์๋์ ์ธ ๋ถ๋ถ์ ์๋ฑํ ์์นํ์ง๋ง, ์์ฝ๊ฒ๋ ํ๊ธ ํ ํ ์คํธ ์์น๋ฅผ ์ง์ํ์ง ์์, ์ด๋ฒ์ ์ ํ์ฑ์ด ๊ฑธ๋ฆผ๋์ด ๋์์ต๋๋ค. (๊ตญ ๊ฒ์์ ๋ง์ ๋ฐ์ดํฐ๋ค์ด ์๋์ค๊ณ โ๋ชฝ๊ณ ๊ฐ์ฅ ๊ตญโ ํ๋๋ง ์ถ๋ ฅ๋จ) Default languae ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ์ง๋ง, ํ๊ตญ์ด๋ฅผ ์ง์ํ์ง ์์์ ํ๊ธ ํ ํ ์คํธ ์์น๋ฅผ ์ง์ํ๋ ํด์ ์ฐพ๊ฒ๋์ต๋๋ค.
(createIndex์ $search๋ฅผ ์ด์ฉํ์ ๋์ ์๋)
๊ทธ ๊ฒฐ๊ณผ ์๋ผ์คํฑ ์์น๋ฅผ ์๊ฒ๋๊ณ lucene nori๋ฅผ ํตํด ํ๊ธ ํ ํ
์คํธ ์์น๋ฅผ ์ง์ํ๋ค๋ ๊ฒ์ ์๊ฒ๋์ต๋๋ค.
์๋์ ์์ด์๋ ์๋ผ์คํฑ ์์น๊ฐ ์๋ฑํ ์ฑ๋ฅ์ ๋ณด์ธ๋ค๋ ๊ฒ๋ ์๊ฒ๋์ต๋๋ค. ์ ํ๋ธ์ ๊ตฌ๊ธ๋ง, ์ธํ๋ฐ ๋ฑ ์จ๊ฐ ์๋จ์ ๋์ํ์ฌ ์๋ผ์คํฑ ์์น์ ํค๋ฐ๋๋ฅผ ์ค์นํ๋ ค ํ์ง๋ง, ๋ฒ๋ฒํ ์คํจํ์ต๋๋ค. ์ ๊ฐ ์ฃผ๋ก ๊ฒช์๋ ์ค๋ฅ๋ ์๋ผ์คํฑ ์์น๋ฅผ ์คํํ๋ฉด ํค๋ฐ๋๋ฅผ ์คํํ ์ ์๊ฒ๋๋๋ฐ, โkibana server is not ready yetโ ์ด๋ผ๋ ์ค๋ฅ๊ฐ ๋ด๊ณ ์ด์ ๊ตฌ๊ธ๋ง์ ํตํด ํค๋ฐ๋์ ์๋ผ์คํฑ ์์น์ ๋ฒ์ ์ ๊ฐ๊ฒํด๋ดค์ง๋ง ๋ฌธ์ ๊ฐ ์ฌ์ ํ ๋ฐ์ํ์ต๋๋ค. ๋ โjob for elasticsearch.service failed because a fatal signal was delivered to the control processโ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ๊ตฌ๊ธ๋ง์ ํด๋ณด๋ log๋ฅผ ์ฐ์ด๋ณด๋์ status๋ฅผ ํตํด ํ์ธํด๋ณด๋ โelasticsearch.service: failed with result 'timeoutโ.โ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ด์ ๊ตฌ๊ธ๋ง์ ํตํด timeoutSec์ ๋๋ ค๋ดค์ง๋ง, ์ฌ์ ํ ์๋ฌด๋ฐ ํจ๊ณผ๋ ๋ณด์ง ๋ชปํ์ต๋๋ค. 5์ผ ์ ๋์ ์๊ฐ์ ๋ค์์ง๋ง, ์๋ฌด๋ฐ ์ง์ ์ด ์์๊ณ ec2 ์๋ฒ์์ ์ฐ๊ฒฐ๊น์ง ๊ณ์ ๋์ด์ง์ ํํฐ๋๊ป ๋ฌธ์๋ฅผ ๋๋ฆฌ๊ฒ ๋์ต๋๋ค. ๋ฌธ์ ๊ฒฐ๊ณผ ec2์ ์ฌ์์ด ๋ถ์กฑํ ๊ฒ์ด ๋ฌธ์ ์์ต๋๋ค. ํ์๋ค๊ณผ ์๋ ผํด๋ณธ ๊ฒฐ๊ณผ ์ด๋ฏธ ๋๋ฌด ๋ง์ ์๊ฐ์ ์๋ผ์คํฑ ์์น์ ์ค์น์ ์ฌ์ฉํ๊ณ EC2๋ฅผ ์ ๊ทธ๋ ์ด๋ ํ๊ธฐ ์ํ ์ 54000์์ ๋น์ฉ๋ ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ๋จํ์ฌ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
๊ทธ๋ ๊ฒ ๋ง์ง๋ง์ผ๋ก ๋ชฝ๊ณ DB ์ํ๋ผ์ค๋ฅผ ๋์ ํด๋ณด๊ธฐ๋ก ํ์ต๋๋ค. ์๋ฆฌ์คํฑ ์์น์ ๋ง์ฐฌ๊ฐ์ง๋ก lucene ๊ธฐ๋ฐ์ผ๋ก
nori๋ฅผ ์ฌ์ฉํ ์ ์์ด ํ๊ธ ํ ํ ์คํธ ์์น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค. search Index์ ์ธ์ด ๋ถ์๊ธฐ๋ก ๋ ธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ aggregate๋ฅผ ํตํด ์ธ๋ฑ์ฑ์๋ ์ฑ๊ณตํ์์ต๋๋ค. ๋ค๋ง ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๋ณด๋ค ์๋๊ฐ 3๋ฐฐ ์ด์ ๋๋ฆฌ๋ค๋ ๊ฒ์ด์์ต๋๋ค. ๋ ์คํ ์๋ ์์ ๋ฑ์ ๊ธฐ๋ฅ๋ค๋ ์๋ฒฝํ๊ฒ ๊ตฌํ๋์ง ์์ ์ ํ์ฑ๋ ์ฝ๊ฐ์ ๋จ์ด์ง๋ ๋ชจ์ต์ ๋ณด์์ต๋๋ค.
(๋ชฝ๊ณ DB ์ํ๋ผ์ค๋ฅผ ์ด์ฉํ์ ๋์ ๊ฒ์ ์๋)
์ฐ์ ์๋์ ์ธ ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ช๊ฐ์ง ๊ฐ๋ฅ์ฑ์ ์๊ฐํด๋ดค์ต๋๋ค.
*1. DB๊ฐ ํด๋ผ์ฐ๋์ ์์ด ๋๋ฆฐ๊ฐ?*
*2. Nori ํํ์ ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํด์ ๋๋ฆฐ๊ฐ?*
์ฐ์ ์ํ๋ผ์ค์์ ์์ด๋ก ํ
์คํธ๋ฅผ ํด๋ดค์ง๋ง , ํ๊ธ๋ก ํ์๋์ ๋น์ทํ ์๋๋ฅผ ์ป์ ์ ์์๊ณ
์ ํฌ๋ 1๋ฒ์ ์ด์ ์ ๋ ๋ง์ถ๊ฒ ๋์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํด๋ผ์ฐ๋์ด๊ธฐ ๋๋ฌธ์ ๋ก์ปฌ๋ณด๋ค๋ ๋น์ฐํ ๋๋ฆด ์ ๋ฐ์ ์๋ค๋ ๊ฒฐ๋ก ์ด ๋์๊ณ ์ ํฌ๋ ์ตํ์ ์๋จ์ผ๋ก ์ํ๋ผ์ค์ ์ง์ญ์ ๊ธฐ์กด ๋ฒ์ง๋์์์ ์ฑ๊ฐํด๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ๋น์ฐํ ๊ฒฐ๊ณผ์์ง๋ง, ์๋๊ฐ ์์นํ์ต๋๋ค. ๋ ์ด์ ๊ด๋ จ๋์ด ํ์ฌ๋ food ์ปฌ๋ ์ ๋ง ์ํ๋ผ์ค์์ ํ ์คํธํ๊ณ ์๋๋ฐ ๋ค๋ฅธ ์ปฌ๋ ์ ๋ค์ ์ํ๋ผ์ค๋ก ์ฎ๊ธธ ๊ฒ์ธ์ง ์ง๊ธ์ฒ๋ผ food ์ปฌ๋ ์ ๋ง ์ํ๋ผ์ค์์ ์ฌ์ฉํ๊ณ ๋๋จธ์ง๋ฅผ ๋ถ๋ฆฌํด์ ์ฌ์ฉํ ๊ฒ์ธ์ง์ ๋ํด์ ๊ณ ๋ฏผ์ ํ๊ฒ ๋์ต๋๋ค. ํ์ง๋ง ์ํ๋ผ์ค์์๋ ์ ์ฒด์ ์ธ DB ์์ ๋ค์ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ป์๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ์ DB๋ฅผ ์ฌ์ฉํ์๋ ๊ฒฐ๋ก ์ ๋ฌํ์ต๋๋ค.
(๋ฒ์ง๋์์ ์ฑ๊ฐํฌ๋ฅด์ ๊ฒ์ ์๋ ๋น๊ต)
๋๋ฒ์งธ๋ก ์ ํ์ฑ ๋ถ๋ถ์ ์์ง ํด๊ฒฐํ๋ ์ค์ด์ง๋ง, ์คํ ์๋ ์์ ๊ธฐ๋ฅ์ด ํ๊ธ์ ์๋ฒฝํ ์ง์ํ์ง ์๋ ๊ฒ ๊ฐ๋ค๋ ์ฌ์ค์ ํ์
ํ์ต๋๋ค.
์ด๋ป๊ฒ ํํฐ๋ฅผ ์ฃผ๋๋์ ๋ฐ๋ผ์ ์ด๋ค ํค์๋๋ ์ ํ์ฑ์ด ์ฌ๋ผ๊ฐ์ง๋ง, ๋ค๋ฅธ ํค์๋์ ์ ํ์ฑ์ ์คํ๋ ค ๋จ์ด์ง๋ ๊ฒฝ์ฐ๋ ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ์ ๊ท์๊ณผ ์ธ๋ฑ์ฑ์ ๋์์ ์ฌ์ฉํ ๊ฒฝ์ฐ โ๊ฟฉโ๊ณผ ๊ฐ์ ํ๊ธ์ ํค์๋๋ฅผ ์ ๋ ฅํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ๊ณ ย ์ ๊ท์์ ์ง์ฐ๋ ๋ฐฉ์์ ์ ํํ์ต๋๋ค.
ํฅํ ์ถ๊ฐ์ ์ผ๋ก ํด๊ฒฐํ ๋ฌธ์ ๋ ์ฌ์ ํ ์ ํ๋์ ์๋์ ๊ดํ ๊ฒ์
๋๋ค.
๋ ํจ์จ์ ์ผ๋ก ์ธ๋ฑ์ฑ์ ํ์ฌ ์๋๋ฅผ ๋์ด๊ณ ์์ง ๊ฒ์ ๊ฒฐ๊ณผ์ ์์ด์ ์ฐ๊ด๋๊ฐ ๋๋ฌด ๋จ์ด์ง๋ ๊ฒฐ๊ณผ๋ค๊น์ง ์ถ๋ ฅ๋๋๋ฐ ์ด๋ฅผ ์์ ํ๋๊ฒ์ ์ด์ ์ ๋ง์ถ ๊ณํ์ ๋๋ค.
**โ์ค๊ฐ๋ฐํํโ**
์ถ๊ฐ์ ์ธ ์๋๋ฅผ ํฅ์์ ์ํด์ ๋๊ฐ์ง ๋์ ์ ๋ํด๋ดค์ต๋๋ค.ย Region์ ์ฑ๊ฐํด๋ก ์ฎ๊ธด๊ฒ๋ง์ผ๋ก๋
2๋ฐฐ์ ์๋ํฅ์์ด ์์๋๋ฐ ๋ง์ฝ์ ์์ธ๋ก ์ฎ๊ธธ ์ ์๋ค๋ฉด ์ผ๋ง๋ ๋ ์๋๊ฐ ์ฌ๋ผ ๊ฐ๊น๋ผ๋ ์๊ฐ์ ํ๊ฒ ๋์ต๋๋ค. ์ฐ์ ์ํ๋ผ์ค์์ ์ง์ญ์ ์์ธ๋กํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ๋ง๋ค ์ ์๋ ๋ฐฉ์์ด ์์ด ์ด๋ฅผ ์๋ํ์ง๋ง, ์์ฝ๊ฒ๋ ์ ํฌ๊ฐ ์ฌ์ฉํ๊ณ ์๋ M0 ํ๋ฆฌํฐ์ด์์๋ ์์ธ์ ์ ํํ ์ ์์์ต๋๋ค. ๊ทธ๋์ ์ฐจ์ ์ฑ ์ผ๋ก ๋ค๋ฅธ VPC๊ฐ์ ์ฐ๊ฒฐ์ ํ ์ ์๊ฒ ํด์ฃผ๋ Peering์ ํตํด ์ํ๋ผ์ค์ ์ ํฌ ์๋ฒ EC2๋ฅผ ์ฐ๊ฒฐํ๋ ค ํ์ง๋ง, Peering ๊ธฐ๋ฅ๋ ํ๋ฆฌํฐ์ด์์๋ ์ฌ์ฉํ ์ ์์์ต๋๋ค. ์ด ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ต์ํ ์ 72000์ ์ ๋์ ๊ธ์ก์ ์ง๋ถํด์ผํ๊ณ ์๋ผ์คํฑ ์์น๋ฅผ ์ฌ์ฉํ์ง ์์ ์ด์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ ํฌ๊ธฐํ ์ ๋ฐ์ ์์์ต๋๋ค.
์์ ๋ฌธ์ ๋ค์ ๋ํด ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์๊ฒผ๋๋ฐ, ๋ช๋ช ํค์๋๋ค, ํนํ ๋ฐฅ, ์นํจ, ํผ์ ์ฒ๋ผ ๋น๊ต์ ํฌ๊ด์ ์ธ ํค์๋๋ค์ ๊ฒ์๊ฒฐ๊ณผ๊ฐ
๋ช ์ฒ๊ฐ์ฉ ์ถ๋ ฅ๋์ด ๊ฒ์์๋๊ฐ ๋๋ฌด ๋๋ฆฌ๋ค๋ ๊ฒ์ด์์ต๋๋ค. ๊ทธ๋์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ์ํด $limit๋ฅผ ํตํด 1000๊ฐ์ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅ๋๋๋ก ์ค์ ํ๊ณ ์๋๊ฐ ํ์ฐํ ์ฌ๋ผ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์์์ต๋๋ค. ์ด๋ ๊ฒ ๊ณผ๊ฐํ๊ฒ $limit๋ก 1000๊ฐ์ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅ๋๋๋ก ํ ๊ทผ๊ฑฐ๋ ์ ํฌ ๊ฒ์์ ์ฐ๊ด๋ ์์ผ๋ก ์ถ๋ ฅ์ด ๋๊ธฐ ๋๋ฌธ์ 1000๊ฐ ์ด์์ ๋ฐ์ดํฐ๋ค์ ๊ฒ์ํ ํค์๋์ ์ฐ๊ด๋๊ฐ ๋ง์ด ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
($limit: 1000 ์ค์ ์ ๋ฌด์ ๋ฐ๋ฅธ ์๋ ๋น๊ต)
๋ค์์ผ๋ก ์ ํ๋ ๊ฐ์ ์ ์ํด์ ์ธ ๊ฐ์ง ๋ฐฉ์์ ๊ตฌ์ํ์ต๋๋ค. ์ฒซ๋ฒ์งธ๋ก ์ ๊ท์์ ์ฌ์ฉํ๋ ๋ฐฉ์์
๋๋ค.
ํ์ง๋ง ์ ๊ท์์ ์ฌ์ฉํ ๊ฒฝ์ฐ lucene์ nori๊ฐ ์๋ keyword๋ก ์ฌ์ฉํด์ผํ๊ธฐ ๋๋ฌธ์ ์์๋ถํฐ ๋ฌธ์ ๊ฐ ์์๊ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค . ์๋๋ ๋ค๋ฅผ๊น ์๋์ ์ฌ์ง์ ๋ณด๋ฉด lucene nori๋ฅผ ์ฌ์ฉํ์ ๋ณด๋ค ๊ฒ์ ๊ฒฐ๊ณผ์ ์ ํ๋๊ฐ ๋งค์ฐ ๋จ์ด์ง๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
($regex๋ฅผ ์ฌ์ฉ ์ ๋ฌด์ ๋ฐ๋ฅธ ์ ํ๋ ๋น๊ต)
๋๋ฒ์งธ๋ก fuzzy๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋ฅผ ์์ ํจ์ผ๋ก์จ ๊ฒ์ ์ ํ๋๋ฅผ ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ดค์ต๋๋ค.
maxEdits ๊ธฐ๋ฅ์ 1๊ฐ ํน์ 2๊ฐ๋ฅผ ์ต์ ์ผ๋ก ์ ํํ์ฌ ๊ทธ ๊ฐ์๋งํผ ์คํ์ ํธ์ง์ ํ์ฉํ๋ ๊ฒ์ ๊ฒฐ์ ํฉ๋๋ค. prefixLength ๊ธฐ๋ฅ์ ์ถ๋ ฅ ๊ฐ์ ์์ ๋ถ๋ถ์์๋ถํฐ ์ ํํ ์ผ์นํด์ผํ๋ ๊ธ์ ์๋ฅผ ์ ํ๋ ๊ฒ์ ๋๋ค. ์ ๋ ์ด ๋ถ๋ถ์ ๋ค์ํ๊ฒ ์ค์ ํ๋ฉฐ ์ฌ๋ฌ ์๋๋ฅผ ํด๋ดค์ง๋ง, Lucene nori์์๋ ์ด ๊ธฐ๋ฅ์ด ์ ์ฉ๋์ง ์๋ ๊ฒ ๊ฐ๋ค๋ ๊ฒฐ๋ก ์ ๋ฌํ์ต๋๋ค.
(fuzzy๋ฅผ ์ฌ์ฉํ์ง๋ง, ์ ์ฉ์ด ์ ์๋ ๋ฏํ ๊ฒฐ๊ณผ๋ฌผ)
๊ทธ๋์ ๋ง์ง๋ง์ผ๋ก ์ ํฌ๊ฐ ๊ฒช๊ณ ์๋ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ์๊ฐํด๋ดค์ต๋๋ค. ๊ฒ์ ์ ํ๋๊ฐ ๋จ์ด์ง๋ค๊ณ
ํ๋จํ ์ด์ ๋ ๊ฐ์ฅ generalํ ๊ฐ์ ๊ฒ์ํ์ ๋, ๊ทธ ๊ฐ์ด ๋์ค์ง ์๋๋ค๋ ๊ฒ์ด์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉดย ์ค์ด๋ฅผ ๊ฒ์ํ๋ฉด โ์ค์ด๊น์นโ, ์นํจ์ ๊ฒ์ํ๋ฉด โํ์ด์นํจโ๊ณผ ๊ฐ์ ๊ฐ๋ค์ด ๊ฐ์ฅ ์์ ์ถ๋ ฅ๋๋ฉด์, ๊ฒ์ ํค์๋์ ์ ํํ ์ผ์นํ๋ ๊ฐ์ด ๋์ค์ง ์์์ต๋๋ค. ์ด์ ์ ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ด๋ ๊ฒ ๋๋ฝ๋ ๊ฐ๋ค์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ์ต๋๋ค. ๋ ๊ฒ์ ๊ฐ์ด๋๋ฅผ ์์ฑํ์ฌ ๊ฒ์ํ ๋ ์ด๋ป๊ฒ ์ํ๋ ๊ฐ์ ๊ฐ๊น์ด ๊ฒฐ๊ณผ๋ฌผ์ ์ป์ ์ ์๋์ง๋ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๋ ์๊ฐํด๋ดค์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํฅํ ์ ์ ๊ฐ ์ ์ ๋๋ฉด ๊ฒ์์ด ์ฌ์ DB๋ฅผ ๊ฐ์คํ์ฌ ์ฌ์ฉ์๋ค์ด ์ํ๋ ๋ฐ์ดํฐ๋ ์ถ๊ฐํ๊ณ ์คํ๋ค์ ์ ์ฅํ์ฌ ์ฌ์ฉ์๊ฐ ์คํ๋ฅผ ์ ๋ ฅํด๋ ์ ํํ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก ํ ๊ณํ์ ๋๋ค.
๋๊ฐ์ DB๋ฅผ ๋ค์ค ์ฐ๊ฒฐํ ์ ์์๊น
์ํ๋ผ์ค๋ฅผ ์ฌ์ฉํ๋ฉฐ ๊ฑฑ์ ํ๋ ์ ์ด ์ํ๋ผ์ค์ ์๋๊ฐ ์ผ๋ฐ mongo db๋ณด๋ค ๋๋ฆฌ๋ค๋ ๊ฒ์ธ๋ฐ,
๊ทธ๋ ๋ค๋ฉด ์์ ์ปฌ๋ ์
๋ง ์ํ๋ผ์ค๋ฅผ ์ด์ฉํ๊ณ ๋๋จธ์ง ์ปฌ๋ ์
๋ค์ ๊ธฐ์กด์ mongo db๋ฅผ ์ด์ฉํ ์ ์๋์ง ์์๋ดค๋ค.
์๋์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ๋๊ฐ์ DB๋ฅผ ๋ค์ค์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ ์ ์์๋ค.
์์๊ฐ์ ํํ๋ก models/index.js๋ฅผ ๋๊ฐ๋ก ๋๋ ์
'export const ๋ณ์๋ช
= mongoose.createConnection(mongodb ์ฃผ์)๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ models์์ ํ์ํ DB์ ๋ง๊ฒ ๋ณ์๋ฅผ
importํ์ฌ์ฌ์ฉํ๋ฉด ๋๊ฐ์ ๋ค๋ฅธ DB๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
ํธ๋ํฝ ์ฒ๋ฆฌ & ๊ณผ๋ถํ ํ ์คํธ
์๋น์ค๋ ์ง์์ ์ผ๋ก ์ ๊ณตํด์ฃผ์ด์ผ ํ๋๋ฐ ์๋ฒ๊ฐ ๋ป์ด ๋ฒ๋ฆฌ๊ฑฐ๋ ์๊ธฐ์น๋ชปํ ์ค๋ฅ๋ก ์ธํด์ ์๋ฒ๊ฐ ๋ค์ด๋๋ฉด?
๊ฐ๋ฐ์๋ ํ์ฌ ๋น์ฆ๋์ค ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ์์ง๋์ด๋ง ์์ค์ ๊ฒฐ์ ํ๋ ๋ฅ๋ ฅ์ด ๋๊ฒ ์ค์ํ๋ค๊ณ ์๊ฐํ๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ฅฌ๋์ด๊ฐ๋ฐ์์ธ ์ ๊ณผ ๋์์ ๋ฐ์นญ์ ์์๋น์ค๋ ๊ทธ ์์ค์ ๊ฒฐ์ ํ๊ธฐ๊ฐ ํ๋ค๋ค. ๊ทธ ์ค ํธ๋ํฝ์ ๋์ฑ ์์์ ํ ์๊ฐ์๊ธฐ๋๋ฌธ์ ๋ง์ฝ ์ฌ์ฉ์๊ฐ ํญํ์ ์ผ๋ก์ฆ๊ฐํ์ ๋ ๊ธฐ์ ์ ์ค๋น๊ฐ ์ ๋์ด ์๋ค๋ฉด ๊ฐ๋ฐ์์ ์๋น์ค ๋ชจ๋ ํฐ ํ๊ฒฉ์ ๋ฐ๋๋ค๊ณ ์๊ฐํด์ ์ถํ ์ข ๋ ์์ ์ ์ธ ์๋ฒ๋ฅผ ์ํด ๋์ปค์ค์์ ๊ธฐ์ ์ ๋์ ์ผ๋ก ์๋๋ฅผ ํด๋ดค๋ค. ํ๋์ ์ธ์คํด์ค๋ฅผ ๋งค๋์ ๋ ธ๋๋ก ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํ๋์ ์ธ์คํด์ค์ 2๊ฐ์ ๋งค๋์ ๋ ธ๋๋ก ์ด 3๊ฐ์ replicas๋ฅผ ๊ตฌ์ฑ์ ํ๋ค. ๋ณดํต ํ์ ์์ ๋์ปค ์ค์ผ์คํธ๋ ์ด์ ์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ๋ง์ด ์ฐ์ง๋ง ๋ฌ๋์ปค๋ธ๊ฐ ํฌ๊ณ ๋ช๊ฐ ์๋๋ ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ์๋ ๋์ปค ์ค์์ด๋ ์ ์ ํ๊ฑฐ๊ฐ์ ๋์ปค์ค์์ ์๊ฐํ๋ค.
์คํ ๋ฆฌ์คํํธ or ์
ํํ๋ง
docker ์ปจํ ์ด๋๋ฅผ ๋์ธ๋ restart์ต์ "โrestart on-failure[:maxretries]" ๋ฅผ ์ ์ฉํ์ฌ exit 0(์ ์์ ์ธ ์ข ๋ฃ)์ด ์๋๊ฒฝ์ฐ ์์์ ๋ค์ ๋ฆฌ์คํํธ ํ ์์๋๋ก ์ค์ ํด๋๊ณ sentry๋ก ์๋ฌ๊ฐ ๋ฌ์์ ์๋ฌ๋ก๊ทธ๋ฅผ ์์งํ๊ณ slack์ผ๋ก ์๋ ค์ค์ ์๊ฒ ์ค์ ํด์ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉํฅ.
์คํ ์ค์ผ์ผ๋ง
์ฟ ๋ฒ๋คํฐ์ค๋ ์คํ ์ค์ผ์ผ๋ง ์ต์ ์ ์ง์ํ๋ ๋์ปค ์ค์์ ์ํ๋ฏ๋ก ๋ฏธ๋ฆฌ ์ค์ผ์ผ ์์์ ์งํํด์ผํ๋ค. ๊ทธ๋์ ๋ ํ๋ฆฌ์นด ์ ์ ์ผ๋ก ๋งค๋์ ๋ ธ๋์ ์์ปค ๋ ธ๋๋ฅผ ๋๋ ์ ๋ ํ๋ฆฌ์นด๋ก ์๋ฒ๋ฅผ ๋๋์ด์ ๋์์ ํธ๋ํฝ์ ๋ถ์ฐ์ํค๋ฉด ๋์ง๋ง ํ์ฌ ์ ์ ํ๋ณด๊ฐ ๋์ง ์์ ์ํฉ์์ ๋ฏธ๋ฆฌ ์ค์ผ์ผ ์์์ ์ค๋ฒ์์ง๋์ด๋ง์ด๋ผ ์๊ฐํด์ ์ผ๋จ ํ๋์ ์๋ฒ๋ก ๋๋ฆฌ๊ณ ์ ํ ํ๋ง ์ต์ ๋ง ์ฃผ๊ธฐ๋ก ๊ฒฐ์ .
loader.io๋ฅผ ํตํ ๊ฐ๋จํ ๋ก๋ ํ ์คํธ ๊ฒฐ๊ณผ, 15์ด ๊ธฐ์ค ์๋น์ค ์ด์ฉ์ 2400๋ช ๋ถํฐ ์๋ฌ์ ๊ณผ๋ถํ๊ฐ ์์๋๋๊ฒ์ธ์คํด์ค ํ๊ฐ์ ๋งค๋์ ๋ ธ๋ 2๋๋ฅผ ๋ ์ฐ๊ฒฐํ๊ณ ๋์ปค์ค์์์ ์ฉํ ์๋ฒ์๋ ๋ฆฌ๋ฐ์ด 3300๋ช ๊น์ง ๋์๋ค.
DB ๋ฐ์ดํฐ๊ฐ ์ค๋ณต๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ฑ์ด ์๋ ๊น?
์ฌ๋ฌ ๋ธ๋๋์์ ๊ฐ์ ์ด๋ฆ์ ์ํ์ ์ถ์ํ ๊ฒฝ์ฐ name ํ๋์ ๋ธ๋๋๋ช
์ ๋ถ์ผ ๊ฒ์ธ์ง,
brand ํ๋๋ฅผ ์๋ก ๋ง๋ค์ด์ ๋ธ๋๋๋ช
์ ๋ฃ์ด์ค ๊ฒ์ธ์ง์ ๋ํด์ ๋ฐฑ์๋์ ํ๋ก ํธ์๋ ๊ฐ์ ์๊ฒฌ์ด ๊ฐ๋ฆฌ๊ฒ ๋๋ค.
์ฐ๋ฆฌ ๋ฐฑ์๋์ ์
์ฅ์ brand ํ๋๋ฅผ ๋ง๋ค์ด์ ๋ธ๋๋๋ช
์ ๋ฐ๋ก ๋ถ๋ฆฌํ ๊ฒฝ์ฐ name ํ๋๊ฐ ์ค๋ณต๋ ์ฌ์ง๊ฐ ์๊ณ
๊ทธ๋ ๊ฒ ๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ฑ์ด ์ ๋ ์ง์ ๋ํ ์ฐ๋ ค์๊ณ ํ๋ก ํธ์๋์ ์
์ฅ์ name ํ๋์ ๋ธ๋๋๋ช
์ ๋ถ์ผ ๊ฒฝ์ฐ ๊ทธ ๊ธธ์ด๊ฐ ๋๋ฌด ๊ธธ์ด์ ธ์
์๊ฐ์ ์ผ๋ก ๋ณด๊ธฐ ์ข์ง ์๋ค๋ ๊ฒ์ด์๋ค. ๊ทธ๋์ ๋๋ ์ค๋ณต๋ฐ์ดํฐ์ ๋ํ ์ธ๋ฑ์ฑ์ด ์ ๋๋๊ฐ์ ๋ํด์ ์ฐพ์๋ดค๋ค.
๊ฒฐ๊ณผ๋ ์ธ๋ฑ์ฑ์ด ๋๊ธด ํ์ง๋ง, ์ค๋ณต๋ ๊ฐ์ด ์์๋ ์ธ๋ฑ์ฑ์ ํ๋ ๊ฒ์ ํจ์จ์ด ๋จ์ด์ง๋ ํ์๋ผ๋ ๊ธ์ ์ฐพ๊ฒ ๋๋ค.
๊ทธ ์์๋ก ๋จ์ฌ๋ก ์ธ๋ฑ์ฑ์ ํ ๊ฒฝ์ฐ ๋๋ฌด ๋ง์ ์ค๋ณต์ด ์๊ธฐ ๋๋ฌธ์, ์ธ๋ฑ์ฑ์ ํ๋ ์ํ๋ ๋น์ทํ ๊ฒฐ๊ณผ๋ฌผ์ด ๋์จ๋ค๋ ๊ฒ์ ๋ณผ ์ ์์๋ค.
์ด์ ๋๋ ์ฐ๋ฆฌ ๋ฐ์ดํฐ๋ ๋จ์ฌ๋ก ์ธ๋ฑ์ฑ์ ํ๋ ๊ฒ์ฒ๋ผ ๊ทน๋จ์ ์ผ๋ก ๋ง์ ์ค๋ณต์ ์์ ๊ฒ์ผ๋ก ํ๋จํ๊ณ ๋๋ต 200๊ฐ
์ ๋์ ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ๊ฒ์ ์๋์ ์ฐจ์ด๋ฅผ ํ์ธํด๋ดค๋ค.
(๊ฟฉ๋ถ๊ณ ๊ธฐ๋ฅผ 200๊ฐ ๋ง๋ค์ด ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ์์๋์ ์๋์ ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ์์๋์ ์๋ ๋น๊ต)
ํ
์คํธ ๊ฒฐ๊ณผ ์๋์๋ ํฐ ์ฐจ์ด๊ฐ ์์๊ณ ์ฐ๋ฆฌ๋ brand ํ๋๋ฅผ ์๋ก ๋ง๋ค์ด์ name ํ๋์ ์ค๋ณต์ ํ์ฉํ๊ธฐ๋ก ํ๋ค.
๊ทธ๋ ๊ฒ name๊ณผ brand์ ๊ฐ์ด ์ธ๋ฑ์ฑ์ ์ฃผ์๋๋ฐ ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค.
name, brand ์ด๋ ๊ฒ์ ์ฐ์ ์์๋ฅผ ๋๋๋ผ๋ ๊ฒ์ ์ ํ๋๊ฐ ํ์ ํ ๋จ์ด์ก๋ค.
(์ด๋ฆ์ ์ฐ์ ์์๋ฅผ ๋๊ณ ํผ์๋ฅผ ๊ฒ์ํ์ง๋ง, ํผ์๋ผ๋ generalํ ๊ฐ๋ณด๋ค brand์ name ํ๋์
๋ชจ๋ ํผ์๊ฐ ํฌํจ๋ ๊ฐ๋ค์ด ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ก ์ถ๋ ฅ๋จ)
์์๊ฐ์ ๋ฌธ์ ์ ๋๋ฌธ์ name ํ๋์ ๋ธ๋๋ ์ด๋ฆ์ ๋ถ์ฌ์ฃผ๋ ์์
์ ๋ฐ์ดํฐ 2์ฐจ ๊ฐ๊ณต๋ ์งํํ๊ธฐ๋ก ํ๋ค.