최근 외부 파트너사에서 “React Server Components(RSC) 취약점(CVE-2025-55182)” 관련 보안 점검 요청을 받았다.
문제는… 내가 개발했던 프로젝트가 Next.js App Router 기반이라는 점.
즉 구조적으로 취약 버전의 영향을 받을 가능성이 있어 보였다.
그래도 운영 중인 서비스라 보안 패치는 바로 대응해야 했다.
이번 글에서는 React 19 / Next.js 15 환경에서 보안 패치를 적용하며 겪은 과정들을 기록해본다.
1. 상황 파악 — 어떤 취약점인가?
React 19 계열의 RSC 관련 패키지에서 원격 코드 실행(RCE) 취약점이 발견되었다는 내용이었다.
취약 버전은 아래와 같고, 보안 패치는 해당 라인별로 발표된 상태.
🔸 취약 버전
- react-server-dom-webpack: 19.0 / 19.1.0 / 19.1.1 / 19.2.0
- Next.js 역시 App Router + RSC 기반이라 영향 가능성이 존재
🔸 안전 버전
- React 패치: 19.1.2
- Next.js 패치: 15.2.6
문제는 우리 프로젝트가 딱 아래 버전을 쓰고 있었다.
Next.js 15.2.4
React 19.1.0
그리고 App Router 기반이기 때문에 내부적으로 RSC 기능을 기본 사용한다. ("use server"를 사용하지 않아도 구조적으로 연결됨)
즉, 패치가 필요한 상태.
2. 프로젝트 환경 확인
package.json을 보면 다음과 같이 되어 있었다.
"dependencies": {
"next": "^15.2.4",
"react": "^19.1.0",
"react-dom": "^19.1.0",
...
}
직접 use server를 사용하지는 않지만,
Next.js App Router는 기본적으로 RSC 기반이기 때문에 패치가 필요하다는 결론이다.
3. 대응 전략 수집
요약하면 3단계로 정리할 수 있었다.
- React/Next.js 버전을 보안 패치 버전으로 올린다.
- 전체 의존성 재설치 및 빌드 테스트
- 프로덕션 모드 테스트 → Vercel 자동 배포
이 과정에서 주의해야 할 게 하나 있었는데,
npm audit fix --force를 누르면 메이저 버전까지 강제로 올려버려서
App Router + React 19 환경이 깨질 수 있다.
그래서 절대 강제 업데이트는 하지 않는 방향으로 대응했다.
4. React / Next.js 보안 패치 적용
작업 브랜치를 하나 새로 만들어서 적용했다.
git checkout -b chore/security-react-rsc-patch
그리고 패치 버전으로 업데이트:
npm install next@15.2.6 react@19.1.2 react-dom@19.1.2 --save
eslint-config-next도 버전에 맞춰 업데이트:
npm install eslint-config-next@15.2.6 --save-dev
📌 package.json 수정 후 자연스러운 현상
package-lock.json도 자동으로 변한다.
npm install을 하면 의존성 트리가 재정리되기 때문에 package.json + package-lock.json 둘 다 커밋하는 게 맞다.
5. 빌드 테스트
업데이트 후 바로 빌드를 돌렸다.
npm run build
에러 없이 빌드 성공!
이 단계에서 에러가 나면 대체로 아래 문제들이다:
- react-dom mismatched version
- ESLint 호환성 문제
- Server Components 경로 mismatching
- 특정 UI 라이브러리의 React 19 대응 문제
다행히 우리 프로젝트에서는 깨지는 부분 없이 통과했다.
6. 프로덕션 모드 테스트
빌드 성공 후, 실제 프로덕션 모드 실행:
npm start
이제 http://localhost:3000 에 접속해서 다음 페이지들을 확인했다.
- 메인 페이지
- 스크롤 애니메이션 정상
- Swiper 슬라이더 정상
- 관리자 페이지 진입 정상
- 콘솔 에러 없음
서버 액션을 사용하지 않는 구조라 더 단순했고, 덕분에 특별한 문제 없이 정상적으로 동작했다.
7. 배포 — main merge → Vercel 자동 배포
이제 작업 브랜치를 main에 PR → merge만 하면 끝.
Vercel은 main 브랜치 변경을 감지하면 자동으로 CI/CD가 실행되어 배포된다.
별도 서버 재부팅이나 작업은 필요 없다.
배포 후 실제 사이트를 확인해봤고, 화면 전환·이미지·라우팅 모두 정상.
8. 조치 완료 후 회신
파트너사에는 아래 내용을 전달했다.
- React / Next.js 보안 패치 완료
- RSC 취약점 영향 여부 검토
- use server 미사용 확인
- 프로덕션 테스트 문제 없음
요청받았던 1) 버전 확인, 2) Server Actions 확인, 3) 보안 패치 적용
→ 모두 완벽히 대응 완료.
9. 회고
운영 중인 프레임워크를 업데이트하는 건 항상 부담된다.
특히 React 19 / Next.js 15은 아직 변화가 많은 시기라 조심스러웠다.
그럼에도 이번 경험을 통해:
- 버전 명확히 고정해서 패치하는 습관
- main 브랜치 자동 배포 구조의 중요성
- App Router + RSC 구조에 대한 이해
- 보안 공지를 항상 체크해야 한다는 점
을 다시 한 번 느꼈다.