prefetchDNS๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๋Š” ์„œ๋ฒ„์˜ IP๋ฅผ ๋ฏธ๋ฆฌ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

prefetchDNS("https://example.com");

๋ ˆํผ๋Ÿฐ์Šค

prefetchDNS(href)

ํ˜ธ์ŠคํŠธ์— ๋ฏธ๋ฆฌ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด, react-dom์—์„œ prefetchDNS๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

import { prefetchDNS } from 'react-dom';

function AppRoot() {
prefetchDNS("https://example.com");
// ...
}

์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

prefetchDNS๋Š” ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ฃผ์–ด์ง„ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•œ๋‹ค๋Š” ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋กœ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ์†๋„๊ฐ€ ๋นจ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜

  • href: ๋ฌธ์ž์—ด. ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ์„œ๋ฒ„์˜ URL์ž…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

prefetchDNS๋Š” ์•„๋ฌด ๊ฐ’๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฃผ์˜ ์‚ฌํ•ญ

  • ๋™์ผํ•œ ์„œ๋ฒ„์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๋ฒˆ์˜ prefetchDNS ํ˜ธ์ถœ์€ ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ๊ณผ ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” prefetchDNS๋ฅผ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋งํ•  ๋•Œ, Effect ๋‚ด๋ถ€, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋˜๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ, prefetchDNS๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋™์•ˆ ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง์—์„œ ์‹œ์ž‘๋œ ๋น„๋™๊ธฐ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์˜ ํ˜ธ์ถœ์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ํ•„์š”ํ•œ ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, ๋ฆฌ์†Œ์Šค๋ฅผ ์ฆ‰์‹œ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›นํŽ˜์ด์ง€ ์ž์ฒด๊ฐ€ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๋™์ผํ•œ ์„œ๋ฒ„๋ฅผ ๋ฏธ๋ฆฌ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์€ ์ด์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ํžŒํŠธ๊ฐ€ ์ฃผ์–ด์ง„ ์‹œ์ ์—๋Š” ์ด๋ฏธ ์กฐํšŒ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • preconnect์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ, prefetchDNS ๋Š” ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ์‚ฌ์ „ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ, ์‚ฌ์ „ ์—ฐ๊ฒฐ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ด์ ์„ ์ƒ์‡„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•

๋ Œ๋”๋ง ์‹œ DNS ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜ค๊ธฐ

ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ์ž์‹๋“ค์ด ํ•ด๋‹น ํ˜ธ์ŠคํŠธ์—์„œ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ๋”ฉํ•  ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ prefetchDNS๋ฅผ ํ˜ธ์ถœํ•˜์„ธ์š”.

import { prefetchDNS } from 'react-dom';

function AppRoot() {
prefetchDNS("https://example.com");
return ...;
}

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ DNS ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜ค๊ธฐ

์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•œ ํŽ˜์ด์ง€๋‚˜ State๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์ „์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ prefetchDNS๋ฅผ ํ˜ธ์ถœํ•˜์„ธ์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋‚˜ State๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ผ์ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { prefetchDNS } from 'react-dom';

function CallToAction() {
const onClick = () => {
prefetchDNS('http://example.com');
startWizard();
}
return (
<button onClick={onClick}>Start Wizard</button>
);
}