---
title: Flutter에서 Parse SDK로 사용자 쿼리 수행하기
slug: docs-kr/flutter/parse-sdk/users/flutter-query-users
description: Flutter 앱에서 Parse SDK를 사용하여 사용자 쿼리 작업을 구현하는 방법을 배우세요. 데이터베이스 쿼리를 최적화하고 필요한 데이터만 가져오세요.
image: https://www.back4app.com/images/logo-social.png
createdAt: 2024-03-18T15:00:20.690Z
---

# Flutter에서 Parse로 사용자 쿼리하기

## 소개

일부 애플리케이션은 사용자를 직접 관리하거나 사용자 목록을 볼 수 있어야 합니다. Parse에는 쿼리 도구가 있으며 이를 사용하여 애플리케이션의 사용자를 나열할 수 있습니다.

이 가이드에서는 **Parse Server용 Flutter 플러그인**을 사용하여 Flutter 애플리케이션에서 사용자 쿼리를 수행하는 방법을 배웁니다.

## 목표

Flutter 앱을 위한 사용자 쿼리 기능을 Parse를 사용하여 구축하는 것입니다.

## 전제 조건

**이 튜토리얼을 완료하려면 다음이 필요합니다:**

:::hint{type="info"}
- [Flutter 버전 2.2.x 이상](https://flutter.dev/docs/get-started/install)
- [Android Studio ](https://developer.android.com/studio) 또는 [VS Code 설치](https://code.visualstudio.com/) ( [플러그인](https://docs.flutter.dev/get-started/editor) Dart 및 Flutter와 함께)
- Back4App에서 [생성된](https://www.back4app.com/docs/get-started/new-parse-app) 앱:
  - **참고:&#x20;**&#x42;ack4App에서 Parse 앱을 생성하는 방법을 배우려면 [새 Parse 앱 튜토리얼](https://www.back4app.com/docs/get-started/new-parse-app)을 따르세요.
- Back4app에 연결된 Flutter 앱.
  - **참고:&#x20;**&#x42;ack4App에 연결된 Flutter 프로젝트를 생성하려면 [Parse SDK를 Flutter 프로젝트에 설치](https://www.back4app.com/docs/flutter/parse-sdk/parse-flutter-sdk)를 따르세요.
- Android 또는 iOS를 실행하는 장치(또는 가상 장치).
:::

## 쿼리 사용자 앱 이해하기

쿼리 사용자 프로세스를 더 잘 이해하기 위해 쿼리할 앱을 만들 것입니다. 이 가이드의 주요 초점이 Flutter와 Parse를 사용하는 것이므로 Flutter 애플리케이션 코드는 설명하지 않겠습니다.

다음 단계를 따르면, Back4App 데이터베이스에 작업을 저장하는 Todo 앱을 만들 수 있습니다.

## 시작해봅시다!

다음 단계를 따르면, Back4App 데이터베이스에 사용자 계정을 생성하는 Sign 앱을 만들 수 있습니다.

## 1 - 사용자 쿼리 앱 템플릿 만들기

이전 가이드에서 Flutter 프로젝트를 열고 **Parse Server용 Flutter 플러그인**으로 이동합니다. <font color="#2166ae">`main.dart`</font> 파일을 열고 모든 코드를 정리한 후 다음으로 교체합니다:

```dart
1   import 'dart:async';
2
3   import 'package:flutter/material.dart';
4   import 'package:parse_server_sdk_flutter/parse_server_sdk.dart';
5
6   void main() async {
7     WidgetsFlutterBinding.ensureInitialized();
8  
9     final keyApplicationId = 'YOUR_APP_ID_HERE';
10    final keyClientKey = 'YOUR_CLIENT_KEY_HERE';
11    final keyParseServerUrl = 'https://parseapi.back4app.com';
12
13    await Parse().initialize(keyApplicationId, keyParseServerUrl,
14        clientKey: keyClientKey, debug: true);
15  
16    runApp(MaterialApp(
17      home: Home(),
18    ));
19  }
20
21  class Home extends StatefulWidget {
22    @override
23    _HomeState createState() => _HomeState();
24  }
25 
26  class _HomeState extends State<Home> {
27    final _scaffoldKey = GlobalKey<ScaffoldState>();
28  
29    @override
30    Widget build(BuildContext context) {
31      return Scaffold(
32          appBar: AppBar(
33            title: Text("Parse Query Users"),
34            backgroundColor: Colors.blueAccent,
35            centerTitle: true,
36          ),
37          key: _scaffoldKey,
38          body: FutureBuilder<List<ParseObject>>(
39              future: doUserQuery(),
40              builder: (context, snapshot) {
41                switch (snapshot.connectionState) {
42                  case ConnectionState.none:
43                  case ConnectionState.waiting:
44                    return Center(
45                      child: Container(
46                          width: 100,
47                          height: 100,
48                          child: CircularProgressIndicator()),
49                    );
50                  default:
51                    if (snapshot.hasError) {
52                      return Center(
53                        child: Text("Error...: ${snapshot.error.toString()}"),
54                      );
55                    } else {
56                      if (snapshot.data!.isEmpty) {
57                        return Center(
58                          child: Text('None user found'),
59                        );
60                      }
61  
62                      return ListView.builder(
63                          padding: EdgeInsets.only(top: 10.0),
64                          itemCount: snapshot.data!.length,
65                          itemBuilder: (context, index) {
66                            final user = snapshot.data![index] as ParseUser;
67                            final userVerified = user.emailVerified ?? false;
68                            return ListTile(
69                              title: Text(
70                                  'Username: ${user.username} - Verified: ${userVerified.toString()}'),
71                              subtitle: Text(user.createdAt.toString()),
72                            );
73                          });
74                    }
75                }
76              }));
77    }
78
79    Future<List<ParseObject>> doUserQuery() async {
80      return [];
81    }
82  }
83
```

:::hint{type="info"}
함수 <font color="#2166ae">`debug`</font>의 <font color="#2166ae">`Parse().initialize`</font> 매개변수가 <font color="#2166ae">`true`</font>, Parse API 호출을 콘솔에 표시할 수 있습니다. 이 설정은 코드 디버깅에 도움이 될 수 있습니다. 릴리스 버전에서는 디버그를 비활성화하는 것이 좋습니다.
:::

## 2 - 템플릿을 Back4app 프로젝트에 연결하기

애플리케이션 ID와 클라이언트 키 자격 증명을 찾으려면 [Back4App 웹사이트](https://www.back4app.com/)로 이동하세요.

코드를 <font color="#2166ae">`main.dart`</font>에서 Back4app의 애플리케이션 ID와 클라이언트 키 값으로 업데이트하세요.

- **keyApplicationId = 앱 ID**
- **keyClientKey = 클라이언트 키**

프로젝트를 실행하면 앱이 이미지와 같이 로드됩니다.

::Image[]{src="https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/-9q1hAy87h1LFCBqdVRdx_image.png" size="50" width="322" height="638" position="center" showCaption="false"}

## 3 - 사용자 쿼리 코드

모든 Parse 쿼리 작업은 <font color="#2166ae">`ParseQuery`</font> 객체 유형을 사용하며, 이는 앱 전반에 걸쳐 데이터베이스에서 특정 데이터를 검색하는 데 도움이 됩니다.

&#x20;<font color="#2166ae">`ParseQuery`</font>는 검색 메서드를 호출한 후에만 해결되므로, 쿼리를 설정하고 검색 메서드를 제출하기 전에 여러 수정자를 연결할 수 있습니다.

새로운 <font color="#2166ae">`ParseQuery`</font>, 생성하려면 원하는 <font color="#2166ae">`ParseObject`</font> 하위 클래스를 매개변수로 전달해야 하며, 이는 쿼리 결과를 포함할 것입니다.

아래에서 사용자 쿼리 예제를 볼 수 있습니다. 제공된 코드를 사용하여 <font color="#2166ae">`doUserQuery`</font> 함수를 파일 <font color="#2166ae">`main.dart`</font>. <font color="#2166ae">`doUserQuery`</font> 내부의 코드를 다음으로 교체하세요:

```dart
1       QueryBuilder<ParseUser> queryUsers =
2           QueryBuilder<ParseUser>(ParseUser.forQuery());
3       final ParseResponse apiResponse = await queryUsers.query();
4   
5       if (apiResponse.success && apiResponse.results != null) {
6         return apiResponse.results as List<ParseObject>;
7       } else {
8         return [];
9       }
```

이 기능을 구축하려면 다음 단계를 따르세요:

1. 인스턴스를 생성합니다.<font color="#2166ae">`ParseQuery`</font> 클래스를 사용하고 <font color="#2166ae">`ParseUser.forQuery`</font>에 매개변수로 전달합니다.
2. 다음의 <font color="#2166ae">`query`</font> 함수를 호출하여 데이터베이스에 대해 쿼리를 실행합니다.
3. 작업이 성공하면, <font color="#2166ae">`ParseUser`</font> 객체의 목록을 반환합니다. 만약 작업이 객체를 찾지 못하면, 성공 속성은 false가 되고 결과는 null이 됩니다.

전체 코드는 다음과 같아야 합니다:

```dart
1     Future<List<ParseObject>> doUserQuery() async {
2       QueryBuilder<ParseUser> queryUsers =
3           QueryBuilder<ParseUser>(ParseUser.forQuery());
4       final ParseResponse apiResponse = await queryUsers.query();
5
6       if (apiResponse.success && apiResponse.results != null) {
7         return apiResponse.results as List<ParseObject>;
8       } else {
9         return [];
10      }
11    }
```

다음 구조를 사용하여 단일 사용자를 검색해 볼 수도 있습니다:

:::BlockQuote
&#x20; user?.get("username");
:::

:::hint{type="info"}
테스트하려면, Android Studio/VSCode에서 <font color="#2166ae">`실행`</font> 버튼을 클릭하세요.
:::

이 쿼리를 수행한 후, 앱의 사용자 목록은 다음과 같은 내용을 보여야 합니다:

::Image[]{src="https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/CJFg4YCROokh3Wye9z4LN_image.png" size="50" width="322" height="638" position="center" showCaption="false"}

## 완료되었습니다!

이 가이드의 끝에서, Flutter에서 Parse 사용자에 대한 쿼리를 수행하는 방법을 배웠습니다.
