React 시니어 보안 기술면접

React 시니어 (7년+) 보안 3문항 조회수 73 · 2026-09-07 (월) 22:11:00
1 토큰 보안 및 저장소 설계
Hard

Q. React SPA에서 JWT 액세스 토큰과 리프레시 토큰을 저장할 때, localStorage, sessionStorage, 메모리, httpOnly 쿠키 각각의 보안적 장단점을 비교하고, XSS와 CSRF 공격 시나리오를 고려한 최적의 토큰 저장 전략을 설계해주세요. 특히 토큰 탈취 시 피해를 최소화하기 위한 추가적인 보안 레이어(Fingerprinting, Rotation 정책 등)도 함께 설명해주세요.

각 저장소의 JavaScript 접근 가능 여부와 네트워크 자동 전송 여부를 기준으로 생각해보세요.

A. 모범답안

액세스 토큰은 메모리(React state/context)에 저장하고, 리프레시 토큰은 httpOnly, Secure, SameSite=Strict 속성의 쿠키에 저장하는 것이 가장 안전합니다. localStorage는 XSS 공격 시 JavaScript로 직접 접근 가능해 위험하며, httpOnly 쿠키는 JavaScript 접근이 불가능해 XSS 방어에 유리하지만 CSRF 위험이 있어 SameSite 속성과 CSRF 토큰으로 보완해야 합니다. 메모리 저장은 새로고침 시 토큰이 사라지므로, 초기 로드 시 리프레시 토큰으로 액세스 토큰을 재발급받는 silent refresh 메커니즘을 구현해야 합니다. 추가 보안 레이어로 디바이스 fingerprinting(User-Agent, IP 등)을 토큰에 바인딩하고, 리프레시 토큰은 일회용(Rotation)으로 설계하여 탈취 시 재사용을 방지하며, 짧은 액세스 토큰 만료 시간(5-15분)과 anomaly detection을 통해 비정상 접근을 탐지해야 합니다.

핵심 포인트
  • • 액세스 토큰은 메모리, 리프레시 토큰은 httpOnly 쿠키 저장
  • • localStorage는 XSS 취약, httpOnly 쿠키는 JavaScript 접근 불가
  • • SameSite 속성과 CSRF 토큰으로 CSRF 방어
  • • Silent refresh 메커니즘으로 UX 개선
  • • 토큰 Rotation과 fingerprinting으로 탈취 피해 최소화
답변에 넣으면 좋은 키워드
httpOnly SameSite XSS CSRF Silent Refresh Token Rotation Fingerprinting
실무에서는

금융권이나 의료 시스템처럼 높은 보안 수준이 요구되는 서비스에서 토큰 탈취 방지를 위한 다층 방어 전략을 설계할 때 사용됩니다.

Follow-up 질문

BFF(Backend For Frontend) 패턴을 도입하여 토큰 관리를 서버 측으로 이동시킬 때의 아키텍처 설계와 장단점을 설명해주세요.

2 Content Security Policy 설계
Hard

Q. React 애플리케이션에서 Content Security Policy(CSP)를 strict 모드로 구성할 때, inline script와 inline style 사용을 제한하면서도 React의 동적 스타일링(CSS-in-JS, styled-components)과 third-party 스크립트(Google Analytics, 결제 모듈 등)를 안전하게 통합하는 전략을 설계해주세요. nonce 기반 접근과 hash 기반 접근의 차이, 그리고 CSP 위반 리포팅 시스템 구축 방법도 포함해주세요.

CSP의 nonce와 hash 메커니즘이 서버 렌더링과 어떻게 연동되는지 생각해보세요.

A. 모범답안

Strict CSP 구성을 위해 'unsafe-inline'을 제거하고 nonce 또는 hash 기반 접근을 사용해야 합니다. SSR 환경에서는 각 요청마다 랜덤 nonce를 생성하여 script와 style 태그에 추가하고 CSP 헤더에 포함시키는 nonce 방식이 유연하며, 정적 빌드에서는 빌드 타임에 script 내용의 SHA-256 해시를 계산하여 CSP에 명시하는 hash 방식을 사용합니다. CSS-in-JS 라이브러리는 nonce를 prop으로 전달받아 동적 생성되는 style 태그에 적용하도록 설정하고(styled-components의 StyleSheetManager), third-party 스크립트는 신뢰할 수 있는 도메인만 script-src에 명시하거나 Subresource Integrity(SRI)를 함께 사용합니다. CSP 위반 시 report-uri 또는 report-to 디렉티브로 위반 정보를 수집 엔드포인트로 전송하여 Sentry나 자체 로깅 시스템으로 모니터링하며, 초기에는 Content-Security-Policy-Report-Only 헤더로 영향도를 파악한 후 단계적으로 엄격화합니다.

핵심 포인트
  • • nonce 기반(SSR)과 hash 기반(정적 빌드) 접근법 선택
  • • CSS-in-JS 라이브러리에 nonce 전달 설정
  • • Third-party 스크립트는 도메인 화이트리스트와 SRI 적용
  • • report-uri로 CSP 위반 모니터링 시스템 구축
  • • Report-Only 모드로 단계적 적용
답변에 넣으면 좋은 키워드
CSP nonce hash SRI report-uri unsafe-inline styled-components
실무에서는

대규모 서비스에서 XSS 공격 표면을 근본적으로 줄이고, 컴플라이언스 요구사항(PCI-DSS 등)을 충족하기 위해 CSP를 단계적으로 강화할 때 사용됩니다.

Follow-up 질문

CSP 적용 후 Google Tag Manager나 A/B 테스팅 도구처럼 동적으로 스크립트를 주입하는 서비스들과의 호환성 문제를 어떻게 해결하시겠습니까?

3 개인정보 보호 아키텍처
Hard

Q. GDPR과 개인정보보호법을 준수하는 React 애플리케이션을 설계할 때, 프론트엔드에서 처리해야 하는 개인정보 최소화, 동의 관리, 데이터 삭제 요청 처리, 그리고 민감정보의 클라이언트 측 암호화 전략을 제시해주세요. 특히 사용자 동의 없이 수집되는 기술적 로그(에러 로그, 성능 메트릭)에서 개인식별정보를 제거하는 자동화 방안과, 개발 환경에서 실제 개인정보 노출을 방지하는 개발 프로세스도 포함해주세요.

개인정보의 수집 시점, 저장 위치, 전송 과정, 그리고 삭제 시점을 각각 분리해서 생각해보세요.

A. 모범답안

프론트엔드에서는 쿠키 배너를 통해 granular consent(필수/선택 분리)를 수집하고, 동의 상태를 localStorage와 서버에 동기화하여 관리하며, 동의 철회 시 관련 쿠키와 로컬 데이터를 즉시 삭제해야 합니다. 민감정보(주민번호, 카드번호)는 Web Crypto API를 사용해 클라이언트에서 공개키로 암호화한 후 전송하고, 화면 표시 시 마스킹 처리하며, 메모리에서도 사용 후 즉시 제거합니다. 에러 로깅 시스템에는 PII 필터링 레이어를 구현하여 이메일, 전화번호, 토큰 등을 정규식과 패턴 매칭으로 자동 마스킹하고, Sentry 같은 도구의 beforeSend 훅을 활용합니다. 개발 환경에서는 실제 데이터 대신 faker.js로 생성한 mock 데이터를 사용하고, 프로덕션 데이터베이스 덤프 시 개인정보 컬럼을 자동으로 anonymize하는 스크립트를 CI/CD에 통합하며, 개발자 도구 네트워크 탭 캡처 시 민감정보가 노출되지 않도록 교육과 코드 리뷰 체크리스트를 운영합니다.

핵심 포인트
  • • Granular consent 관리와 동의 상태 동기화
  • • Web Crypto API로 클라이언트 측 민감정보 암호화
  • • 에러 로그에서 PII 자동 필터링 레이어 구현
  • • 개발 환경에서 mock 데이터 사용과 데이터 anonymization
  • • 코드 리뷰와 자동화된 체크로 개인정보 노출 방지
답변에 넣으면 좋은 키워드
GDPR PII Web Crypto API consent management data anonymization masking beforeSend
실무에서는

글로벌 서비스 런칭 시 각국의 개인정보 보호 규제를 준수하고, 데이터 유출 사고 시 법적 리스크를 최소화하기 위한 예방적 아키텍처 설계에 사용됩니다.

Follow-up 질문

Right to be Forgotten(삭제 요청권) 요청이 들어왔을 때, 프론트엔드 캐시(Service Worker, IndexedDB)와 third-party 서비스(Google Analytics, CDN)에 남아있는 데이터를 완전히 삭제하는 프로세스를 어떻게 설계하시겠습니까?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!