개발 서버 실행 및 기본 설정
Next.js 프로젝트의 구조를 이해하셨다면, 이제 개발의 핵심적인 부분인 개발 서버(Development Server) 를 좀 더 자세히 살펴보고, 기본적인 설정을 통해 개발 환경을 최적화하는 방법을 알아보겠습니다. 개발 서버는 여러분이 작성하는 코드를 실시간으로 브라우저에 반영하여, 빠르게 결과를 확인하며 개발할 수 있도록 돕는 매우 중요한 도구입니다.
개발 서버 다시 실행하기
이전 절에서 이미 개발 서버를 한 번 실행해 보셨겠지만, 다시 한번 그 과정을 상기하고 몇 가지 유의할 점을 짚어보겠습니다.
프로젝트 디렉터리(my-next-app
또는 여러분이 지정한 프로젝트 이름)로 이동한 후, 다음 명령어를 터미널에 입력합니다.
cd my-next-app
npm run dev
또는 yarn
을 사용한다면:
cd my-next-app
yarn dev
명령어가 성공적으로 실행되면, 다음과 유사한 메시지가 나타날 것입니다.
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
이 메시지는 Next.js 개발 서버가 http://localhost:3000
주소에서 실행 중임을 의미합니다. 웹 브라우저를 열고 해당 주소로 접속하면, Next.js의 기본 환영 페이지를 볼 수 있습니다.
개발 서버의 특징
- 자동 새로 고침 (Hot Module Replacement, HMR): 개발 서버가 실행 중인 상태에서 코드를 수정하고 저장하면, 브라우저가 자동으로 새로 고침 되거나 변경된 모듈만 교체되어 화면에 즉시 반영됩니다. 이는 개발 효율성을 크게 높여주는 기능입니다.
- 에러 오버레이: 개발 중에 문법 오류나 런타임 오류가 발생하면, 브라우저 화면에 에러 메시지 오버레이가 나타나 문제를 쉽게 파악하고 해결할 수 있도록 돕습니다.
- 성능 최적화 미적용: 개발 서버는 빠른 피드백을 위해 성능 최적화가 최소화되어 있습니다. 따라서 실제 프로덕션 환경에서의 성능과는 차이가 있을 수 있습니다.
개발 서버를 종료하고 싶을 때는 터미널에서 Ctrl + C
(Windows/Linux) 또는 Cmd + C
(macOS)를 누르면 됩니다.
기본 포트 변경하기
간혹 3000
번 포트가 다른 애플리케이션에 의해 사용 중이거나, 다른 포트에서 개발하고 싶은 경우가 있을 수 있습니다. 이럴 때는 npm run dev
명령어를 실행할 때 PORT
환경 변수를 지정하여 포트를 변경할 수 있습니다.
# Windows (명령 프롬프트)
set PORT=4000 && npm run dev
# Windows (PowerShell)
$env:PORT=4000; npm run dev
# macOS/Linux
PORT=4000 npm run dev
위 명령어를 실행하면 http://localhost:4000
으로 개발 서버가 시작되는 것을 확인할 수 있습니다.
next.config.js
파일 살펴보기 및 기본 설정
next.config.js
파일은 Next.js 애플리케이션의 전반적인 동작 방식을 설정하는 중요한 파일입니다. 프로젝트의 루트 디렉터리에 위치하며, create-next-app
으로 프로젝트를 생성했다면 기본적으로 다음과 같은 내용으로 생성되어 있을 것입니다.
/** @type {import('next').NextConfig} */
const nextConfig = {};
module.exports = nextConfig;
이 파일은 Node.js의 모듈 시스템을 사용하여 Next.js 설정을 내보냅니다. nextConfig
객체 안에 다양한 설정 옵션을 추가하여 Next.js의 동작을 커스터마이징할 수 있습니다.
몇 가지 유용한 기본 설정 옵션을 살펴보겠습니다.
images
설정: 이미지 최적화
Next.js는 이미지 최적화를 위한 강력한 <Image>
컴포넌트를 제공합니다. 이 컴포넌트를 사용하기 위해서는 next.config.js
에 이미지 도메인을 명시해 주는 것이 좋습니다. 외부 도메인에서 이미지를 로드할 때 필요합니다.
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
// 이미지를 로드할 외부 도메인들을 여기에 추가합니다.
// 예시: 'res.cloudinary.com', 'example.com'
domains: [],
// 또는 remotePatterns를 사용하여 더 유연한 패턴 매칭 가능
// remotePatterns: [
// {
// protocol: 'https',
// hostname: 'assets.example.com',
// port: '',
// pathname: '/my-bucket/**',
// },
// ],
},
};
module.exports = nextConfig;
reactStrictMode
설정: 엄격 모드
React는 개발 중에 잠재적인 문제를 감지하고 경고를 표시하는 StrictMode
를 제공합니다. 기본적으로 활성화되어 있으며, 개발 중에만 적용됩니다.
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true, // true 또는 false
};
module.exports = nextConfig;
true
로 설정하면 React 컴포넌트의 특정 생명주기 메서드가 두 번 호출되거나, 구식 API 사용 시 경고를 표시하여 잠재적인 버그를 조기에 발견하는 데 도움을 줍니다. 개발 중에는 true
를 유지하는 것이 좋지만, 특정 라이브러리와의 호환성 문제 등으로 인해 false
로 설정해야 하는 경우도 있습니다.
env
설정: 환경 변수 관리
애플리케이션에서 민감한 정보(API 키 등)나 환경별로 달라지는 값(백엔드 API 주소)을 관리할 때 환경 변수를 사용합니다. next.config.js
에서 env
속성을 사용하여 환경 변수를 정의할 수 있습니다.
/** @type {import('next').NextConfig} */
const nextConfig = {
env: {
// 클라이언트 사이드 코드에서도 접근 가능한 환경 변수
// 'NEXT_PUBLIC_' 접두사가 붙은 환경 변수는 자동으로 클라이언트에서 사용 가능
CUSTOM_ENV_VARIABLE: 'My Custom Value',
API_URL: process.env.NODE_ENV === 'production' ? 'https://api.myapp.com' : 'http://localhost:5000',
},
};
module.exports = nextConfig;
주의: process.env.NEXT_PUBLIC_
으로 시작하는 환경 변수만 클라이언트 사이드 코드("use client"
가 붙은 컴포넌트 등)에서 접근할 수 있습니다. 민감한 정보는 절대로 NEXT_PUBLIC_
접두사를 붙여서는 안 됩니다. 서버 사이드에서만 사용해야 하는 환경 변수는 접두사 없이 .env
파일에만 정의하고, 클라이언트 번들에 포함되지 않도록 주의해야 합니다.
환경 변수 관리에 대해서는 추후 더 자세히 다룰 예정입니다.
개발 서버 시작 전 최종 확인
모든 설정이 완료되었다면, 터미널에서 프로젝트 디렉터리로 이동하여 npm run dev
명령어를 다시 실행해 보세요. 이제 여러분은 Next.js 개발 서버를 완벽하게 제어할 수 있게 되었습니다.