-
SharedPreference 이야기Android 2020. 6. 19. 17:15
이번 팀플레이 로그인 화면 중 자동 로그인 기능을 구현할 일이 있었습니다. 저희 팀플레이에서 자동 로그인은 AccessToken과 RefreshToken을 이용해서 구현합니다. 여기서 말하는 토큰들은 OAuth 보안체계에서 언급되는 계정과 관련된 중요한 데이터라고 생각하시면 되는데요, 보통 첫 로그인이나 회원가입을 할 때 발급이 됩니다.
하지만 발급 후에 앱을 종료하면 토큰은 어디로 가버리는 걸까요? 따로 저장을 하지 않는다면 당연히 로그인을 다시 해서 받아와야 할 것입니다. 이러한 토큰을 저장하기 위해 팀플레이는 SharedPreference를 사용합니다.
왜 SharedPreference를 사용할까요?
안드로이드 앱 내에서 데이터를 저장하는 방법은 크게 4가지입니다. 내부 파일 저장소, 외부 파일 저장소, 키-값 데이터 저장, 데이터베이스 등인데요. 이 중 SharedPreference는 키-값 데이터 저장을 합니다. 또한, 앱을 삭제하면 데이터가 지워진다는 점에서 내부 파일 저장소의 특성도 가진다고 할 수 있겠네요. 저장하고자 하는 데이터가 설정값이나 간단한 문자열 같은 경우는 DB에 저장하기보다 더 가볍게 저장하면 좋을 것입니다. 안드로이드 공식 문서에서도 키-값 컬렉션이 비교적 작으면 SharedPreference 사용을 권장하고 있네요. 위에서 언급한 Token 같은 경우 대부분 문자열 형식을 가집니다. 따라서 SharedPreference에 키-값 쌍으로 저장하면 읽고 쓰기가 굉장히 편리할 것입니다.
SharedPreference 사용법
SharedPreference는 앱 내에서 공통적으로 사용됩니다. 예를 들어, 토큰값을 사용하려고 하는데, 두 개의 프리퍼런스가 있으면 프로그램에 혼란이 올 수 있겠죠? 그래서 전역적으로 하나의 객체만을 유지하도록 싱글톤 패턴을 사용해서 SharedPreference를 설계합니다. 싱글톤 패턴이란 프로그램에서 하나의 객체만 사용할 수 있도록 Static화 시키는 패턴입니다. 팀플레이에선 실제 사용할 때, 함수만을 호출해서 사용할 수 있도록 PreferenceManager라는 클래스를 만들어 관리하고 있습니다. 특정 String 값을 저장한다고 해볼까요? 그러면, SharedPrerence객체를 불러와서 Editor 객체를 다시 만들어서 putString()이라는 메소드를 호출해서 저장할 수 있습니다. 이 때, 저장할 String 값과 Key를 파라미터로 넣어서 저장할 수 있습니다. 팀플레이에서는 한 발 더 나아가서 putString()과 getString() 대신에 putTokenKey()라는 메소드로 토큰 값을 바로 불러올 수 있습니다. 당연히 Key 값들은 Static 변수로 선언하고 Manager 안에서 사용하고 있죠.
맺으며
SharedPreference에 대해서 정리해봤는데요. 모바일 기기와 앱의 특성상 어떤 데이터를 어디에 저장하는지가 매우 중요할 것 같습니다. 크게는 서버나 로컬에 저장하는 것으로 구분하지만 다시 로컬에서 내부 저장소에 저장할지 외부 저장소에 저장할지를 구분할 수가 있는 것이죠. Preference는 자동 로그인 뿐만 아니라, 그 활용도가 다양할 것 같습니다. 다양한 SharedPreference 사용법을 연습해봐야겠네요. 감사합니다.
'Android' 카테고리의 다른 글
Gson을 통해 API Response를 Enum으로 매핑하기 (0) 2020.09.25 [안드로이드 9.0 프로토콜 접속 변경사항] CLEARTEXT communication to XXXX not permitted by network security policy (0) 2020.07.24 EditText 자동 포커스 기능 막기 (0) 2020.05.25 프래그먼트와 백스택, 그리고 엑티비티 (0) 2020.05.20 MVP 패턴 기초 - Google Architecture을 활용한 설계 (0) 2020.02.23