์ ์ฒด ๊ธ ์ธ๋ค์ผํ ๋ฆฌ์คํธํ Node.js์ ์ด๋ฒคํธ ๋ฃจํ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ ํ์ฌ์ ๊ฐ๊ฒ๋์ด์, ๋ ธ๋๋ฅผ ๋ฐฐ์ฐ๊ณ ์๋๋ฐ... ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ ธ๋๋ ๋ค ์ฒ์ ๋ฐฐ์ฐ๊ณ ์์ด์ ์ด๋ ค์ด ๊ฒ์ด ๋ง์ ๊ฑฐ ๊ฐ๋ค. ํนํ ์ดํดํ๊ธฐ ์ด๋ ค์ด๊ฒ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)์๊ณ , ํต์ฌ์ ์ธ ๋ถ๋ถ์ธ ๊ฒ ๊ฐ๋ค๊ณ ๋๊ผ๋ค. ๋ ธ๋์ ๊ด๋ จ๋ ๋ชจ๋ ์ด์ผ๊ธฐ๊ฐ ์ด๋ฒคํธ ๋ฃจํ๋ก ๋ชจ์ด๋๋ฏํ ๋๋์ ๋ฐ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ์ด๊ฑธ ์ดํดํ๋ค๋ฉด ๋ ธ๋์ ๊ตฌ์ฑ ์์์ ๋์ ๋ฐฉ์์ ๋ฌผ๋ก ์ด๊ณ ์ฐ์ ์์๊ฐ ๋๋์ด์ ธ์๋ ๋น๋๊ธฐ์์ ๋ค์ ์ ๊ตฌ๋ถํ๊ณ ์ค์ ํ ์ ์๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋ฐ ์ด์ ๋ก ์ด๋ฒ ๊ธ์์ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ค์ฌ์ผ๋ก ๋ ธ๋์ ๊ด๋ จ๋ ์ฌ๋ฌ๊ฐ์ง ์ง์๋ค๋ ํจ๊ป ์ ๋ฆฌํ๋ฉด์ ๊ณต๋ถํด๋ณผ ์๊ฐ์ด๋ค. ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ๊ธ๋ ํจ๊ป ์์ฑํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ถ์ ํํ ์ ๋ณด๊ฐ ์์ ์๋ ์๋ค! ๊ทธ๋ฌํ ๋ถ๋ถ๋ค์ ์ค๋ฌด๋ฅผ ๊ฒฝํํ๋ฉฐ ์ฐจ์ฐจ ์์ ํด๋๊ฐ๋ณด๊ฒ ๋ค. .. ๋๋ณด๊ธฐ MySQL์์ ACID๋ฅผ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ ๊ฐ์MySQL๊ณผ ๊ฐ์ RDB๋ ์์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ํธ๋์ญ์ ์ ๋ณด์ฅํ๊ธฐ ์ํด ACID ์ฑ์ง์ ํต์ฌ ์์น์ผ๋ก ์ผ๊ณ ์ด๋ฅผ ๊ตฌํํ๊ณ ์๋ค. ๋ณดํต ACID ์ฑ์ง์ ์๋์ ๊ฐ์ด ์ ์๋๋ค.Atomicity (์์์ฑ): ํธ๋์ญ์ ์ ๋ชจ๋ ์์ ์ ์ ๋ถ ์ฒ๋ฆฌ๋๊ฑฐ๋, ํ๋๋ ์ฒ๋ฆฌ๋์ง ์์์ผ ํ๋ค.Consistency (์ผ๊ด์ฑ): ํธ๋์ญ์ ์ด ์๋ฃ๋ ํ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๊ด๋ ์ํ(๊ท์น, ์ ์ฝ ์กฐ๊ฑด)๋ฅผ ์ ์งํด์ผ ํ๋ค.Isolation (๋ ๋ฆฝ์ฑ): ๋์์ ์ํ๋๋ ์ฌ๋ฌ ํธ๋์ญ์ ์ ์๋ก ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํด์ผ ํ๋ค.Durability (์ง์์ฑ): ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ํธ๋์ญ์ ์ ๊ฒฐ๊ณผ๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์๋์ด์ผ ํ๋ค.์ ์์ ๋ํด์๋ ์ ์๊ณ ์์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ด๋ฅผ ์ด๋ป๊ฒ ๋ณด์ฅํ๊ณ ์๋์ง ์์ธํ ๋ด์ฉ์ ๊ณต๋ถํด๋ณด์ง ์.. ๋๋ณด๊ธฐ ๊ณต๊ฐ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํฐ ๊ด์ ์ผ๋ก ์์ ๊ฐ์ ํ๋ค. ์ทจ์ค์์ผ๋ก ์ด๋ฃจ์ด์ง ํ์ด๋ค๋ณด๋, ์ธํ๋ผ์ ๋์ ์ต๋ํ ์๋ผ๊ณ ์ t4g.micro๋ก DB๋ฅผ ์ด์ํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. ๊ทธ๋ฐ๋ฐ, ์ด ์คํ์์ ๊ณต๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๊ฒ ๋๋ฉด CPU ์ง์ฝ์ ์ธ ๊ณต๊ฐ ์ฟผ๋ฆฌ ํน์ฑ์ ์ฝ 2~3์ด์ ์๊ฐ์ด ๊ฑธ๋ ค ์๋ต์ด ์ฌ๋งํผ ๋๋ ค์ก๋ค. ๊ทธ๋์ ์ฒ์์๋ ๊ณต๊ฐ ์ฟผ๋ฆฌ ์์ฒด๋ฅผ ์ต์ ํ ํ๊ธฐ ์ํด์ ์ฌ๋ฌ ๋ฐฉ์์ ์๋ํ๋ค. ๊ธฐ์กด์๋ $nearSphere๋ผ๋ ๊ณต๊ฐ ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ฃผ์ด์ง ์ฌ์ฉ์์ ์์น์์ ๋ฐ์ง๋ฆ์ด 1~3km๋ก ์ด๋ฃจ์ด์ง ์ ์ด๋ด์ ํฌํจ ๋ฐ ๊ฑธ์ณ ์ง๋๊ฐ๋ ๋ฌ๋ ์ฝ์ค๋ฅผ ์กฐํํ๊ณ ์์๋ค. ๊ทธ๋์ MongoDB์์ ์ ๊ณตํ๊ณ ์๋ ๊ณต๊ฐ ์ฟผ๋ฆฌ ์ค ๋๋จธ์ง 2๊ฐ๋ฅผ ํตํด ์ด๋ฅผ ์ต์ ํ ํด๋ณด๊ณ ์ ํ๋ค. $geoIntersectsํด๋น ์ฟผ๋ฆฌ๋ ๊ธฐ์ค์ด ๋๋ ๋ํ์ด ์ฃผ์ด์ง๋ฉด, ๊ทธ ๋ํ์ ์ง๋๋ ๊ณต๊ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด์ค๋ค. ๋ค๋ง.. ๋๋ณด๊ธฐ MySQL๊ณผ MongoDB ๊ณต๊ฐ ์ธ๋ฑ์ค์ ์ฐจ์ด ๊ฐ์๋ฐ์ธ๊ถ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ฉฐ MySQL์์ MongoDB๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ API ์๋ต ์๋๋ฅผ ํฌ๊ฒ ๊ฐ์ ํ ์ ์์๋ค. ์ฒ์์๋ ๋จ์ํ NoSQL์ธ MongoDB๊ฐ ๋ ๋น ๋ฅด๋ค๊ณ ๋ง ์๊ฐํ๋๋ฐ, ์ด ๊ธ์ ์ฐ๋ฉฐ ๊ทธ ์ฐจ์ด๊ฐ ๊ณต๊ฐ ์ธ๋ฑ์ค๊ฐ ๋ํ์ ๊ทผ์ฌํ๋ ๋ฐฉ์์ ์ฐจ์ด์์ ๋น๋กฏ๋๋ค๋ ๊ฒ์ ์ดํดํ๋ค. ์ด ๊ธ์์๋ ๊ณต๊ฐ ๋ฐ์ดํฐ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ MySQL๊ณผ MongoDB๊ฐ ๊ฐ๊ฐ ๊ณต๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ธ๋ฑ์ฑํ๋ ๋ฐฉ์์ ๋น๊ตํ๋ฉฐ, ๊ทธ ๋ด๋ถ ๋์ ์๋ฆฌ๋ฅผ ์ ๋ฆฌํ๋ค. ๊ณต๊ฐ ๋ฐ์ดํฐ๋ ๋ฌด์์ธ๊ฐ?๊ณต๊ฐ ๋ฐ์ดํฐ๋ ๊ธฐํํ์ ๊ฐ์ฒด์ ๋ฌผ๋ฆฌ์ ์์น ๋ฐ ๋ชจ์์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ฉฐ, GIS ์๋น์ค์์ ํต์ฌ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ด๋ค. ๊ณต๊ฐ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ํ์ค์ OGC(Open Geospatial Consortium, ๊ฐ๋ฐฉํ ๊ณต๊ฐ ์ .. ๋๋ณด๊ธฐ RPC(Remote Procedure Call)๋ ๋ฌด์์ผ๊น? 0. ๊ฐ์์๊ฒฉ ํจ์ ํธ์ถ ๋ง ๊ทธ๋๋ก ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋จ์ด์ ธ์๋ ์๋ฒ ๊ฐ์ ํต์ ์ ๋ก์ปฌ์์ ํจ์๋ฅผ ํธ์ถํ๋ฏ ๋์ํ๋๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฐ๋ ์ด๋ค. ์ฌ๊ธฐ์ ํต์ฌ์ ํธ์ถํ๋ ์ชฝ์์ ๋ก์ปฌ์ ์๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๊ธฐ์กด์ ํํ REST ๋ฐฉ์์ ์๋ฒ API๋ฅผ ๋ง๋ค ๋๋ฅผ ์๊ฐํด๋ณด๋ฉด URL๋ก ์์์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๊ณ HTTP ๋ฉ์๋๋ฅผ ํตํด ์์์ ์ด๋ค ํ์๋ฅผ ํ ์ง ๊ฒฐ์ ํ๊ณ ํ์ํ ๋ฐ์ดํฐ๋ฅผ JSON ๊ตฌ์กฐ๋ก ๋ฐ์ ์ฒ๋ฆฌํ๋ค. ์ฆ, ์์ ์ค์ฌ์ API๋ฅผ ์ค๊ณํ๋ค. ํ์ง๋ง RPC๋ ์์์ด ์๋ ํ์์ ์ด์ ์ ๋ง์ถ์ด API๋ฅผ ์ค๊ณํ๋ค. REST์์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ/์๋ต์ ๋ํ JSON ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ฏ, RPC๋ ์์ฒญ/์๋ต์ ํ์ํ ๋ฐ์ดํฐ ์คํค๋ง๋ฅผ ์ ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ REST์์ URL๋ก ์์์ ๊ฒฝ๋ก์ H.. ๋๋ณด๊ธฐ Fielding์ด ๋งํ๋ ์ง์ง REST API REST API๋ฅผ ๋ง๋ ์ฅ๋ณธ์ธ Fielding์ 2008๋ ์ REST APIs must be hypertext-driven ๋ผ๋ ๊ธ์ ์์ฑํ๋ค. ํด๋น ๊ธ์ ๋ด์ฉ์ ๋ณด๋ฉด Fielding์ด ์ค๊ณํ REST API๋ ๋ค์์ ๊ท์น์ ๋ฐ๋ผ์ผํ๋ค.์์์ ์๋ณ์์ ์ ๊ทผ ๋ฐฉ๋ฒ์ ๊ตฌ๋ถ๋์ด์ผ ํ๋ค.ํ์ค ํ๋กํ ์ฝ์ ์๋ ๊ทธ๋๋ก ์จ๋ผ.API ๋ฌธ์์ URL ๋ชฉ๋ก์ ๋์ดํ์ง ๋ง๋ผ. ๋์ , ์๋ต ํํ๋ฅผ ์ ์ ์ํด๋ผ.๊ณ ์ ๋ ์์ ์ด๋ฆ, ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ง๋ง๋ผ.ํ์ ์ด ์ง์ ๋ ์์์ ๊ฐ์ง์ง ๋ง๋ผ.์ฌ์ ์ง์์์ด ์ง์ ํ ์ ์๊ฒ ํ๋ผ.์ด๋ฌํ ๊ท์น์ ๋ฐ๋ฅด์ง ์์๊ฑฐ๋ฉด REST API๋ผ ๋ถ๋ฅด์ง๋ ๋ง๊ณ , ๋ค๋ฅธ ์ ํ์ด๋ฅผ ๊ณจ๋ผ ์ฐ๋ผ๋ ๋ง๊น์ง ํ ์ ๋๋ก REST API์ ํต์ฌ์ด๋ผ๊ณ ๊ฐ์กฐํ๊ณ ์๋ค. ๋๋์ฒด ์ด๋ค ๋ด์ฉ์ด๊ธธ๋ Fielding์ด ์ด๋ ๊ฒ๊น์ง .. ๋๋ณด๊ธฐ 1๊ฐ์ ์ฌ๊ณ ๊ฐ ์์ ๋ ๋์์ 100๋ช ์ ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ฉด? ์ต๊ทผ ๋ฉด์ ์์ ์ ๋ชฉ์ ๋ํ ์ง๋ฌธ์ ๋ฐ์๋ค. "1๊ฐ์ ์ฌ๊ณ ๊ฐ ์์ ๋ ๋์์ 100๋ช ์ ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ฉด ์ด๋ป๊ฒ ์ฒ๋ฆฌํ์๊ฒ ์ด์?" ํ์ฌ ์งํ ์ค์ธ ๋ ํ๋ก์ ํธ๊ฐ ๋์์ฑ์ ๋ํด์ ๊ณ ๋ คํ์ง ์์๋ ๋๋ ์๋น์ค์ด๋ค๋ณด๋ ์์ฐ์ค๋ ์ด๋ฐ ๋ถ๋ถ์ ๋ํ ํ์ต์ ํ์ง ๋ชปํ๊ธฐ์ ์ง๋ฌธ์ ๋ฐ์์ ๋ ๋นํฉํ๋ค. ๊ทธ๋์ ์ ๋ง ์๊ฐ๋๋๋๋ก ๋ต๋ณ์ ํ๋ค."์ ๋ ๋น๊ด์ ๋ฝ์ ํตํด ๋์์ฑ์ ์ ์ดํ ๊ฒ ๊ฐ์ต๋๋ค. ๋๊ด์ ๋ฝ์ ๊ฒฝ์ฐ ์ฌ์ฉ์ 1๋ช ์ด ๊ตฌ๋งค๋ฅผ ์งํํ๋ ๋์ ๋๋จธ์ง 99๋ช ์ ์ฌ๊ณ ๊ฐ ์์์ ํ์ธํ๊ณ ๊ตฌ๋งค๋ฅผ ์๋ํ ํ ๋ฐ, ์ด๋ ์ฌ๊ณ ๊ฐ ์๋ค๋ฉด ์ฌ์ฉ์ ๊ฒฝํ ์ธก๋ฉด์์ ๊ทธ๋ฅ ์ข์ ์ธ์์ ๋จ๊ธฐ์ง ๋ชปํ ๊ฒ ๊ฐ์ต๋๋ค." ์ด์ ์ฑ๋ฅ์ ๋ํ ์ง๋ฌธ๋ ๋์๊ณ , ์ด๋ ๊ฒ ๋ตํ๋ค. "๋น๊ด์ ๋ฝ์ด ์ฑ๋ฅ๋ฉด์์ ์ํด๋ฅผ ๋ณด๋ ๊ฑด ๋ง์ต๋๋ค. ๊ทธ๋์ ์ฃผ๋ฌธ, ๊ฒฐ์ ์ฌ์ด์ ํธ.. ๋๋ณด๊ธฐ ์๋ฐ๋ก GitHub Actions ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ง๋ค๊ธฐ ํ ํ๋ก์ ํธ๋ฅผ ํ๋ค ๋ณด๋ฉด PR์ด ์ฌ๋ผ์จ ๋ค ๋ฆฌ๋ทฐ๊ฐ ์ง์ฐ๋๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๋ค. ๋ฐ์ ์ผ์ ์์์ PR์ ๊น๋จน๊ธฐ๋ ํ๊ณ , ์ธ์ ๊น์ง ๋ฆฌ๋ทฐํด์ผ ํ๋์ง ๊ธฐ์ค์ด ์์ผ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ํ์ง๋ถ์ง๋๊ธฐ๋ ํ๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํ์์ ์ธ์งํ๊ณ , ์ฝ๋ ๋ฆฌ๋ทฐ์ 2์ผ์ด๋ผ๋ ์ ํ ์๊ฐ์ ๋๊ธฐ๋ก ํ๋ค. ํ์ง๋ง, ๊ฒฐ๊ตญ ์ด๊ฒ๋ ๋จธ๋ฆฌ๋ก ๊ธฐ์ตํด์ผ ํ๋ ๋ฌธ์ ์๋ค. ๊ทธ๋์ PR์ ๋ง๊ฐ์ผ์ ์๊ฐ์ ์ผ๋ก ํ์ํด์ฃผ๋ฉด ์ด๋จ๊น ์๊ฐํ๋ค. D-2, D-1, D-Day ๊ฐ์ ๋ผ๋ฒจ์ด PR์ ๋ถ์ด์์ผ๋ฉด ๋ฆฌ๋ทฐ์ด ์ ์ฅ์์๋ ๊ธฐ์ตํ์ง ์์๋ ์ฝ๊ฒ ํ์ธํ ์ ์๊ณ , ๋จ์ ๊ธฐ๊ฐ์ ๋ํด์ ๊ธด๋ฐํจ์ ๋๋ ์ ์์ ๊ฒ์ด๋ค. ๋์ ํ๊ธฐ ์ ์ ๋จผ์ ์ด๋ฏธ ์๋ ์ก์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฐพ์๋ณด์๋ค. ์ ๋ ฅํ๋ ํ๋ณด๊ฐ ๋ค์ด๋ฒ์์ ๋ง๋ d-day-labeler์๋๋ฐ, ์ด๊ฑด ๋ง๊ฐ์ผ์ ๋ฐ๋ก ์ง์ ํ .. ๋๋ณด๊ธฐ ์ด์ 1 2 3 4 ยทยทยท 12 ๋ค์