F-Lab
🚀
상위권 IT회사 합격 이력서 무료로 모아보기

Next.js에서 도메인 아키텍처 구성하기: 미들웨어와 커스텀 서버 활용

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

AI가 제공하는 얕고 넓은 지식을 위한 짤막한 글입니다!



서론: Next.js의 도메인 아키텍처 필요성

Next.js는 서버 사이드 렌더링(SSR), 정적 사이트 생성(SSG), API 라우트 등 다양한 기능을 제공하는 리액트 프레임워크입니다. 이러한 기능들을 통해 개발자는 사용자에게 빠르고 효율적인 웹 경험을 제공할 수 있습니다.

특히, 대규모 애플리케이션에서는 여러 도메인을 효율적으로 관리하고 구성하는 것이 중요합니다. 왜냐하면 각 도메인별로 다른 요구사항과 환경 설정이 필요하기 때문입니다.

Next.js에서 도메인 아키텍처를 구성하는 방법에는 크게 두 가지가 있습니다. 첫 번째는 미들웨어를 활용하는 방법이고, 두 번째는 커스텀 서버를 구성하는 방법입니다.

이 글에서는 두 가지 방법의 장단점을 비교하고, 실제 사례를 통해 어떻게 도메인 아키텍처를 구성할 수 있는지 알아보겠습니다.

왜냐하면 이러한 이해는 Next.js를 사용하는 개발자들에게 실질적인 도움을 줄 수 있기 때문입니다.



미들웨어를 활용한 도메인 구성

미들웨어를 활용하는 방법은 Next.js 10 이상 버전에서 지원되는 기능입니다. 미들웨어는 요청이 최종 목적지에 도달하기 전에 중간에서 요청을 가로채어 추가적인 작업을 수행할 수 있게 해줍니다.

이를 통해 개발자는 특정 URL 패턴에 따라 요청을 다른 페이지나 API로 리다이렉트하거나, 특정 조건에 따라 접근을 제한하는 등의 작업을 할 수 있습니다.

예를 들어, B2C와 B2B와 같이 서로 다른 도메인을 운영하는 경우, 미들웨어를 사용하여 각 도메인에 맞는 페이지를 제공할 수 있습니다.

다음은 미들웨어를 활용하여 서브 도메인을 구성하는 예시 코드입니다.

    export function middleware(request) {
        const { nextUrl: { pathname }, hostname } = request;
        if (hostname === 'b2c.example.com') {
            return NextResponse.redirect('/b2c' + pathname);
        } else if (hostname === 'b2b.example.com') {
            return NextResponse.redirect('/b2b' + pathname);
        }
    }

왜냐하면 이 방법을 통해 개발자는 도메인별로 다른 경험을 제공할 수 있기 때문입니다.



커스텀 서버를 활용한 도메인 구성

두 번째 방법은 Next.js 위에 커스텀 서버를 구성하는 것입니다. 이 방법은 Express.js나 Node.js의 HTTP 모듈을 사용하여 Next.js 애플리케이션을 더욱 세밀하게 제어할 수 있게 해줍니다.

커스텀 서버를 사용하면 미들웨어 방식보다 더 복잡한 라우팅 로직을 구현할 수 있습니다. 예를 들어, 사용자 인증, 데이터베이스 쿼리, 동적 라우팅 등의 기능을 구현할 수 있습니다.

다음은 Express.js를 사용하여 커스텀 서버를 구성하는 예시 코드입니다.

    const express = require('express');
    const next = require('next');

    const app = next({ dev: process.env.NODE_ENV !== 'production' });
    const handle = app.getRequestHandler();

    app.prepare().then(() => {
        const server = express();

        server.get('/b2c*', (req, res) => {
            return app.render(req, res, '/b2c', req.query);
        });

        server.get('/b2b*', (req, res) => {
            return app.render(req, res, '/b2b', req.query);
        });

        server.all('*', (req, res) => {
            return handle(req, res);
        });

        server.listen(3000, () => {
            console.log('> Ready on http://localhost:3000');
        });
    });

왜냐하면 이 방법을 통해 개발자는 애플리케이션의 모든 요청을 완벽하게 제어할 수 있기 때문입니다.



도메인 아키텍처 구성 시 고려사항

도메인 아키텍처를 구성할 때는 몇 가지 중요한 고려사항이 있습니다. 첫째, 애플리케이션의 성능과 보안을 유지해야 합니다. 둘째, 유지보수성과 확장성을 고려해야 합니다.

또한, 도메인별로 다른 사용자 경험을 제공하기 위해 필요한 리소스와 설정을 정확하게 관리해야 합니다.

이러한 고려사항을 충족시키기 위해서는 애플리케이션의 요구사항과 목표를 명확하게 이해하고, 적절한 아키텍처 선택과 구현 전략을 수립하는 것이 중요합니다.

왜냐하면 이러한 고려사항을 무시하고 도메인 아키텍처를 구성할 경우, 나중에 성능 저하, 보안 취약점, 유지보수 어려움 등의 문제가 발생할 수 있기 때문입니다.



결론: Next.js에서의 도메인 아키텍처 선택

Next.js에서 도메인 아키텍처를 구성하는 방법은 크게 미들웨어와 커스텀 서버 두 가지가 있습니다. 각 방법은 장단점이 있으며, 애플리케이션의 요구사항과 목표에 따라 적절한 방법을 선택해야 합니다.

미들웨어를 사용하는 방법은 간단하고 빠르게 구현할 수 있지만, 복잡한 라우팅 로직을 구현하기 어려울 수 있습니다. 반면, 커스텀 서버를 사용하는 방법은 더 세밀한 제어가 가능하지만, 구현 난이도가 높습니다.

따라서, 도메인 아키텍처를 구성할 때는 애플리케이션의 성능, 보안, 유지보수성, 확장성 등을 고려하여 최적의 방법을 선택해야 합니다.

왜냐하면 올바른 도메인 아키텍처 선택은 애플리케이션의 성공적인 운영과 성장에 결정적인 역할을 할 수 있기 때문입니다.

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수
logo
copyright © F-Lab & Company 2025