← 전체 글로 돌아가기

웹 개발

배포 직전에 앱 성능을 빠르게 점검하는 법

프로덕션 배포 전에 로컬에서 할 수 있는 성능 체크리스트와 일반적인 함정들.

배포하기 직전에 로컬에서 "한 번 정도는" 성능을 확인해야 한다. 프로덕션 환경은 로컬과 다르기 때문에, 로컬에서 괜찮다고 해서 운영 서버에서도 괜찮으라는 보장은 없다.

먼저 프로덕션 빌드를 한다

개발 모드가 아닌 최적화된 빌드로 테스트해야 한다.

npm run build

Next.js면:

npm run build
npm run start

개발 서버(npm run dev)와는 다르게 동작할 수 있다.

번들 크기를 확인한다

npm run build

빌드 로그를 읽으면서 각 페이지의 크기를 본다. 프로덕션 빌드 결과물이 예상보다 크지는 않나?

Next.js에서는 .next/ 디렉토리를 확인한다:

du -sh .next
find .next -type f -name '*.js' | xargs du -sh | sort -h | tail -20

큰 번들이 있다면 코드 분할을 고려한다.

페이지 로딩 시간을 본다

Chrome DevTools의 Network 탭에서 실제 로딩 시간을 측정한다.

또는 명령어로:

curl -w '\nTime: %{time_total}\n' https://localhost:3000

응답 시간이 1초 이상이라면 최적화가 필요하다.

메모리 사용량을 본다

Node.js 프로세스의 메모리 사용량을 확인한다.

node --max-old-space-size=512 server.js

명시적으로 메모리 제한을 두고 실행해본다. 제한을 초과하면 서버가 충돌할 수 있다.

또는 실행 중에 모니터링한다:

watch -n 1 'ps aux | grep node'

VS 컬럼을 보면서 메모리 사용량을 추적한다.

데이터베이스 쿼리를 확인한다

백엔드가 데이터베이스를 사용한다면, 느린 쿼리가 없는지 확인한다.

DEBUG='*' npm run start 2>&1 | grep -i 'duration\|query'

각 쿼리 실행 시간을 본다. 100ms 이상이라면 인덱싱을 고려한다.

의존성 크기를 확인한다

npm ls --depth=0

불필요한 라이브러리가 설치돼있지는 않나? 프로덕션 빌드에만 필요한 것들은 devDependencies에만 있어야 한다.

환경변수가 제대로 설정됐는지 본다

.env.production이나 실제 프로덕션 환경변수가 제대로 로드되는지 테스트한다.

cat .env.production

민감한 정보(API 키 등)가 노출되지는 않나?

CSS/JavaScript 압축을 확인한다

프로덕션 빌드에서 자산이 압축되는지 본다.

Browser DevTools → Network → 응답을 확인하면, Content-Encoding: gzip 헤더가 있어야 한다.

없다면 서버 설정을 확인해야 한다.

외부 API 호출을 테스트한다

외부 서비스에 의존한다면, API가 사용 가능한지 확인한다.

curl -v https://api.external-service.com/health

타임아웃이나 에러가 나지는 않나?

동시 연결을 테스트한다

Apache Bench로 부하 테스트를 해본다.

ab -n 100 -c 10 http://localhost:3000/

이는 100개 요청을 동시 10개씩 보낸다. 에러 없이 완료되나?

에러 로그를 확인한다

실행 중에 에러나 경고가 콘솔에 나타나는가?

npm run start 2>&1 | head -100

첫 100줄에서 명백한 에러가 있으면 수정한다.

결론

배포 직전의 성능 체크는 5분이면 충분하다. 프로덕션 빌드를 실행하고, 번들 크기와 로딩 시간, 메모리 사용량만 확인하면 대부분의 문제를 사전에 발견할 수 있다.