Android 앱 개발을 위한 Bmob 백엔드 연동 가이드

Bmob를 활용한 모바일 백엔드 구축

모바일 애플리케이션 개발 시 서버 인프라를 직접 구축하고 유지보수하는 것은 많은 시간과 비용이 소요된다. 이를 해결하기 위해 등장한 개념이 BaaS(Backend as a Service)다. BaaS는 클라우드 기반의 백엔드 서비스를 제공하여, 개발자가 서버 로직에 집중하지 않고도 데이터 저장, 사용자 인증, 푸시 알림 등의 기능을 빠르게 구현할 수 있도록 돕는다.

국내외 대표적인 BaaS 플랫폼 중 하나인 Bmob는 간편한 API와 SDK를 제공하며, 특히 Android 및 iOS 앱 개발에 최적화되어 있다. 본 문서에서는 Bmob를 기반으로 사용자 로그인 및 회원가입 기능을 구현하는 방법을 단계별로 설명한다.

1. Bmob 프로젝트 설정

먼저 Bmob 공식 사이트에 접속하여 계정을 생성하고, 새 애플리케이션을 등록한다. 프로젝트 생성 후 발급되는 Application ID는 이후 SDK 초기화 시 필요하므로 안전하게 보관한다.

2. Android 프로젝트 준비

Android Studio 또는 Eclipse에서 새 프로젝트를 생성한 후, Bmob에서 제공하는 Android SDK를 다운로드한다. 압축 해제 후 libs 폴더에 다음 JAR 파일들을 추가한다:

  • bmob-sdk-x.x.x.jar
  • okhttp-*.jar
  • gson-*.jar

Gradle 기반 프로젝트라면 의존성 설정을 통해 추가할 수도 있다.

3. 권한 선언

앱이 네트워크 통신을 수행하려면 매니페스트 파일에 필요한 권한을 명시해야 한다. AndroidManifest.xml 내에 아래 권한들을 추가한다:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

4. 사용자 데이터 모델 정의

Bmob는 객체 기반 데이터 처리를 지원하므로, 사용자 정보를 담을 Java 클래스를 생성한다. 이 클래스는 BmobObject를 상속받아야 한다.

public class UserAccount extends BmobObject {
    private String username;
    private String userPassword;

    // 기본 생성자
    public UserAccount() {}

    public UserAccount(String username, String userPassword) {
        this.username = username;
        this.userPassword = userPassword;
    }

    // Getter 및 Setter 메서드
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }
}

5. 메인 액티비티 구현

로그인 및 회원가입 UI와 로직을 포함한 MainActivity를 작성한다. 먼저 SDK를 초기화하고, 뷰 요소를 바인딩한다.

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText editUsername, editPassword;
    private Button btnSignIn, btnSignUp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Bmob SDK 초기화 (Application ID 입력)
        Bmob.initialize(this, "YOUR_APPLICATION_ID_HERE");

        setupViews();
    }

    private void setupViews() {
        editUsername = findViewById(R.id.edit_username);
        editPassword = findViewById(R.id.edit_password);
        btnSignIn = findViewById(R.id.btn_signin);
        btnSignUp = findViewById(R.id.btn_signup);

        btnSignIn.setOnClickListener(this);
        btnSignUp.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        String name = editUsername.getText().toString().trim();
        String pass = editPassword.getText().toString().trim();

        if (name.isEmpty() || pass.isEmpty()) {
            Toast.makeText(this, "모든 필드를 입력하세요", Toast.LENGTH_SHORT).show();
            return;
        }

        switch (v.getId()) {
            case R.id.btn_signin:
                authenticateUser(name, pass);
                break;
            case R.id.btn_signup:
                registerUser(name, pass);
                break;
        }
    }

6. 로그인 기능 구현

BmobQuery를 사용해 서버에서 일치하는 사용자 정보를 조회하고, 비밀번호를 비교한다.

private void authenticateUser(String username, String password) {
    BmobQuery<UserAccount> query = new BmobQuery<>();
    query.addWhereEqualTo("username", username);
    query.findObjects(new QueryListener<List<UserAccount>>() {
        @Override
        public void done(List<UserAccount> userList, BmobException e) {
            if (e == null && !userList.isEmpty()) {
                UserAccount user = userList.get(0);
                if (user.getUserPassword().equals(password)) {
                    Toast.makeText(MainActivity.this, "로그인 성공", Toast.LENGTH_SHORT).show();
                } else {
                    editPassword.setText("");
                    Toast.makeText(MainActivity.this, "비밀번호가 잘못되었습니다", Toast.LENGTH_SHORT).show();
                }
            } else {
                Toast.makeText(MainActivity.this, "등록되지 않은 사용자입니다", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

7. 회원가입 기능 구현

새로운 사용자 정보를 객체로 생성하여 Bmob 서버에 저장한다.

private void registerUser(String username, String password) {
    UserAccount newUser = new UserAccount(username, password);
    newUser.save(new SaveListener<String>() {
        @Override
        public void done(String objectId, BmobException e) {
            if (e == null) {
                Toast.makeText(MainActivity.this, "회원가입 완료", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "등록 실패: " + e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    });
}

8. UI 레이아웃 구성

간단한 로그인 화면을 위한 레이아웃을 작성한다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <EditText
        android:id="@+id/edit_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="사용자 이름"
        android:inputType="text" />

    <EditText
        android:id="@+id/edit_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="비밀번호"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/btn_signin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="로그인" />

    <Button
        android:id="@+id/btn_signup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="회원가입" />

</LinearLayout>

태그: Bmob BaaS Android 클라우드백엔드 모바일개발

7월 20일 03:46에 게시됨