๐ ์ํฉ
Node.js ํ๋ก์ ํธ์์ mongoose๋ฅผ ํตํด์ mongodb atlas์ ์ฐ๊ฒฐ์ ํ๋ ค๊ณ ํ๋๋ฐ, whitelist ์๋ฌ ๋ฐ์.
ํ์ง๋ง ์ด๋ฏธ whitelist์ 0.0.0.0/0์ผ๋ก ๋ชจ๋ IP๋ฅผ ํ์ฉํด๋์ ์ํ.
Could not connect to any servers in your MongoDB Atlas cluster.
One common reason is that you're trying to access the database from an IP that isn't whitelisted.
Make sure your current IP address is on your Atlas cluster's IP whitelist
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์๋ํ ๋ฐฉ๋ฒ๋ค์ ์ฐจ๋ก๋ก ์ ์ด๋ณด์๋ค.
1. ์ฒซ ๋ฒ์งธ ์๋: ๋ด IP์ฃผ์ ์ง์ ์ถ๊ฐ โก๏ธ ์คํจ
MongoDB Atlas ์ ๊ทผ ํ์ฉ IP์ 0.0.0.0/0 (์ ์ฒด ํ์ฉ)์ด ์ด๋ฏธ ๋ค์ด๊ฐ์์์ผ๋ ์ง์ ๋ด IP ์ฃผ์๋ฅผ ๋ฃ์ด์ฃผ์๋ค.
ํ์ง๋ง ์ฌ์ ํ ์ฐ๊ฒฐ์ ์๋๋ค.

2. ๋ ๋ฒ์งธ ์๋: MongoDB ์ฐ๊ฒฐ URI๊ฐ ์๋ชป๋์๋์ง ํ์ธ โก๏ธ ์คํจ
mongodb+srv://๋ก ์์ํ๋ MongoDB ์ฐ๊ฒฐ URI๊ฐ ์ ๋๋ก ๋์ด์๋์ง ํ์ธํ๊ธฐ ์ํด์ ์๋ ๋ฉ๋ด์์ URI ํ์ธ.
- MongoDB Atlas ํํ์ด์ง > DATABASE > Cluters > Connect > Compass
๊ธฐ์กด์ ๊ฐ์ง๊ณ ์๋ URI๊ฐ ์ ๋๋ก ๋ URI์ธ ๊ฒ ํ์ธํ๊ณ , ๋๋ธ ์ฒดํฌ๋ฅผ ์ํด์ MongoDB Compass์์ ํด๋น URI๋ก ์ฐ๊ฒฐ์ ์๋ํด์ ์ ์์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ ๊ฒ์ ํ์ธํ๋ค. ํ์ง๋ง ์ฌ์ ํ Node.js ํ๋ก์ ํธ๋ whitelist ์๋ฌ๋ฅผ ๋์ฐ๋ฉฐ ์ฐ๊ฒฐ์ด ์๋๋ ์ํฉ์ด๋ค.
3. ์ธ ๋ฒ์งธ ์๋: mongoose ๋ฒ์ ์ ๋ฐ์ดํธ โก๏ธ ์ ๋ฐ ์ฑ๊ณต
ํ๋ก์ ํธ์ ์ค์น๋ mongodb์ mongoose ํจํค์ง ๋ฒ์ ์ ์๋์ ๊ฐ๋ค. ๊ตฌ๊ธ๋ง์ ํ๋ค๋ณด๋ mongoose ๋ฒ์ ์ ์์ ํ ๋ฒ์ ์ธ 8.1.1๋ก ๋ฎ์ถ๋ฉด DB ์ฐ๊ฒฐ์ด ๋๋ค๋ ๊ธ์ ๋ฐ๊ฒฌํ๋ค.
"mongodb": "^6.16.0",
"mongoose": "^8.15.1",
์ฐธ๊ณ ํ์ด์ง: https://www.reddit.com/r/mongodb/comments/1g3y76a/getting_ip_error_for_mongodb_atlas_connection/
mongoose ๋ฒ์ ์ 8.1.1๋ก ๋ฎ์ถ๋ Node.js ํ๋ก์ ํธ์์ MongoDB ์ฐ๊ฒฐ ์ฑ๊ณต!
ํ์ง๋ง ๋ฌธ์ ๊ฐ ์์๋ค. mongoose ๋ฒ์ ์ ๋ณ๊ฒฝํ๋ ์ ๊ธฐ ์ ๊ฒฝ์ฐ์ด๋ 1 critical์ด ๋ณด์ธ๋ค. ์๋ ์๋ critical ์์๊ฐ ์๊ฒผ๋ค.

์์ธ ํ์ ์ ์ํด npm audit์ผ๋ก ์์ธ ๋ด์ญ์ ํ์ธํ๋ค.
$ npm audit

๋ก๊ทธ์์ ์ ์ํ๋ ๊นํ๋ธ ๋งํฌ์ ๋ค์ด๊ฐ์ ๋ณด๋ injection vulnerability์ ๋ํ ๋ด์ฉ๋ค์ด ์ ํ์๋ค. ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
- mongoose์ search injection(๊ฒ์ ์ฟผ๋ฆฌ ์กฐ์ ๊ณต๊ฒฉ) ์ทจ์ฝ์
- 8.0.0-rc0 - 8.9.4 ๋ฒ์ ์ ํด๋น(8.1.1 ๋ฒ์ ๋ ์ฌ๊ธฐ์ ์ํจ)
- ์ค์ ์ํ๋๋ ์ฌ์ฉ ๋ฐฉ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
- ์ค์ ์ํ์ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ง์ mongoose ์ฟผ๋ฆฌ์ ์ฌ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ค.
// ์ํํ ์ฝ๋ (์ฌ์ฉ์ ์
๋ ฅ ์ง์ ์ฌ์ฉ)
User.find(req.query); // โ
// ์์ ํ ์ฝ๋ (์
๋ ฅ ๊ฒ์ฆ ํ ์ฌ์ฉ)
const { name, email } = req.query;
User.find({ name, email }); // โ
์ฝ๋ ์์์ ์ฌ์ฉ์์๊ฒ์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๊ณ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํ์ง๋ง ๋์ค์ ์ด๊ฒ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์์ผ๋ critical ์์๋ฅผ ์์ ํ ์ ๊ฑฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ค๋ ๋ค.
4. ๋ค ๋ฒ์งธ ์๋: mongoose ์ฐ๊ฒฐ ์ IPv4 ์ฌ์ฉ โก๏ธ ์ฑ๊ณต
์ฐ์ ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ธ mongoose 8.15.1๋ก ๋ค์ ์๋ณต์ ์์ผฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋ ์์์ mongoose ์ฐ๊ฒฐ ์ IPv4๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ ์ต์ ์ ์ถ๊ฐํด์ฃผ์๋ค.
// IPv4 ๊ฐ์ ์ฌ์ฉ
mongoose.connect(process.env.DB_URI, {
family: 4
});
๋ง์์ฌ DB ์ฐ๊ฒฐ์ด ๋๋ค.
4-1. ์ ์ด๋ฐ ํ์์ด ๋ํ๋ฌ๋๊ฐ?
mongoose 8.15.1์์๋ ์ฐ๊ฒฐํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก IPv6๋ฅผ ์ฐ์ ์๋ํ๋ค. ํ์ง๋ง ์ผ๋ถ ๋คํธ์ํฌ ํ๊ฒฝ์์๋ IPv6 ์ฐ๊ฒฐ์ด ์ ๋๋ก ์๋ํ์ง ์๋๋ค. MongoDB Atlas์ mongodb+srv://๋ก ์์ํ๋ ์ฃผ์๊ฐ IPv6๋ก ํด์๋ ๋ ์ฐ๊ฒฐ์ด ์คํจ๋๋ค.
- 8.1.1: IPv4 ์ฐ์ ๋๋ IPv6 ์ฒ๋ฆฌ๊ฐ ๋ ์๊ฒฉ
- 8.15.1: IPv6 ์ง์์ด ๊ฐํ๋๋ฉด์ IPv6๋ฅผ ๋จผ์ ์๋ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง
IPv6๋ ์ด๋ก ์ ์ผ๋ก๋ ์ง์๋์ง๋ง ๊ฐ์ ์ฉ ์ธํฐ๋ท๊ณผ ๊ธฐ์ ๋คํธ์ํฌ์์ ์ค์ ๊ตฌํ์ด ๋ถ์์ ํ๊ฑฐ๋ ๋ฐฉํ๋ฒฝ์์ ์ฐจ๋จ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ISP์์ IPv6 DNS๋ ์ ๊ณตํ์ง๋ง ์ค์ ๋ผ์ฐํ ์ด ์ ๋๋ก ์๋์ด์ ์ฐ๊ฒฐ ์๋๋ ํ์ง๋ง ํ์์์์ด ๋ฐ์ํ๋ ์ํฉ์ด ๋น๋ฒํ๋ค. ๋ฐ๋ผ์ family: 4 ์ต์ ์ผ๋ก ๊ฒ์ฆ๋ IPv4 ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฐ๊ฒฐ ์์ ์ฑ ์ธก๋ฉด์์ ๋ซ๋ค.
4-2. IPv4๋ก ๊ฐ์ ๋ก ์ฐ๊ฒฐํด๋ ๋ณด์ ์ ๋ฌธ์ ๋ ์๋๊ฐ?
family:4๋ ๋จ์ํ IPv4 ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ฒ ๋ค๊ณ ๋ช ์ํ๋ ๊ฒ์ด๊ณ , IPv6 ๋์ IPv4๋ก ์ฐ๊ฒฐํ๋ ๊ฒ ๋ฟ์ด๋ค. IPv4๋ก ์ฐ๊ฒฐํ๋๋ก ์ค์ ํด๋ ๋ณด์์ ๋ฌธ์ ๋ ์๋ค.
์ด๋ ๊ฒ ํ๋กํ ์ฝ์ ๋ณ๊ฒฝํด๋ MongoDB Atlas ์ฐ๊ฒฐ์ ์ฌ์ ํ TLS/SSL๋ก ์ํธํ ๋์ด์๊ณ , ์ฌ์ฉ์์ ์ฌ์ฉ์๋ช /๋น๋ฐ๋ฒํธ๋ ์ ์ฉ์ด ๋์ด์๊ณ , whitelist ๋ณด์๋ ๊ทธ๋๋ก ์ ์ง๋๊ธฐ ๋๋ฌธ์ด๋ค. ์คํ๋ ค mongoose 8.15.1์ผ๋ก ์ ๋ฐ์ดํธํ๊ฒ ๋ ์ต์ ๋ฒ์ ์ด๋ผ ๋ณด์ ์ทจ์ฝ์ ์ด ๋ ๊ฐ์ ๋์๋ค.
'Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Node.js] Node์์ replaceAll ์ฌ์ฉํ๊ธฐ (0) | 2024.08.22 |
|---|---|
| [Node.js] FCM์ผ๋ก ํธ์ ๋ฉ์์ง ์ ์ก(๋จ์ผ, ์ฌ๋ฌ๊ฐ) (0) | 2024.08.21 |
| [Node.js] PM2๋ก ํ๋ก์ ํธ ๊ตฌ๋ ์ ๊ฐ๋ฐ/์์ฉ ํ๊ฒฝ ๋๋๊ธฐ (0) | 2024.07.18 |
| [Node.js] FCM์ผ๋ก ํธ์์๋ฆผ ๋ณด๋ด๋ API ์์ฑํ๊ธฐ (0) | 2024.07.10 |
| [Cheerio] ํ์ฌ ํ๊ทธ์ ํ ์คํธ๋ง ๊ฐ์ ธ์ค๊ธฐ (0) | 2024.06.19 |
