์–ด์ œ Flutter์˜ GetX์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๊ณ , ์˜ค๋Š˜์€ ๊ทธ์—๋”ฐ๋ฅธ API ํ†ต์‹ ์„ ํ•˜๊ธฐ์œ„ํ•ด GetConnect์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ๊ฑฐ๋‹ค.

API ํ†ต์‹ ?

์šฐ์„  API ํ†ต์‹ ์ด๋ž€ ์›น์ด๋‚˜ ์•ฑ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ํ”„๋ก ํŠธ ์—”๋“œ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ํ•„์š”ํ•œ๋ฐ ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ API ํ†ต์‹ ์ด๋ผ๊ณ  ํ•œ๋‹ค.
์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ(์•ฑ)๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ฌ๋ผ or ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญ(Request)ํ•˜๊ณ , ์„œ๋ฒ„๊ฐ€ ๊ทธ์— ๋Œ€ํ•œ ์‘๋‹ต(Response)์„ ๋ณด๋‚ด์ฃผ๋Š” ๊ณผ์ •์ด๋‹ค.
API ํ†ต์‹ ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ด๋‹นํ•˜๋Š” UI์™€ ์„œ๋ฒ„๊ฐ€ ๋‹ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋‹ค๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.


Flutter + GetX์˜ API ํ†ต์‹ 

Flutter์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ http, dio ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์–ด์ œ GetX๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— GetX์—์„œ ์ œ๊ณตํ•˜๋Š” GetConnect๋ฅผ ํ†ตํ•ด API ํ†ต์‹ ์„ ๊ด€๋ฆฌํ• ๊ฑฐ๋‹ค.


GetConnect

GetConnect๋Š” GetX์—์„œ ์ œ๊ณตํ•˜๋Š” HTTP ํ†ต์‹  ์ „์šฉ ํด๋ž˜์Šค์ด๋‹ค.

UI (View)
โ†“
Controller (GetxController)
โ†“
Service / Repository
โ†“
API ํ†ต์‹ 

์ฆ‰ GetX๋Š” ์•ฑ์˜ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๊ฑฐ๊ณ , GetConnect๋Š” ๊ทธ ์•ˆ์—์„œ API ํ†ต์‹ ์„ ๋‹ด๋‹นํ•œ๋‹ค๋Š” ๊ฑฐ๋‹ค.


GetConnect ํŠน์ง•

  • GetX์™€ ์™„์ „ํžˆ ํ†ตํ•ฉ
    • Get.put(), Get.find() ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ
    • Controller์™€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ๊ตฌ์กฐ ์ผ๊ด€์„ฑ ์œ ์ง€
  • ๋ณ„๋„์˜ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ์‚ฌ์šฉ๊ฐ€๋Šฅ
    • GetX ํ•˜๋‚˜๋กœ ์ƒํƒœ ๊ด€๋ฆฌ + ๋ผ์šฐํŒ… + API ํ†ต์‹  ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
    • ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ ๋‹จ์ŠŒ
  • CRUD API ๊ตฌํ˜„์— ์ ํ•ฉ
    • get, post, put, delete ๋ฉ”์„œ๋“œ ์ œ๊ณต
  • Controller์™€ ๊ตฌ์กฐ ๋ถ„๋ฆฌ ์‰ฌ์›€
    • Controller์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ ๋‹ด๋‹น
    • ์‹ค์ œ HTTP ํ†ต์‹ ์€ GetConnect ๊ธฐ๋ฐ˜ Service์—์„œ ์ฒ˜๋ฆฌ
    • ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜ ํ–ฅ์ƒ

์˜ˆ์ œ์ฝ”๋“œ

import 'package:get/get.dart';

class ApiService extends GetConnect {
  @override
  void onInit() {
    httpClient.baseUrl = 'https://example.com/api';
    super.onInit();
  }

  // GET: ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ
  Future<Response> fetchPosts() {
    return get('/posts');
  }

  // POST: ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ฑ
  Future<Response> createPost(String title) {
    return post('/posts', {
      'title': title,
    });
  }
}

์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด extends GetConnect์ด๋Ÿฐ์‹์œผ๋กœ GetConnect๋ฅผ ์ƒ์†๋ฐ›์•„ HTTP ํ†ต์‹  ์ „์šฉ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ ,
baseUrl๋งŒ ์ง€์ •ํ•ด๋‘๋ฉด ์ดํ›„์—๋Š” endpoint๋งŒ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
๋˜ํ•œ get, post ๋ฉ”์„œ๋“œ๋กœ CRUD API๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: