[kotlin] 코틀린 안드로이드 MVVM 아키텍처에서의 로그인/인증 처리 방법

본 포스트에서는 안드로이드 앱 개발에서 코틀린MVVM 아키텍처를 활용하여 로그인 및 사용자 인증을 처리하는 방법을 살펴보겠습니다. MVVM(Model-View-ViewModel)은 안드로이드 앱의 UI와 비즈니스 로직을 분리하고 데이터 바인딩을 용이하게 하는 아키텍처 디자인 패턴입니다.

1. 모델 및 뷰모델 클래스 생성

우선, 로그인 및 사용자 인증과 관련된 데이터와 로직을 처리하기 위해 모델(Model) 및 뷰모델(ViewModel) 클래스를 생성합니다.

모델 클래스

// User 모델 클래스
data class User(val username: String, val password: String)

뷰모델 클래스

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class AuthViewModel : ViewModel() {
    private val _isLoggedIn = MutableLiveData<Boolean>()
    val isLoggedIn: LiveData<Boolean>
        get() = _isLoggedIn

    fun login(user: User) {
        // 로그인 로직 구현
        // 인증에 성공하면 _isLoggedIn 값을 true로 설정
        // 실패할 경우 에러 처리
    }
}

2. UI 레이어 구현

다음으로, UI 레이어에서 사용자 인터페이스와 뷰모델을 바인딩하여 사용자가 로그인할 수 있는 화면을 구현합니다.

레이아웃 XML

<!-- 로그인 화면 레이아웃 -->
<LinearLayout>
    <!-- 사용자명 입력 필드 -->
    <EditText
        android:id="@+id/usernameEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <!-- 비밀번호 입력 필드 -->
    <EditText
        android:id="@+id/passwordEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <!-- 로그인 버튼 -->
    <Button
        android:id="@+id/loginButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="로그인" />
</LinearLayout>

액티비티 또는 프래그먼트

class LoginActivity : AppCompatActivity() {
    private lateinit var authViewModel: AuthViewModel

    // ... (onCreate 및 기타 메서드 생략)

    private fun setupObservers() {
        // 사용자명 및 비밀번호 입력 변화 관찰
        usernameEditText.addTextChangedListener { /* 사용자명 입력 변화 처리 */ }
        passwordEditText.addTextChangedListener { /* 비밀번호 입력 변화 처리 */ }
        
        // 로그인 버튼 클릭 시
        loginButton.setOnClickListener {
            val username = usernameEditText.text.toString()
            val password = passwordEditText.text.toString()
            val user = User(username, password)
            authViewModel.login(user)
        }

        // 로그인 상태 변경 관찰
        authViewModel.isLoggedIn.observe(this, { isLoggedIn ->
            if (isLoggedIn) {
                // 로그인 성공 시 처리
            } else {
                // 로그인 실패 시 처리
            }
        })
    }
}

3. 사용자 로그인 처리 및 상태 관리

뷰모델에서 구현한 로그인 메서드를 통해 사용자가 입력한 사용자명과 비밀번호로 로그인을 시도하고 결과에 따라 적절한 상태를 뷰에 반영합니다. 또한 사용자의 로그인 상태를 관찰하여 UI를 업데이트할 수 있습니다.

이처럼 코틀린MVVM 아키텍처를 활용하면 안드로이드 앱에서 로그인 및 사용자 인증 처리를 깔끔하게 구현할 수 있습니다. 각 계층 간의 의존성을 낮추고 유지보수성을 높일 수 있다는 장점 또한 기대할 수 있습니다.

참고 자료