NodeJS 기초: 세터 활용하기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
프론트엔드 및 백엔드 개발자(중급~고급)
핵심 요약
- 세터는 데이터 무결성 강화를 위한 핵심 메커니즘으로,
Object.defineProperty()
를 통해 구현 가능 price
속성의 setter로 가격 검증 및 세금/할인 재계산 트리거 가능- 성능 향상 전략으로
set
로직 간소화, 메모이제이션,Proxy
활용 권장 - 보안 취약점 방지를 위해 사용자 입력 검증(
zod
등 활용) 및 XSS 방어(DOMPurify
) 필수
섹션별 세부 요약
1. 세터 소개 및 기본 구현
Object.defineProperty()
로get
/set
메서드 정의 가능- 예시:
_price
변수에 대한 검증 로직 (newPrice < 0
시 오류 발생) recalculateTotal()
호출로 부작용 트리거
2. 주요 활용 사례
- 데이터 검증: 입력 타입, 범위, 형식 검증
- 반응형 상태 관리: Vue.js/Svelte에서
count
값 변경 시 자동 재렌더링 - 로깅/감사 추적: 프로퍼티 수정 내역 기록
- 이벤트 토글링: 창 크기 조절 시
debounce
적용
3. 호환성 및 다운그레이드
- IE11 이하 브라우저 지원을 위해
core-js
polyfill 사용 enumerable: true
옵션으로for...in
/Object.keys()
접근 가능
4. 성능 고려 사항
- 직접 접근 대비 약 2배 느림 (Lighthouse 점수 영향)
- 최적화 전략:
set
로직 간소화- 고비용 계산 시 메모이제이션
- 불필요한 세터 사용 피하기
5. 보안 취약점
- 객체 오염 방지:
prototype
체인 오염 방지 - XSS 방어: 사용자 입력 데이터 산화(
DOMPurify
) - 프로토타입 공격: 사용자 제어 데이터 처리 시 주의
6. 테스트 전략
- 유닛 테스트:
Jest
로setValue()
/getValue()
검증 - 통합 테스트: 컴포넌트 상호작용 검증
- 브라우저 자동화:
Playwright
/Cypress
로 실제 환경 검증
7. 주의사항 및 팁
- 무한 루프: 동일 프로퍼티 수정 시 재귀 호출 방지
- 복잡한 로직: 별도 함수로 분리 권장
- 검증 누락:
zod
등 타입 검증 라이브러리 사용
결론
- 세터는 데이터 무결성 강화에 효과적이지만, 성능/보안 고려 필요
Object.defineProperty()
사용 시enumerable
플래그 주의zod
로 입력 검증,DOMPurify
로 XSS 방어 필수- 복잡한 로직은
Proxy
로 대체하는 것을 고려해보세요