본문 바로가기
안드로이드/오픈소스

[안드로이드] Aws Amplify 라이브러리 v1 -> v2 마이그래이션

by 안드뽀개기 2023. 11. 29.
반응형
반응형

 Amazon Web Services에서 메일이 날라왔다. 2022 12월에 AWS 안드로이드용 Amplify 라이브러리 v2 정식 출시되었고, v1은 더이상 업데이트 되지 않는다는 내용이었다.

이러한 이유로 2024년 5월 31일전까지 Amplify 라이브러리를 최신으로 이전하고자 결심했다. 확인해보니 내가 현재 진행중인 프로젝트에서는 다음과 같은 내용의 변동 사항들이 있었다.

 1. AuthUser 정보를 가져오는 코드가 동기 코드에서 비동기 코드로 변경
 2. 유저의 토큰을 userPoolToken에서 사용
 3. AWSKeyValueStore, AwsMobileClient 등의 클래스가 사라짐
 4. 비밀번호를 리셋하는 메소드에 username 파라미터가 추가

이전 v1에서는 AuthUser와 Token을 모두 동기 코드로 가져와 사용하고 있어 해당 부분을 비동기 코드로 변경해야했다. 하지만 프로젝트에서 많은 부분을 차지하고 있어 동기 코드를 비동기 코드로 바꾸기에는 어렵다고 판단하여 SessionManager(싱글톤 클래스)에 비동기 코드를 동기 코드처럼 사용할 수 있게 만들어서 사용했다.

 

위의 클래스를 이용해서 


 1. "AuthUser 정보를 가져오는 코드가 동기 코드에서 비동기 코드로 변경됨"의 경우 다음과 같이 수정했다

 

 



 2. "유저의 토큰을 userPoolToken에서 사용" 의 경우 다음과 같이 수정했다

 

 


 3. "AWSKeyValueStore, AwsMobileClient 등의 클래스가 사라짐" 의 경우 다음과 같이 수정했다

 1) AWSKeyValueStore 
 현재 진행중인 프로젝트에서 AWSKeyValueStore 클래스의 쓰임은 로그아웃 후에 캐시된 데이터를 지우는 용도로 사용하고 있다.

구글링 결과 Amplify 라이브러리 버전이 올라가면서 해당 이슈가 사라졌다고 확인하여 코드를 제거하기로 하였다. 하지만 정확한 정보가 아니므로 이 글을 읽고 있는 독자 중에 AWSKeyValueStore 클래스를 대체하여 캐시를 지우는 방법을 아시는 분이 계시다면 댓글에 정보를 공유해주시면 좋을 것 같습니다.

+ 2024년 1월 25일 추가
로그인 세션이 만료되고 캐시된 데이터(CognitoIdentityProviderCache)를 지우지 않으면, 유저가 로그인을 시도해도 로그인이 되지 않는다. 따라서 정상 로직은 Hub에서 SESSION_EXPIRED를 수신하면 유저를 로그아웃시키고, CognitoIdentityProviderCache의 데이터를 지워줘야한다. 하지만 나는 Amplify 라이브러리 버전이 올라가면서 해당 이슈가 해결되었다고 생각하고, 캐시 데이터를 지우는 코드를 제외하였기 때문에 로그인이 되지 않는다는 유저의 cs가 인입되었다. 

해결하는 방법은 다음과 같이 CognitoIdentityProviderCache 파일에 데이터가 있으면, 강제로 로그아웃 시키고 CognitoIdentityProviderCache 파일의 데이터를 모두 제거하였다. 이렇게 하면 유저는 로그인을 할 수 있게 된다.

 

 2) AwsMobileClient
AwsMobileClient 클래스의 경우는 token을 가져오는 용도로 사용되었으며, 2번의 "유저의 토큰을 userPoolToken에서 사용" 문제를 해결함으로써 자연스럽게 해결되었다.

 




4. "비밀번호를 리셋하는 메소드에 username 파라미터가 추가됨"의 경우 다음과 같이 수정했다.

Amplify.Auth.confirmResetPassword 함수에 username 파라미터가 하나 추가 되었는데, 이 함수는 소셜로 회원가입된 것이 아닌 이름, 이메일, 비밀번호로 회원가입된 유저들을 위한 함수이다. 따라서, 회원가입에서 입력받은 이름을 username 파라미터에 넣어서 함수 호출을 하면 된다. 나의 프로젝트의 경우 회원가입에서 유저 이름을 입력받지 않아서 usename에 email을 넣어서 회원가입을 하도록 만들었다. 따라서, 비밀번호 초기화에도 username 파라미터에 email 값을 넣어서 함수를 호출했다.



더 많은 부분들이 변경되었지만 나의 경우 크게 문제되는 것은 위 설명한 4가지였다. Amplify v2 라이브러리를 마이그래이션 하면서 어려웠던 것이 관련 내용이 블로그, stackoverflow, github, 구글 등에서 찾아볼 수 없었다. 그래서 AWS의 re:Post에 질문을 올려 찾아가면서 마이그래이션을 마칠 수 있었다. 마이그래이션을 진행하실 독자분이 참고가 됐으면 좋겠다. 끝으로 cognito의 토큰 관련해서 이해도가 부족했던 제가 AWS에 질문했던 내용 및 답변을 끝으로 마무리 하겠습니다.

질문


답변

반응형