Flutter 리드·아키텍트 보안 면접

Flutter 리드 · 아키텍트 (10년+) 보안 5문항 조회수 32 · 2026-08-04 (화) 13:04:06
1 인증/인가 아키텍처
Hard

Q. Flutter 앱에서 OAuth 2.0 기반 인증을 구현할 때, Authorization Code Flow with PKCE를 사용해야 하는 이유와 구현 시 보안 고려사항을 설명해주세요. 특히 앱이 네이티브 환경에서 동작하는 특성을 고려해서 답변해주시기 바랍니다.

모바일 앱은 Client Secret을 안전하게 보관할 수 없다는 점과 커스텀 URL 스킴의 취약점을 생각해보세요.

A. 모범답안

모바일 앱은 디컴파일이 가능하여 Client Secret을 안전하게 보관할 수 없으므로, PKCE(Proof Key for Code Exchange)를 사용해 code_verifier와 code_challenge로 인증 코드 탈취를 방지해야 합니다. 커스텀 URL 스킴 대신 App Links(Android) 또는 Universal Links(iOS)를 사용해 악의적인 앱의 리다이렉트 가로채기를 방어해야 합니다. 토큰은 Flutter Secure Storage를 사용해 플랫폼별 키체인(iOS Keychain, Android Keystore)에 암호화 저장하고, 메모리에 토큰을 최소 시간만 유지해야 합니다. Refresh Token Rotation을 구현해 토큰 탈취 시 피해를 최소화하고, 세션 만료 시 자동 로그아웃 및 토큰 폐기 로직을 구현해야 합니다. 또한 state 파라미터를 사용해 CSRF 공격을 방지하고, nonce를 활용해 재생 공격을 차단해야 합니다.

핵심 포인트
  • • PKCE를 통한 Authorization Code 탈취 방지
  • • App Links/Universal Links로 리다이렉트 보안 강화
  • • Flutter Secure Storage와 플랫폼 키체인 활용
  • • Refresh Token Rotation 및 토큰 생명주기 관리
답변에 넣으면 좋은 키워드
PKCE code_verifier code_challenge Flutter Secure Storage Keychain Keystore App Links Universal Links Refresh Token Rotation
실무에서는

금융앱이나 전자상거래 앱에서 사용자 인증 시스템을 구축할 때 필수적으로 적용해야 하는 보안 아키텍처입니다.

Follow-up 질문

대규모 서비스에서 여러 마이크로서비스가 있을 때, 토큰 검증을 각 서비스에서 할지 API Gateway에서 중앙화할지 결정하는 기준은 무엇인가요?

2 데이터 암호화 및 키 관리
Hard

Q. Flutter 앱에서 민감한 개인정보를 로컬에 저장해야 하는 상황입니다. 암호화 방식 선택부터 키 관리, 플랫폼별 차이점, 그리고 GDPR 및 개인정보보호법 준수를 위한 아키텍처 설계 전략을 설명해주세요.

암호화 알고리즘 선택, 키 저장 위치, 플랫폼별 보안 스토리지, 그리고 데이터 삭제 요구권을 고려해보세요.

A. 모범답안

AES-256-GCM 방식을 사용해 데이터를 암호화하며, 인증 태그를 통해 데이터 무결성도 함께 검증합니다. 암호화 키는 절대 하드코딩하지 않고, Android는 Android Keystore의 Hardware-backed key를, iOS는 Secure Enclave를 활용해 키를 생성하고 관리합니다. Flutter에서는 flutter_secure_storage 패키지를 사용하되, 내부적으로 플랫폼 채널을 통해 각 OS의 보안 스토리지에 접근하도록 구현합니다. 개인정보보호법 준수를 위해 데이터 최소화 원칙을 적용하고, 사용자의 삭제 요구 시 암호화 키까지 완전히 폐기하는 로직을 구현해야 합니다. 또한 앱 업데이트 시 키 마이그레이션 전략을 수립하고, 루팅/탈옥 기기 감지 시 민감 데이터 접근을 차단하는 정책을 적용합니다. 암호화된 데이터는 앱 샌드박스 내에만 저장하고, 백업 시에도 암호화 상태를 유지하도록 설정합니다.

핵심 포인트
  • • AES-256-GCM을 활용한 암호화 및 무결성 검증
  • • Android Keystore와 iOS Secure Enclave를 통한 하드웨어 기반 키 관리
  • • 개인정보보호법 준수를 위한 데이터 최소화 및 삭제권 구현
  • • 루팅/탈옥 감지 및 키 마이그레이션 전략
답변에 넣으면 좋은 키워드
AES-256-GCM Android Keystore Secure Enclave flutter_secure_storage Hardware-backed key 데이터 최소화 삭제 요구권 키 마이그레이션
실무에서는

의료 앱, 금융 앱 등에서 환자 정보나 금융 거래 내역을 로컬에 캐싱할 때 필수적으로 적용해야 하는 보안 설계입니다.

Follow-up 질문

암호화 키를 서버에서 관리하는 방식과 디바이스에서 관리하는 방식의 트레이드오프는 무엇이며, 어떤 상황에서 어떤 방식을 선택해야 할까요?

3 네트워크 보안 및 API 통신
Hard

Q. Flutter 앱에서 API 통신 시 발생할 수 있는 중간자 공격(MITM)을 방지하기 위한 다층 보안 전략을 설명해주세요. SSL Pinning, 인증서 검증, 그리고 대규모 서비스에서 인증서 갱신 시 발생할 수 있는 운영 리스크와 해결 방안을 포함해주세요.

SSL Pinning의 종류, 인증서 갱신 시 앱 업데이트 강제 문제, 그리고 동적 핀 업데이트 방법을 고려해보세요.

A. 모범답안

기본적으로 HTTPS를 사용하고 시스템 인증서 검증을 활성화하되, 추가로 Certificate Pinning 또는 Public Key Pinning을 구현해 신뢰할 수 있는 인증서만 허용합니다. Public Key Pinning이 Certificate Pinning보다 유연한데, 인증서 갱신 시에도 동일한 공개키를 사용하면 앱 업데이트 없이 대응 가능하기 때문입니다. 대규모 서비스에서는 하드코딩된 핀 대신 원격 구성(Remote Config)을 통해 핀을 동적으로 업데이트하는 방식을 채택하고, 백업 핀을 함께 설정해 긴급 상황에 대비합니다. 인증서 갱신 시 최소 2개월 전부터 새 핀을 배포하고, 점진적 롤아웃(Staged Rollout)을 통해 리스크를 최소화합니다. 또한 네트워크 보안 구성에서 cleartext 트래픽을 차단하고, ProGuard/R8으로 코드 난독화를 적용해 핀 정보 노출을 방지하며, 루트 CA 인증서 설치 감지 로직을 추가합니다.

핵심 포인트
  • • Public Key Pinning을 통한 유연한 인증서 관리
  • • Remote Config 기반 동적 핀 업데이트 및 백업 핀 설정
  • • 점진적 롤아웃을 통한 인증서 갱신 리스크 관리
  • • cleartext 트래픽 차단 및 루트 CA 감지
답변에 넣으면 좋은 키워드
SSL Pinning Certificate Pinning Public Key Pinning MITM Remote Config Staged Rollout 백업 핀 cleartext 트래픽
실무에서는

금융 앱이나 기업용 앱에서 API 통신을 보호하고, 프록시 도구를 사용한 트래픽 분석을 차단할 때 필수적인 보안 조치입니다.

Follow-up 질문

Certificate Transparency를 활용해 인증서 발급 투명성을 검증하는 방법과, 이를 Flutter 앱에 적용할 때의 고려사항은 무엇인가요?

4 코드 보안 및 난독화
Medium

Q. Flutter 앱을 배포할 때 역공학(Reverse Engineering)을 통한 비즈니스 로직 노출과 API 키 탈취를 방지하기 위한 전략을 제시해주세요. 특히 Dart 코드의 특성과 네이티브 플랫폼의 차이를 고려해서 설명해주시기 바랍니다.

Dart 코드 난독화, 네이티브 코드 컴파일, 환경변수 관리, 런타임 검증 등을 생각해보세요.

A. 모범답안

Flutter는 릴리즈 빌드 시 --obfuscate 플래그를 사용해 Dart 코드를 난독화하고, --split-debug-info로 심볼 파일을 분리해 디버깅 정보 노출을 방지합니다. API 키나 시크릿은 절대 코드에 하드코딩하지 않고, 환경변수나 dart-define을 활용해 빌드 시점에 주입하거나, 서버에서 동적으로 발급받는 방식을 사용합니다. Android는 ProGuard/R8을 활성화해 네이티브 코드를 난독화하고, iOS는 Bitcode와 App Thinning을 적용합니다. 중요한 비즈니스 로직은 서버 사이드로 이동시키고, 클라이언트는 최소한의 검증 로직만 유지합니다. 런타임에 루팅/탈옥, 디버거 연결, 에뮬레이터 실행 여부를 감지해 민감 기능 실행을 차단하고, 코드 무결성 검증(Integrity Check)을 통해 앱 변조를 탐지합니다. 또한 중요 상수나 알고리즘은 네이티브 코드(C/C++)로 구현해 FFI를 통해 호출하는 방식으로 보안을 강화할 수 있습니다.

핵심 포인트
  • • Dart 코드 난독화 및 심볼 파일 분리
  • • API 키를 환경변수나 서버 발급 방식으로 관리
  • • 비즈니스 로직의 서버 사이드 이동
  • • 런타임 무결성 검증 및 루팅/탈옥 감지
답변에 넣으면 좋은 키워드
obfuscate split-debug-info ProGuard R8 dart-define 루팅 감지 탈옥 감지 FFI 코드 무결성
실무에서는

유료 콘텐츠 제공 앱이나 게임에서 인앱 결제 로직 및 프리미엄 기능 보호를 위해 필수적으로 적용해야 하는 보안 조치입니다.

Follow-up 질문

대규모 조직에서 여러 개발팀이 동시에 작업할 때, API 키와 시크릿을 안전하게 관리하고 배포하는 CI/CD 파이프라인을 어떻게 설계하시겠습니까?

5 세션 관리 및 접근 제어
Hard

Q. Flutter 앱에서 다중 디바이스 로그인, 동시 세션 관리, 그리고 권한 기반 접근 제어(RBAC)를 구현해야 합니다. 토큰 갱신, 세션 무효화, 디바이스 관리 기능을 포함한 전체 아키텍처를 설계하고, 보안 취약점과 대응 방안을 설명해주세요.

디바이스 식별, 동시 세션 제한, 강제 로그아웃, 권한 검증 시점 등을 고려해보세요.

A. 모범답안

각 디바이스에 고유한 Device ID를 생성해 서버에 등록하고, 로그인 시 디바이스 정보와 함께 세션을 생성합니다. Access Token은 짧은 만료 시간(15분)을, Refresh Token은 긴 만료 시간(30일)을 설정하되, Refresh Token은 디바이스별로 발급하고 서버에서 관리합니다. 동시 세션 수를 제한하고, 새 디바이스 로그인 시 기존 세션 목록을 제공해 사용자가 선택적으로 기존 세션을 종료할 수 있게 합니다. 권한(Role/Permission)은 토큰 페이로드에 포함하되, 민감한 작업 수행 시 서버에서 실시간 권한을 재검증하고, 권한 변경 시 WebSocket이나 FCM을 통해 클라이언트에 즉시 알려 토큰을 갱신하도록 합니다. 비정상적인 로그인 시도(다른 국가, 새 디바이스 등)를 감지해 2단계 인증을 요구하고, 세션 하이재킹 방지를 위해 IP 주소와 User-Agent를 검증합니다. 관리자 기능으로 특정 사용자의 모든 세션을 강제 종료할 수 있는 API를 제공하고, 감사 로그를 남겨 추적 가능성을 확보합니다.

핵심 포인트
  • • 디바이스별 Refresh Token 발급 및 서버 측 세션 관리
  • • 짧은 Access Token과 긴 Refresh Token 조합으로 보안 강화
  • • 실시간 권한 재검증 및 권한 변경 시 즉시 동기화
  • • 비정상 로그인 감지 및 강제 세션 종료 기능
답변에 넣으면 좋은 키워드
Device ID Refresh Token Rotation RBAC 동시 세션 관리 강제 로그아웃 2단계 인증 세션 하이재킹 감사 로그
실무에서는

기업용 SaaS 앱이나 협업 도구에서 팀원별 권한 관리와 다중 디바이스 접속을 안전하게 제어해야 할 때 필수적인 설계입니다.

Follow-up 질문

마이크로서비스 아키텍처에서 각 서비스가 독립적으로 권한을 검증해야 할 때, 권한 정보를 어떻게 동기화하고 일관성을 유지하시겠습니까?

댓글 0

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

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