AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

NodeJS Fundamentals: __proto__

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

JavaScript/Node.js 개발자, React/Vue 프론트엔드 개발자, 기존 코드베이스 유지보수자

난이도: 중간 (ES6 이상 기초 지식 필요)

핵심 요약

  • __proto__비표준이며, 보안 취약점성능 저하를 유발할 수 있음
  • Object.setPrototypeOf()Object.getPrototypeOf()대체하여 사용해야 함
  • 프로토타입 오염(Prototype Pollution)은 모든 객체에 악성 코드 삽입 가능, 절대 사용 금지
  • 성능 최적화를 위해 프로토타입 수정 최소화, 직접 속성 접근이 더 효율적임

섹션별 세부 요약

1. __proto__ 개요

  • __proto__는 객체의 프로토타입을 직접 참조하는 비표준 속성
  • Object.getPrototypeOf()/Object.setPrototypeOf()표준 방법
  • Object.create(null)을 제외한 모든 객체는 Object.prototype을 상속

2. 런타임 행동 및 호환성

  • 브라우저: 대부분 지원 (IE 오래된 버전 제외)
  • Node.js: 완전 지원
  • 엄격 모드: __proto__ 사용 시 오류 발생 가능
  • Object.setPrototypeOf()ES6 도입, 더 안정적

3. 주요 사용 사례

  • 동적 기능 플래그: 런타임 조건에 따라 프로토타입에 메서드 추가
  • 구식 환경에서의 메서드 추가: Array 등에 메서드 삽입 (일반적으로 비추천)
  • React/Vue 컴포넌트 확장: 공유 유틸리티 함수 삽입 (보일러플레이트 줄임)
  • 테스트 시 의존성 모킹: 단위 테스트 중 프로토타입 임시 교체

4. 성능 분석

  • 프로토타입 조회직접 속성 접근보다 2~3배 느림 (Benchmark 결과: 200-300ms vs 50-100ms)
  • Lighthouse 점수에 부정적 영향 (성능 카테고리 감소)

5. 보안 리스크

  • 프로토타입 오염: Object.prototype 수정 시 모든 객체에 악성 코드 삽입 가능
  • MITIGATION 전략:
  • Object.freeze()중요 객체 보호
  • 사용자 입력 검증 (DOMPurify, zod 사용)
  • 내장 프로토타입 수정 금지

6. 테스트 전략

  • Jest/Vitest: 프로토타입 수정 후 정리 (test 종료 시 delete로 메서드 제거)
  • Playwright/Cypress: 브라우저 환경에서 프로토타입 의존 컴포넌트 테스트
  • 엣지 케이스: 동적 프로토타입 수정, 중첩 프로토타입, 속성 덮어쓰기

결론

  • __proto__사용 시 엄격한 검증이 필요하며, Object.setPrototypeOf()를 대체해야 함
  • 프로토타입 수정 최소화구성 중심 설계가 권장됨
  • 보안 위험 방지를 위해 내장 프로토타입 수정은 절대 금지하고, 입력 검증객체 동결을 적용해야 함