앱 개발자의 인증 방식 오해 풀기

oversleep·2025년 2월 20일
0

app-development

목록 보기
19/38
post-thumbnail

들어가며: 내가 가졌던 의문

React Native로 앱을 개발하면서 백엔드 팀으로부터 RefreshToken 인증 방식으로의 변경 요청을 받았습니다. 이때 한 가지 의문이 들었습니다:

"앱은 개인 기기라서 로그인 상태를 계속 유지해도 되는데, 왜 RefreshToken으로 주기적 인증이 필요할까?"

이 의문을 풀어가는 과정에서 제가 잘못 이해하고 있던 두 가지 개념을 발견했습니다.

잘못 알고 있던 것

1. 로그인 상태 유지 vs 토큰 기반 인증

저는 이 두 개념을 하나로 생각하고 있었습니다.
하지만 이는 완전히 다른 목적을 가진 별개의 메커니즘입니다:

로그인 상태 유지

  • 목적: 사용자 편의성
  • 구현: AsyncStorage에 로그인 여부 저장
  • 웹/앱 차이:
    • 웹: 공용 PC 사용 가능성 때문에 주기적 로그아웃 필요
    • 앱: 개인 기기이므로 상태 유지 가능

토큰 기반 인증

  • 목적: API 요청의 보안성 확보
  • 구현: AccessToken + RefreshToken
  • 웹/앱 동일: 보안을 위해 필수적

2. 보안의 레이어

보안은 여러 레이어에서 다뤄져야 한다는 것을 이해하지 못했습니다:

  1. 애플리케이션 레벨 보안

    • 로그인 상태 관리
    • 자동 로그아웃
    • 세션 관리
  2. 네트워크 레벨 보안

    • API 요청 인증
    • 토큰 관리
    • 요청 암호화

왜 앱에서도 RefreshToken이 필요한가?

이제 제 의문의 답을 찾을 수 있었습니다:

  1. 토큰 탈취 위험 최소화

    • AccessToken: 1시간 유효
    • 탈취되어도 피해 최소화
  2. 안전한 토큰 갱신

    • RefreshToken으로 새로운 AccessToken 발급
    • 14일간 유효한 RefreshToken
  3. 서버 측 제어 가능

    • 토큰 무효화 가능
    • 사용자 접근 제어

정리: 두 가지는 별개의 문제

  1. 앱의 로그인 상태 유지

    • 개인 기기 특성 반영
    • 사용자 편의성 고려
    • AsyncStorage 활용
  2. RefreshToken 인증

    • API 요청의 보안성
    • 토큰 탈취 대비
    • 서버 측 제어

결론

앱이라고 해서 보안을 간과해서는 안 됩니다.
로그인 상태 유지는 사용자 편의성을 위한 것이고, RefreshToken 인증은 보안을 위한 것입니다. 이 두 가지는 상호 보완적인 관계이며, 둘 다 필요한 메커니즘입니다.

앞으로도 이런 의문이 들 때는 각 기능의 목적을 명확히 이해하고, 보안의 여러 레이어를 고려하면서 개발해야겠다는 교훈을 얻었습니다.

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

0개의 댓글