본문으로 건너뛰기

안동민 개발노트

본문 시작

개발 서버 실행 및 기본 설정

개발 서버의 코드 감시와 오류 표시를 확인하고 포트·이미지·엄격 모드·환경 변수의 기본 설정을 조정합니다.

Next.js 프로젝트의 구조를 이해하셨다면, 이제 개발의 핵심적인 부분인 개발 서버(Development Server)를 좀 더 자세히 살펴보고, 기본적인 설정을 통해 개발 환경을 최적화하는 방법을 알아보겠습니다.

개발 서버는 여러분이 작성하는 코드를 실시간으로 브라우저에 반영하여, 빠르게 결과를 확인하며 개발할 수 있도록 돕는 매우 중요한 도구입니다.

먼저 개발 서버가 맡는 역할을 코드 감시, 즉시 반영, 오류 표시, 로컬 주소 제공으로 나눠 봅니다.

개발 서버는 코드 변경을 감시하고 브라우저에 빠르게 반영하며 오류를 화면에 보여준다

프로덕션 서버가 아니라 개발 중 피드백을 빠르게 받기 위한 실행 환경이다. 빠른 확인을 위해 최적화보다 반복 속도에 맞춰져 있다.

기능하는 일좋은 신호주의할 점
파일 감시src/app, styles, 설정 변경을 감지저장 후 터미널 로그가 갱신됨설정 파일은 재시작이 필요할 수 있음
HMR변경된 모듈만 브라우저에 반영페이지 전체 새로고침 없이 화면 변화상태가 꼬이면 새로고침
오류 오버레이문법/런타임 오류를 화면에 표시파일명과 줄 번호가 함께 보임원인은 터미널 로그도 같이 확인
로컬 URLlocalhost 주소로 앱을 제공http://localhost:3000 접속 가능포트 충돌 시 다른 포트로 변경
개발 번들빠른 빌드를 위해 개발 모드로 처리수정 반영이 빠름실제 성능은 production build로 확인

개발 서버 다시 실행하기

개발 서버 재실행은 프로젝트 폴더, 실행 명령, localhost 주소, 종료 방법을 순서대로 확인하는 과정입니다.

개발 서버는 프로젝트 폴더로 이동한 뒤 실행하고, localhost 화면과 수정 반영을 확인한다

서버가 안 켜질 때는 명령보다 먼저 현재 터미널 위치가 프로젝트 내부인지 확인한다.

순서명령/행동확인할 결과문제가 있으면
1cd my-next-apppackage.json이 있는 폴더로 이동현재 경로와 프로젝트명 확인
2npm run dev개발 서버 시작 로그 출력scripts, 의존성 설치 여부 확인
3localhost 주소 열기초기 페이지 표시포트 충돌, 방화벽, 서버 로그 확인
4page.tsx 수정 후 저장브라우저 화면 자동 반영저장 여부, HMR 로그, 새로고침 확인
5Ctrl+C로 종료터미널 프롬프트 복귀실행 중인 Node 프로세스 확인

이전 절에서 이미 개발 서버를 한 번 실행해 보셨겠지만, 다시 한번 그 과정을 상기하고 몇 가지 유의할 점을 짚어보겠습니다.

프로젝트 디렉터리(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=3001 && npm run dev

# Windows (PowerShell)
$env:PORT=3001; npm run dev

# macOS/Linux
PORT=3001 npm run dev

위 명령어를 실행하면 http://localhost:3001으로 개발 서버가 시작되는 것을 확인할 수 있습니다.


next.config.ts 파일 살펴보기 및 기본 설정

next.config.ts 파일은 Next.js 애플리케이션의 전반적인 동작 방식을 설정하는 중요한 파일입니다.

프로젝트의 루트 디렉터리에 위치하며, create-next-app으로 프로젝트를 생성했다면 기본적으로 다음과 같은 내용으로 생성되어 있을 것입니다.

next.config.ts
import type { NextConfig } from 'next';

const nextConfig: NextConfig = {};

export default nextConfig;

이 파일은 타입 검사를 받는 설정 객체를 기본 export합니다.

nextConfig 객체 안에 다양한 설정 옵션을 추가하여 Next.js의 동작을 커스터마이징할 수 있습니다.

몇 가지 유용한 기본 설정 옵션을 살펴보겠습니다.

images 설정: 이미지 최적화

Next.js는 이미지 최적화를 위한 <Image> 컴포넌트를 제공합니다.

로컬 이미지는 별도 설정 없이 사용할 수 있고, 외부 이미지는 next.config.tsremotePatterns로 허용 범위를 명시합니다.

외부 도메인에서 이미지를 로드할 때 필요합니다.

next.config.ts
import type { NextConfig } from 'next';

const nextConfig: NextConfig = {
  images: {
    remotePatterns: [
      {
        protocol: 'https',
        hostname: 'assets.example.com',
        pathname: '/my-bucket/**',
      },
    ],
  },
};

export default nextConfig;

reactStrictMode 설정: React 엄격 모드

next.config.ts
import type { NextConfig } from 'next';

const nextConfig: NextConfig = {
  reactStrictMode: true, // true 또는 false
};

export default nextConfig;

App Router는 기본적으로 Strict Mode를 사용하므로 보통 이 옵션을 직접 적을 필요가 없습니다.

개발 중 일부 로직이 두 번 실행되는 것처럼 보인다면 Strict Mode를 끄기보다, effect 정리 함수와 부수 효과가 안전하게 반복되는지 먼저 확인합니다.

.env.local: 환경 변수 관리

애플리케이션에서 민감한 정보(API 키 등)나 환경별로 달라지는 값(백엔드 API 주소)을 관리할 때 환경 변수를 사용합니다.

프로젝트 루트의 .env.local에 서버 전용 값과 브라우저 공개 값을 구분해 작성합니다.

.env.local
# 서버 컴포넌트와 Route Handler에서만 읽습니다.
DATABASE_URL=postgresql://user:password@localhost:5432/app

# 브라우저 번들에 공개해도 되는 값에만 접두사를 붙입니다.
NEXT_PUBLIC_API_ORIGIN=https://api.example.com

NEXT_PUBLIC_ 접두사가 없는 값은 서버에서만 읽고, 접두사가 있는 값은 빌드할 때 클라이언트 번들에 포함됩니다.

민감한 정보는 절대로 NEXT_PUBLIC_ 접두사를 붙이면 안 됩니다.

또한 next.config.tsenv 옵션에 넣은 값은 이름과 관계없이 번들에 인라인될 수 있으므로 비밀값 저장소로 사용하지 않습니다.

환경 변수 관리에 대해서는 추후 더 자세히 다룰 예정입니다.


개발 환경을 정리할 때는 실행 명령, 포트, 설정 파일, 환경 변수를 한 번에 점검하면 실수를 줄일 수 있습니다.

개발 환경은 실행 명령, 포트, next.config.ts, 환경 변수를 한 번에 점검한다

설정은 서로 연결되어 있다. 서버가 켜지는지뿐 아니라 어떤 값이 브라우저와 서버 코드에 노출되는지도 함께 확인한다.

점검 항목보는 위치확인할 것주의
실행 명령package.json scriptsdev가 next dev로 연결되는지다른 패키지 매니저와 섞지 않기
포트터미널 환경 변수3000 또는 지정 포트가 비어 있는지Windows 셸마다 문법이 다름
Next 설정next.config.tsimages.remotePatterns, strict mode, experimental 옵션변경 후 서버 재시작 필요 가능
환경 변수.env.local무접두사는 서버 전용, NEXT_PUBLIC_만 공개비밀값을 next.config.ts env나 NEXT_PUBLIC_에 넣지 않기
브라우저 확인localhost화면, 오류 오버레이, console터미널 로그와 함께 봄

아래 다이어그램은 개발 서버를 실행할 때 함께 점검할 명령, 포트, 설정 파일의 관계를 정리한 것입니다.

npm run dev는 package.json의 script를 실행하고, 포트와 설정 파일이 개발 서버 동작을 바꾼다

서버 실행 문제는 명령, 포트, 설정, 환경 변수 중 어느 층에서 달라졌는지 나눠 보면 빠르게 좁혀진다.

대표 입력영향확인 방법
실행 명령npm run devpackage.json의 dev script 실행scripts.dev 값 확인
포트PORT=3001 또는 --portlocalhost 접속 주소 변경터미널에 출력된 URL 확인
Next 설정next.config.tsremotePatterns, 실험 옵션, 빌드 동작 변경설정 변경 후 서버 재시작
환경 변수.env.local무접두사는 서버 전용, NEXT_PUBLIC_은 브라우저 공개next.config.ts env 대신 .env.local 사용
브라우저http://localhost:3000현재 실행 중인 앱 확인주소와 포트가 로그와 일치하는지 확인

개발 서버 시작 전 최종 확인

모든 설정이 완료되었다면 프로젝트 디렉터리에서 npm run dev를 다시 실행합니다.

실행 전에는 현재 폴더, 포트 충돌, 설정 파일 변경 여부를 함께 확인합니다.


다음 다이어그램은 Windows에서 Next.js 프로젝트를 실행할 때 셸, 경로, 패키지 관리자, 환경 변수를 확인하는 순서입니다.

Windows에서는 셸 종류, 프로젝트 경로, 패키지 관리자, 포트 문법을 먼저 확인한다

같은 포트 변경이라도 명령 프롬프트와 PowerShell 문법이 다르다. 오류가 나면 셸부터 확인한다.

확인 순서볼 것예시실패 신호
1현재 셸PowerShell, 명령 프롬프트, Git Bash환경 변수 문법 오류
2프로젝트 경로package.json이 있는 폴더missing script: dev
3패키지 관리자npm run dev 또는 yarn devlockfile이 여러 개 생김
4포트 변경$env:PORT=3001; npm run dev여전히 3000번으로 실행
5종료와 재실행Ctrl+C 후 다시 실행포트가 이미 사용 중이라고 나옴

설정 파일을 바꿀 때는 개발 서버 재시작 필요 여부와 브라우저 확인 위치를 함께 보아야 합니다.

소스 수정은 HMR로 반영되지만 설정 파일과 환경 변수 변경은 서버 재시작을 먼저 의심한다

바뀐 값이 화면에 안 보일 때는 코드 문제가 아니라 개발 서버가 이전 설정으로 떠 있는 경우가 많다.

변경한 것보통 반영 방식확인 위치안 보이면
page.tsx, componentHMR브라우저 화면저장 여부, import 경로 확인
globals.cssHMR 또는 새로고침전체 스타일선택자 우선순위 확인
next.config.ts서버 재시작터미널 시작 로그Ctrl+C 후 npm run dev
.env.local서버 재시작무접두사 서버 값과 NEXT_PUBLIC_ 공개 값접두사와 재시작 여부 확인
package.json dependenciesinstall 후 재실행터미널 import 오류node_modules와 lockfile 확인

마지막으로 개발 서버 실행과 next.config.ts 기본 설정을 실제 점검 순서로 정리합니다.

개발 서버 점검은 실행 전, 실행 중, 설정 변경 후, 종료까지 같은 순서로 반복한다

문제가 생길 때마다 이 순서로 돌아오면 경로, 포트, 설정, 브라우저 상태를 빠뜨리지 않는다.

상황확인할 것좋은 상태다음 행동
실행 전프로젝트 폴더와 package.jsondev script가 있음npm run dev 실행
실행 직후터미널 URL과 포트localhost 주소 출력브라우저에서 같은 주소 열기
개발 중수정 저장과 HMR화면이 자동 반영됨오류 오버레이와 로그 확인
설정 변경 후next.config.ts, .env.local무접두사와 NEXT_PUBLIC_ 경계를 지켜 재시작 후 반영서버 재실행 후 다시 확인
종료Ctrl+C와 포트 해제터미널 프롬프트 복귀필요할 때 같은 순서로 재실행