반응형
해당 게시글에서는 지도 화면이 아닌 JSON 데이터를 받는 방법입니다!
이번에는 API GateWay를 생성하고 lambda와 연결, flutter에서 호출할 차례이다.

이전 글
 

KaKao Map Rest API + Flutter 사용해보기 ( http 통신 ) - 2 ( AWS lambda)

해당 게시글에서는 지도 화면이 아닌 JSON 데이터를 받는 방법입니다!이번에는 lambda 함수를 먼저 작성하고 테스트 해보자 이전에는 Flutter + rest api 통신 문제로 인해 통신하지 못했지만, javascript

p-coding.tistory.com

 

이전에는 lambda 함수를 생성하고 테스트하여 Kakao Rest Api가 정상적으로 작동하는지 시도해 보았다. 이번에는 그 함수의 반환 값을 받기 위해서 API GateWay를 사용하여 Flutter에서 접근할 수 있도록 만들어 보자.

 

1. 저번과 같이 콘솔 상단에 API GateWay 검색 후 이동해주자

 

2. API 생성 해주자

 

3. REST API 구축해주자

 

4. 식별가능한 이름과 설명을 작성한 뒤 생성해주자

 

5. 리소스를 생성해주자

API_GATEWAY_Path/locations 를 가지는 리소스를 만들 수 있다.

 

6. 이제 요청할 메서드를 생성하자

( 여기서 GET과 POST를 선택할 수 있는데 GET은 Param에 포함하여 요청하고 POST는 Body로 요청한다. 
나는 POST로 진행하였다. )

이전에 설정했던 lambda함수를 선택해주자!

 

7. 다음은 스테이지를 정의해야 한다.

원하는 스테이지를 정의하고 우리는 테스트로 dev로 설정해주자

 

그러면 다음과 같이 URL 호출이 생성되며 URL/locations 를 사용하여 우리가 설정한 API 호출할 수 있다.

 

이제 GateWay 설정도 완료되었으니 Flutter에서 호출해보자

import 'dart:convert';
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:http/http.dart' as http;

class TestPage extends StatefulWidget {
  const TestPage({super.key});

  @override
  State<TestPage> createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  Future<void> fetch() async {
    // 현재의 위도 경도 위치를 가져옴
    Position position = await Geolocator.getCurrentPosition(
        desiredAccuracy: LocationAccuracy.high);

    const String url =
        'URL/locations';

    Map<String, String> headers = {
      'Content-Type': 'application/json',
    };

    final Map<String, dynamic> body = {
      'y': '${position.latitude}',
      'x': '${position.longitude}',
    };

    http.Response response = await http.post(
      Uri.parse(url),
      headers: headers,
      body: json.encode(body),
    );

    if (response.statusCode == 200) {
      log(response.body);
    } else {
      log('Failed to send data: ${response.statusCode}');
    }
  }

  @override
  void initState() {
    super.initState();
    fetch();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("테스트 페이지"),
      ),
      body: const Center(
        child: Text("지도 api 테스트중 입니다."),
      ),
    );
  }
}

 

URL에 설정한 URL 값을 넣어주고 실행하자 log를 통해 우리가 설정했던 body가 들어온 것을 알 수 있다.

 

 

마치며...
이제 이 값들을 변환시켜 좌표값을 가져오고 좌표값을 통해 네이버 지도를 띄울 수 있다.
다음 글은 네이버 지도 RestAPI를 통해 Static Map을 띄우도록 하겠다
좌표값을 알고 있기 때문에 dynamic, Static 자유롭게 사용해도 된다.
반응형
반응형
해당 게시글에서는 지도 화면이 아닌 JSON 데이터를 받는 방법입니다!
이번에는 lambda 함수를 먼저 작성하고 테스트 해보자

 

이전에는 Flutter + rest api 통신 문제로 인해 통신하지 못했지만, javascript에서는 가능했다. 때문에 AWS Web Service를 활용하여 서버에 코드를 등록하고 호출하는 방식을 사용해보고자 한다. 

 


 

 

클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services

필요한 만큼 이용할 수 있는 것은 물론 필요에 따라 몇 분 만에 확장 또는 축소할 수 있습니다. 자세히 알아보세요.

aws.amazon.com

 

우리가 사용할 것은 코드를 등록하여 사용할 Lambda, Flutter와 통신할 매개체인 API GateWay다.
각각 월 100만건 무료로 그 이상 호출 시 사용한만큼에 따라 가입한 정책에 따라 요금이 부과된다.

 

 

때문에 가입 후 카드 등록이 필수다. 카드 등록시 1$를 결제한 후 바로 취소해 준다고 써져 있다.

( 카드 결제 정보가 맞는지 확인차 하는 것으로 보이며 저는 100원 결제되었다가 바로 취소되었습니다. )

가입 후 카드정보를 다음과 같이 입력하면 된다.

 



1. 가입이 완료되었다면 콘솔로 이동해 주자

2. 콘솔 상단의 검색에 lambda를 검색 후 이동해 주자

 

3. lambda 함수를 생성 해주자

 

4. 사용할 함수명과 함께 함수를 만들어 주자

 

코드를 등록하기 때문에 내장함수가 아니면 라이브러리를 다운받아서 같이 올려줘야 한다.

때문에 Node.js 가 익숙하다면 Node.js를 사용하고 나는 Python으로 진행하였다.

런타임에서 Node.js 가 아닌 Python을 선택하면 된다.

( 저는 Test(함수 이름), Python 3.12 version(런 타임 환경) 을 사용했습니다. )

 

생성 후 다음과 같은 화면을 볼 수 있는데

코드 작성 후 Deploy(배포)를 통해 저장한다고 생각하면 되고 Test를 통해 코드 테스트를 해 볼 수 있다.

다른 언어의 main함수와 같이 lambda_function 이름을 가진 코드를 실행하기 때문에 이름 변경에 주의하자.

 


이제 코드를 작성하자.

기존의 DartNode.js에서 작성했던 코드를 Python으로 변환하고

x, y를 매개변수로 받는 함수로 작성해보자

 

 

 

1. 먼저 원하는 위치에 빈디렉토리 생성 후 lambda_fuction.py 파일을 만들어 주자.

 

2. Aws lambda에 쓸 카카오와 Rest API 통신하는 코드를 작성한다.

import json
import requests

def make_api_call(x, y):
   
    params = {
        'query': '카카오 프렌즈',
        'y': y,
        'x': x,
        'radius': '20000'
    }

    headers = {
        'Authorization': 'KakaoAK 발급받은_Rest_API_KEY'
    }

    response = requests.get(url, params=params, headers=headers)
    response_data = response.json()
   
    return response_data

def lambda_handler(event, context):
    x = event['x']
    y = event['y']
   
    try:
        data = make_api_call(x, y)
        return {
            'statusCode': 200,
            'body': json.dumps(data)
        }
    except Exception as e:
        return {
            'statusCode': 500,
            'body': json.dumps({'error': str(e)})
        }

 

3. 해당 파일 경로에 이동하여 requests 라이브러리를 추가해주자.

cmd 창에 다음과 같이 입력한다.

3-1. >cd ~파일경로/Test

3-2. >pip install requests -t

 

4. 해당 Test 파일을 압축 후 업로드 한다.

 

업로드 후 저장해 준다.

 

여기서 주의할 점이 lambda 함수 페이지에서 root 하위 파일들로 위치해 있어야 한다.

 

5. 이제 Test 해보자

 

Test 버튼 클릭 후 이름과 임의의 경도와 위도 값을 넣으면 된다.

다시 테스트 버튼을 클릭하면 다음과 같은 결과를 얻을 수 있다.

 

 

마치며...
메모리 사용량 시간 등을 알려주며 한글은 변환되어 \\uc11c\\uc6b8(서울)로 표현된다.
다음은 API GATEWAY를 사용하여 lambda와 연결하고
Flutter에서 URL에 POST 요청을 통해 처리할 수 있도록 하겠다 

 

반응형

+ Recent posts