REST API는 stateless 입니다. 즉, 안드로이드 앱에서는 세션정보를 보관하지 않습니다. 따라서 통신을 할 때 마다 해당 클라이언트의 접근 권한을 체크해서 로그인이 된 경우가 아니면 접근을 거부하도록 해주어야 합니다. 통상적으로 많이 사용하는 방법 중의 하나는 엑세스 토큰입니다. 모발앱은 로그인을 먼저 하고, 로그인 성공시에 서버는 랜덤한 문자열인 토큰(보통 JWT 라는 걸 많이 사용함)을 모발앱에 리턴해줍니다. 모발앱에서는 이걸 메모리나 파일(통상적으로 카스토어 + 파일) 등에 보관한 다음 REST API를 호출할 때마다 이 토큰을 헤더에 담아서 보냅니다. 서버에서는 이 토큰을 검사하여, 허용된 클라이언트인지 체크하고 아니면 접근을 거부하면 됩니다.
그리고 토큰은 보안 상 영구적으로 사용하지 않고 유효기간을 정해놓고 사용합니다. 예를 들어 언제까지 이 토큰이 유효하다는 정보를 토큰 내에 담습니다. 토큰을 연장하기 위해서는 리프레시 토큰이란 걸 사용합니다. 최초 로그인시 서버에서 엑세스 토큰과 함께 리프레시 토큰을 같이 리턴합니다. 엑세스 토큰과 마찬가지로 모발앱에서는 이 토큰도 안전한 곳에 보관합니다. 토큰이 만료된 경우, 서버에서는 토큰을 재발급받으라는 응답을 내보내며, 이 때 모발앱에서는 보관했던 리프레시 토큰을 토큰 재발행 API를 통해전달하고 서버에서는 토큰을 확인한 후 재발급해주게 됩니다. 이 때도 엑세스 토큰과 리프레시 토큰을 둘다 발급해 줍니다.
많은 회사에서는 표준적인 인증 방식인 OAuth2를 사용하고 있습니다. 우리가 아는 거대 IT 기업들은 모두 다 이방식을 이용해 사용자의 로그인 관리를 합니다. 그리고 요즘은 보안을 강화하기 위해 로그인시 MFA(Multi Factor Authentication)이란 방법을 같이 사용합니다. 즉 로그인시 이메일, SMS, 푸시 같은 방범으로 사용자가 맞는지 추가 확인하는 방식입니다. 아마 이미 많이 사용해 보셨을 겁니다.
OAuth2 같은 경우는 혼자 개발하기는 좀 벅차기 때문에 필요하시다면
https://auth0.com/ 과 같은 서비스 업체를 통해 일정 정도 무료로 사용해 볼 수 있습니다. 파이어베이스도 인증서비스를 제공하구요. 물론 구글도 제공합니다.
구글에 auth0 alternative 정도로 검색하시면 같은 서비스를 제공하는 업체를 찾으실 수 있습니다.
OAuth2 까지 가실 필요가 없다면 서버에서 토큰 관리를 도와주는 라이브리 같은 걸 이용하셔서 사용하시면 될 것 같습니다. 이 경우 아무래도 보안이 좀 허술해질 수 있으니, 신경을 쓰셔야 할 것 같구요.
토큰은 DB에 사용자 ID와 매핑이 되어 있거나 사용자 ID같은 정보 자제를 포함하고 있어야 겠죠. 이렇게 하시면 서버에서는 토큰을 통해 사용자 정보를 꺼낼 수가 있겠죠.