React Native 앱의 인증 데이터 관리 최적화하기

oversleep·2025년 2월 24일
0

troubleshooting

목록 보기
8/19
post-thumbnail

발단: 불필요한 데이터 조회 발견

앱의 인증 상태를 확인하는 과정에서 몇 가지 의문점이 생겼습니다:

const [loginStatus, token, refreshToken] = await AsyncStorage.multiGet([
  "isLoggedIn",
  "accessToken",
  "refreshToken",  // 이게 필요할까?
]);
  1. 사용하지 않는 refreshToken을 왜 가져오고 있는가?
  2. 로그아웃 시 모든 인증 데이터를 지워야 하는가?
  3. accessToken만 삭제해도 충분한가?

코드 분석

기존 코드의 문제점

// 1. 불필요한 데이터 조회
const [loginStatus, token, refreshToken] = await AsyncStorage.multiGet([
  "isLoggedIn",
  "accessToken",
  "refreshToken",  // 사용되지 않음
]);

// 2. 불완전한 데이터 정리
await AsyncStorage.multiRemove([
  "isLoggedIn",
  "accessToken",  // 일부 인증 데이터만 삭제
]);

보안 관련 고려사항

  1. refreshToken 남겨두기의 위험성:

    • 새로운 accessToken 발급 가능
    • 보안 취약점이 될 수 있음
  2. 완전한 로그아웃의 중요성:

    • 모든 인증 데이터 제거 필요
    • 메모리 관리 측면에서도 이점

개선된 코드

// 1. 필요한 데이터만 조회
const [loginStatus, token] = await AsyncStorage.multiGet([
  "isLoggedIn",
  "accessToken"
]);

// 2. 완전한 데이터 정리
await AsyncStorage.multiRemove([
  "isLoggedIn",
  "accessToken",
  "refreshToken",
  "jti"
]);

최적화 포인트

  1. 데이터 조회 최적화:

    • 필요한 데이터만 가져오기
    • 불필요한 메모리 사용 방지
  2. 보안 강화:

    • 모든 인증 관련 데이터 완전 삭제
    • 잠재적 보안 위험 제거
  3. 코드 가독성:

    • 의도가 명확한 코드
    • 유지보수 용이성 증가

교훈

  1. 데이터 최소화 원칙:

    • 필요한 데이터만 다루기
    • 불필요한 작업 제거
  2. 보안 우선주의:

    • 완전한 로그아웃 처리
    • 잔여 데이터 관리의 중요성
  3. 코드 리뷰의 중요성:

    • 기존 코드 재검토
    • 최적화 기회 발견

결론

작은 코드 개선이 앱의 보안성과 성능에 영향을 미칠 수 있습니다.
특히 인증 관련 데이터를 다룰 때는 보안적 측면을 우선적으로 고려해야 하며, 불필요한 데이터 처리를 최소화하는 것이 좋습니다.

이러한 최적화는 단순히 코드를 줄이는 것이 아닌, 더 안전하고 효율적인 앱을 만드는 과정의 일부입니다.

profile
궁금한 것, 했던 것, 시행착오 그리고 기억하고 싶은 것들을 기록합니다.

0개의 댓글