๋ฌธ์ ์ํฉ
NextJS๋ก ๋น๋ํ ์ดํ์ ๋ธ๋ผ์ฐ์ ์์ reload๋ฅผ ํ๋ฉด ํ์ด์ง ๊ฒฝ๋ก๋ฅผ ์ ๋๋ก ์ฐพ์ง ๋ชป ํ๊ณ ์ด๊ธฐํ๋ฉด์ผ๋ก ๋ณด๋ด๋ฒ๋ฆฌ๋ ์ค๋ฅ๊ฐ ์๊ฒผ๋ค. ์ต์ข ์๋น์ค๋ฅผ ์๋๊ณ ์ด ๋ฌธ์ ๋ก ๊ฝค๋ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์ฉ๊ณ ์์๋ค.
์์ธ
๋ธ๋ผ์ฐ์ ์์ ์์ฒญํ ์ฃผ์์ ์ค์ ๋ฆฌ์์ค์ ์ฃผ์(URL)์ด ๋ฌ๋ผ์ ์๊ธด ์ผ์ธ๋ฐ, ์ด๊ฒ ๋ก์ปฌ์์๋ ์ ๋์๊ฐ๊ธฐ ๋๋ฌธ์ ์ฒ์์ ์ ๋ง ๋ฌด์จ ์ผ์ธ์ง ์์๊ฐ ์์๋ค. static์ S3์ ์ฌ๋ฆฌ๋ฉด์ ์๊ธฐ๋ ๋ฌธ์ ๋ก nextjs๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ผ์ฐํ ์ ํ๋๋ฐ, ์ด๊ฑธ static์ด ์์ฑ๋๋ค.
์ด๋๋ก ๋ฐฐํฌํ๋ฉด ๊ธฐ๋ณธ url ์์๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ๋ค์ ๋๋ ํ ๋ฆฌ๊ฐ ๋ถ๋ ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
ํด๊ฒฐ
1. next.config์ trailingSlash ์ต์ ๋ฃ์ด์ฃผ๊ธฐ
// next.config.js
module.exports = {
...
trailingSlash: true,
};
next export ๋ฅผ ํ๋ฉด /page/user/index.tsx ํ์ผ์ด /user.html ๋ก ๋น๋ ๋๋ค. ์ด ๋ trailingSlash๋ฅผ true ๋ก ์ค์ ํด์ฃผ๋ฉด /user/index.html๋ก ๋น๋๋๊ฒ ํด์ค๋ค.
2. CloudFront ์ค์
์ฌ๊ธฐ์ ์ ๊น, CloudFront๋?
AWS์์ ์ ๊ณตํ๋ CDN์๋น์ค๋ก ์บ์ฑ์ ํตํด ์ฌ์ฉ์์๊ฒ ์กฐ๊ธ ๋ ๋น ๋ฅธ ์ ์ก ์๋๋ฅผ ์ ๊ณตํจ์ ๋ชฉ์ ์ผ๋ก ํฉ๋๋ค.
ํด๋ผ์ฐ๋ ํ๋ก ํธ๋ ์ ์ธ๊ณ ๊ณณ๊ณณ์ edge server(location)์ ๋๊ณ client์ ๊ฐ์ฅ ๊ฐ๊น์ด edge server๋ฅผ
์ฐพ์ latency๋ฅผ ์ต์ํ์์ผ ๋น ๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๋ฏธ cloudFront๊ฐ ์ค์ ์ด ๋์ด์๊ณ , ๋ฐฐํฌ๋ ์๋ฃ๋ ์ํฉ์ด์ฌ์ cloudFront ํจ์๋ผ๋ ๊ฒ์ ์ค์ ํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ ์ํฉ์ด์๋ค.
๋ฐฐํฌ๋ ๋๋ฉ์ธ ์ค์ ์์ธ๋ก ๋ค์ด๊ฐ๋ฉด '์ค๋ฅํ์ด์ง' ๋ผ๋ ๋ถ๋ถ์ด ์๋๋ฐ, ์๋ก๊ณ ์นจ์์ ๊ฒฝ๋ก๋ฅผ ๋ชป ์ฐพ์์ 403 ์ค๋ฅ๊ฐ ๋ฐ์์ ํ๋ฉด redirection์ index.html๋ก ํด์ฃผ๋ผ๋ ์ค์ ์ ํ ๋ถ๋ถ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ถ๊ฐ๋ก ํจ์๋ฅผ ํ๋ ๋ง๋ค์ด์ ์ฐ๊ฒฐ์์ผ์ฃผ๋ฉด ๋๋ค.
ํจ์๋ฅผ ์์ฑํด์ ์๋์ ๊ฐ์ด ๋ฃ์ด์ฃผ๊ณ , ์ ์ฅํ๊ณ ํด๋น ๋๋ฉ์ธ๊ณผ ์ฐ๊ฒฐํด์ ๊ฒ์ํ๋ฉด ๋๋ค.
unction handler(event) {
var request = event.request;
var uri = request.uri;
// Check whether the URI is missing a file name.
if (uri.endsWith('/')) {
request.uri += 'index.html';
}
// Check whether the URI is missing a file extension.
else if (!uri.includes('.')) {
request.uri += '/index.html';
}
return request;
}
๊ทธ๋ฌ๋ฉด ํ์ด์ง ์๋ก๊ณ ์นจ์์๋ ๊ฒฝ๋ก๋ฅผ ์ ์ฐพ์๊ฐ๋ค!!! ๐๐ป๐๐ป๐๐ป
์ด๊ฑธ ํด๊ฒฐํ๊ณ ์ถ์ด์ ์ผ๋ง๋ ๊ณ ์ํ๋์ง ๋ชจ๋ฅธ๋ค. ์ ๋ฌด๋ฅผ ํ๋ฉด์ aws์ ์ ๊ทผํ ๊ถํ๋ ์์๊ณ ์ ๊ฒฝ๋ ์ ์ฐ๊ณ ์๋ ๋ถ๋ถ์ด์๋๋ฐ ์ด๋ ๊ฒ ํด๊ฒฐ์ ํ๊ฒ ๋๋ค๋!!! ๊ฐ๊ฒฉ!!! ๋ ๊ฐ๊ฒฉ!!!!
์ฐธ๊ณ ์๋ฃ ( ๋์ ์์ธ๋๋ค...)
๐๐ป https://www.juicylog.com/nextjs-ssg-cloudfront-s3-cloudfront-function
๐๐ป https://velog.io/@hoooons/Next.js-S3-CloudFront-git-action-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0
'๊ฐ๋ฐ > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Next.js14์์ useRouter ์ฌ์ฉํ๊ธฐ (1) | 2024.01.03 |
---|---|
NEXT.js14 API Routes ์ฌ์ฉํ๊ธฐ (with. MONGODB) (1) | 2024.01.03 |
npm start, npm run dev ์ ์ฐจ์ด์ (1) | 2023.12.29 |
NextJs ์ TypeScript ํ๊ฒฝ์์ Jest , React-Testing-Library ์ ํ ํ๊ธฐ (์ฝ์ง์ค์ง๊ฒํจ...) (0) | 2022.10.28 |
[NextJS] SSR ๊ณต๋ถํ๊ธฐ (Static Generation vs Server-side Rendering) (0) | 2022.06.07 |