<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>띵킹.log</title>
        <link>https://velog.io/</link>
        <description>Flutter, Unity, Nodejs 개발자</description>
        <lastBuildDate>Sun, 24 Jan 2021 04:33:51 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>띵킹.log</title>
            <url>https://images.velog.io/images/gangmin-kim/profile/b909b257-7248-4b13-8b94-1eb7152eb394/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. 띵킹.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/gangmin-kim" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Flutter Web-Lambda (with API Gateway)]]></title>
            <link>https://velog.io/@gangmin-kim/Flutter-Web-Lambda-with-API-Gateway</link>
            <guid>https://velog.io/@gangmin-kim/Flutter-Web-Lambda-with-API-Gateway</guid>
            <pubDate>Sun, 24 Jan 2021 04:33:51 GMT</pubDate>
            <description><![CDATA[<h3 id="flutter-web에서-apigateway로-연결된-aws-lambda로-데이터-송수신할-때">Flutter Web에서 APIGateWay로 연결된 AWS Lambda로 데이터 송/수신할 때,</h3>
<p><strong>처음 연결해본 개발자라면 아래와 같은 에러코드를 볼 것이다.</strong></p>
<blockquote>
<p>** XMLHttpRequest error**</p>
</blockquote>
<p>통신은 하는데 값들이 보내지지 않는다...ㅋㅋㅋ
통신은 하나 값을 받지 못하는 상황....상당히 어이가 없는 상황이다.
그리고 아래의 검색어로 구글링해도 정답을 명확하게 알려주지 않더라.
(검색어:XMLHttpRequest error, flutter XMLHttpRequest error, flutter web XMLHttpRequest error)</p>
<p>결론은 위의 글은 우문현답을 원하는 그런 검색어였다.
<del>(검색어에 문제가 있었다, Flutter Web이 아닌,APIGateWay쪽으로 검색을 했어야했다.)</del></p>
<blockquote>
<p>이슈 포인트는 flutter Web에서도, Lambda에서도 아닌 <strong>APIGateway(API 게이트웨이)였다.</strong></p>
</blockquote>
<p>이유는 명확하며, APIGateway의 CORS(Cross-Origin Resource Sharing) 설정 때문이였다.
아래는 기본 APIGateWay 설정이다.</p>
<p><img src="https://images.velog.io/images/gangmin-kim/post/4550d0b5-29b1-4556-9dd7-0266a1dbcd33/image.png" alt="">
위는 API GateWay의 기본 설정 값이다.(생성하면 그냥 있는 값)
여기 ACAH나 ACEH,ACAM등 다 건드려봤는데</p>
<blockquote>
<p><strong>가장 중요한건 ACAO(Access-Control-Allow-Origin)이였다.</strong></p>
</blockquote>
<p><img src="https://images.velog.io/images/gangmin-kim/post/6fd9bdb9-ef33-459f-ac99-49c6227aa20b/image.png" alt=""></p>
<blockquote>
<p><strong>ACAO(Access-Control-Allow-Origin)에 https://와 http://를 기입하면 정상작동한다.</strong></p>
</blockquote>
<p>백엔드쪽으로 감이 있는 개발자라면, 이제 느낌이 확실히 들 것이다.</p>
<p>아무리 Lambda쪽에서 CORS대응을 해놨더라도, 제대로 CORS대응을 하지 않은 이유는,
<strong>앞단에 있는 API GateWay가 CORS에 대응하고 있지 않아서였다.</strong>
(https://*는 https://로 시작하는건 모두 허용 이런 개념이다. http://이것도 마찬가지)</p>
<p>이렇게 처리해보면 정말 간단한 CORS대응인데,</p>
<p>Flutter Web이랑 연관 지어서 생각을하면 복잡한문제가 되어버린다.
(Flutter Web이 아직 불안정하고 당연한게 안되는 경우가 몇몇 있기에 생각의 방향이 그쪽으로 가는것 같다.)</p>
<p>본인의 서버 환경은 Nodejs기반이며, </p>
<p>Flutter Web에서 Lambda(API Gateway에 연결된)로 연결한 소스는 아래와 같다.</p>
<pre><code>import &#39;package:http/http.dart&#39; as http;

Future&lt;String&gt; apiHttp({String targetURL, var body, String des}) async {  
  try {
    var _body = jsonEncode(body);
    var response = await http.post(targetURL, body: _body);
    print(&quot;API: $des is Complete&quot;);
    return response.body;
  } catch (e) {
    //서버에서 팅구는 경우
    print(&quot;[Error]$des: catch/ url=&gt; $targetURL // $e&quot;);
    return &#39;{&quot;code&quot;:500}&#39;;
  }
}</code></pre><blockquote>
<p>추가로,보안이라던지 헤더로 뭔가를 처리하고 싶다면 헤더를 기입해도 좋지만, 그런경우에는
ACAH(Access-Control-Allow-Headers)에 추가해놔야한다.
안그러면 되는것도 막혀서 안된다.</p>
</blockquote>
<p>(EC2로 연결할때는 꼭 Header에 아래의 헤더를 넣어줘야한다.</p>
<pre><code>Map&lt;String, String&gt; headers = {&#39;Content-Type&#39;: &quot;application/json&quot;};//이거 안넣으면 EC2기반 Nodejs백엔드 서버에서는 Body값을 가져오지 않는다.</code></pre><p>이상, Flutter Web으로 AWS기반 서버리스(Lambda) 시스템 구축할때, Lambda에서 보낸 값들을 받지 못할때,
도움이 되길 바라는 글이며, 
2021년도에는 Flutter가 더 매력적으로 성장할것 같으니 Flutter에 많은 관심을 바랍니다.</p>
<blockquote>
<p>*<em>결론: 
통신은 하는데 값이 안보내진다?
API GateWay에서 개발탭-CORS탭에서
ACAO(Access-Control-Allow-Origin)에 https://와 http://를 기입하면 정상작동한다.
*</em></p>
</blockquote>
<p><strong>다음 작성 예정 글: Lambda-Dynamodb를 쉽게 연결하는 방법(Lambda에 규칙설정x)</strong></p>
]]></description>
        </item>
    </channel>
</rss>