{"componentChunkName":"component---src-templates-post-template-jsx","path":"/spring/posts/2022-05-31--001","result":{"data":{"site":{"siteMetadata":{"title":"Blog by Eunyoung","subtitle":"작업 기록 블로그","copyright":"© All rights reserved.","author":{"name":"EunYoung","twitter":"#"},"disqusShortname":"","url":"https://ssongey.github.io"}},"markdownRemark":{"id":"ba375a2d-8ce1-53a5-8ff7-dd4b91fe0ec9","html":"<p><span class=\"title__sub1\"> ■ Fuel </span></p>\n<ul>\n<li>The easiest HTTP networking library for Kotlin/Android.</li>\n<li>request, response, result 를 구조분해하여 편리하게 가져다 쓸 수 있다.</li>\n<li>Asynchronous 와 blocking 을 제공한다.</li>\n<li>async request 취소기능 제공</li>\n<li>Upload files 기능을 제공</li>\n</ul>\n<p><span class=\"title__sub2\"> ■ Async mode </span></p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token comment\">// Using httpGet() over a String is giving us a Triple&lt;Request, Response, Result>.</span>\n\n<span class=\"token string\">\"https://httpbin.org/get\"</span><span class=\"token punctuation\">.</span><span class=\"token function\">httpGet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">responseString</span> <span class=\"token punctuation\">{</span> request<span class=\"token punctuation\">,</span> response<span class=\"token punctuation\">,</span> result <span class=\"token operator\">-></span>\n  <span class=\"token keyword\">when</span> <span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">is</span> Result<span class=\"token punctuation\">.</span>Failure <span class=\"token operator\">-></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">val</span> errorData <span class=\"token operator\">=</span> <span class=\"token function\">String</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span>error<span class=\"token punctuation\">.</span>errorData<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">is</span> Result<span class=\"token punctuation\">.</span>Success <span class=\"token operator\">-></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">val</span> <span class=\"token keyword\">data</span> <span class=\"token operator\">=</span> result<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\nFuelManager<span class=\"token punctuation\">.</span>instance<span class=\"token punctuation\">.</span>basePath <span class=\"token operator\">=</span> <span class=\"token string\">\"https://httpbin.org\"</span>\n<span class=\"token string\">\"/get\"</span><span class=\"token punctuation\">.</span><span class=\"token function\">httpGet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">responseString</span> <span class=\"token punctuation\">{</span> request<span class=\"token punctuation\">,</span> response<span class=\"token punctuation\">,</span> result <span class=\"token operator\">-></span>\n    <span class=\"token keyword\">val</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">data</span><span class=\"token punctuation\">,</span> error<span class=\"token punctuation\">)</span> <span class=\"token operator\">=</span> result\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>error <span class=\"token operator\">==</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">//do something when success</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">//error handling</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><span class=\"title__sub2\"> ■ Blocking mode </span>  </p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token comment\">// Using httpGet() over a String is giving us a Triple&lt;Request, Response, Result>.</span>\n    \n<span class=\"token keyword\">val</span> <span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">,</span> response<span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">)</span> <span class=\"token operator\">=</span> <span class=\"token string\">\"https://httpbin.org/get\"</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">httpGet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">responseString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> </code></pre></div>\n<p><span class=\"title__sub1\"> ■ Result </span>  </p>\n<ul>\n<li>operation 의 결과 (success or failure) 를 포함하고 있는 functional-style data structure</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token keyword\">fun</span> <span class=\"token function\">response</span><span class=\"token punctuation\">(</span>handler<span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>Request<span class=\"token punctuation\">,</span> Response<span class=\"token punctuation\">,</span> Result<span class=\"token operator\">&lt;</span>ByteArray<span class=\"token punctuation\">,</span> FuelError<span class=\"token operator\">></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-></span> Unit<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">fun</span> <span class=\"token function\">responseString</span><span class=\"token punctuation\">(</span>handler<span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>Request<span class=\"token punctuation\">,</span> Response<span class=\"token punctuation\">,</span> Result<span class=\"token operator\">&lt;</span>String<span class=\"token punctuation\">,</span> FuelError<span class=\"token operator\">></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-></span> Unit<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">fun</span> <span class=\"token function\">responseJson</span><span class=\"token punctuation\">(</span>handler<span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>Request<span class=\"token punctuation\">,</span> Response<span class=\"token punctuation\">,</span> Result<span class=\"token operator\">&lt;</span>Json<span class=\"token punctuation\">,</span> FuelError<span class=\"token operator\">></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-></span> Unit<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">val</span> jsonObject <span class=\"token operator\">=</span> json<span class=\"token punctuation\">.</span><span class=\"token function\">obj</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">//JSONObject</span>\n<span class=\"token keyword\">val</span> jsonArray <span class=\"token operator\">=</span> json<span class=\"token punctuation\">.</span><span class=\"token function\">array</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">//JSONArray</span>\n\n\n<span class=\"token keyword\">fun</span> <span class=\"token operator\">&lt;</span>T<span class=\"token operator\">></span> <span class=\"token function\">responseObject</span><span class=\"token punctuation\">(</span>deserializer<span class=\"token operator\">:</span> ResponseDeserializable<span class=\"token operator\">&lt;</span>T<span class=\"token operator\">></span><span class=\"token punctuation\">,</span> handler<span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>Request<span class=\"token punctuation\">,</span> Response<span class=\"token punctuation\">,</span> Result<span class=\"token operator\">&lt;</span>T<span class=\"token punctuation\">,</span> FuelError<span class=\"token operator\">></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-></span> Unit<span class=\"token punctuation\">)</span></code></pre></div>\n<p><span class=\"title__sub1\"> ■ 무엇이 쉽나 </span>  </p>\n<p><span class=\"title__sub2\"> Adding Parameters </span></p>\n<p>URL encoded style for GET and DELETE request</p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\">Fuel<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"https://httpbin.org/get\"</span><span class=\"token punctuation\">,</span> <span class=\"token function\">listOf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"foo\"</span> <span class=\"token keyword\">to</span> <span class=\"token string\">\"foo\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"bar\"</span> <span class=\"token keyword\">to</span> <span class=\"token string\">\"bar\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span>url\n<span class=\"token comment\">// https://httpbin.org/get?foo=foo&amp;bar=bar</span></code></pre></div>\n<p>Support x-www-form-urlencoded for PUT, POST and PATCH</p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\">Fuel<span class=\"token punctuation\">.</span><span class=\"token function\">post</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"https://httpbin.org/post\"</span><span class=\"token punctuation\">,</span> <span class=\"token function\">listOf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"foo\"</span> <span class=\"token keyword\">to</span> <span class=\"token string\">\"foo\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"bar\"</span> <span class=\"token keyword\">to</span> <span class=\"token string\">\"bar\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">also</span> <span class=\"token punctuation\">{</span> <span class=\"token function\">println</span><span class=\"token punctuation\">(</span>it<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">also</span> <span class=\"token punctuation\">{</span> <span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token function\">String</span><span class=\"token punctuation\">(</span>it<span class=\"token punctuation\">.</span><span class=\"token function\">body</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toByteArray</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// https://httpbin.org/post</span>\n<span class=\"token comment\">// \"foo=foo&amp;bar=bar\"</span></code></pre></div>\n<p><span class=\"title__sub2\"> Adding Request Body </span>\nuse application/json</p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\">Fuel<span class=\"token punctuation\">.</span><span class=\"token function\">post</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"https://httpbin.org/post\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">jsonBody</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"{ \\\"foo\\\" : \\\"bar\\\" }\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">also</span> <span class=\"token punctuation\">{</span> <span class=\"token function\">println</span><span class=\"token punctuation\">(</span>it<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">response</span> <span class=\"token punctuation\">{</span> result <span class=\"token operator\">-></span> <span class=\"token punctuation\">}</span></code></pre></div>\n<p><span class=\"title__sub2\"> Adding Progress callbacks </span></p>\n<p>Request progress</p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\">Fuel<span class=\"token punctuation\">.</span><span class=\"token function\">post</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/post\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">body</span><span class=\"token punctuation\">(</span><span class=\"token comment\">/*...*/</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">requestProgress</span> <span class=\"token punctuation\">{</span> readBytes<span class=\"token punctuation\">,</span> totalBytes <span class=\"token operator\">-></span>\n      <span class=\"token keyword\">val</span> progress <span class=\"token operator\">=</span> readBytes<span class=\"token punctuation\">.</span><span class=\"token function\">toFloat</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> totalBytes<span class=\"token punctuation\">.</span><span class=\"token function\">toFloat</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">100</span>\n      <span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Bytes uploaded <span class=\"token interpolation variable\">$readBytes</span> / <span class=\"token interpolation variable\">$totalBytes</span> (<span class=\"token interpolation variable\">$progress</span> %)\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">response</span> <span class=\"token punctuation\">{</span> result <span class=\"token operator\">-></span> <span class=\"token punctuation\">}</span></code></pre></div>\n<p>Response progress</p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\">Fuel<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/get\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">responseProgress</span> <span class=\"token punctuation\">{</span> readBytes<span class=\"token punctuation\">,</span> totalBytes <span class=\"token operator\">-></span>\n      <span class=\"token keyword\">val</span> progress <span class=\"token operator\">=</span> readBytes<span class=\"token punctuation\">.</span><span class=\"token function\">toFloat</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> totalBytes<span class=\"token punctuation\">.</span><span class=\"token function\">toFloat</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">100</span>\n      <span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Bytes downloaded <span class=\"token interpolation variable\">$readBytes</span> / <span class=\"token interpolation variable\">$totalBytes</span> (<span class=\"token interpolation variable\">$progress</span> %)\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">response</span> <span class=\"token punctuation\">{</span> result <span class=\"token operator\">-></span> <span class=\"token punctuation\">}</span></code></pre></div>\n<p><span class=\"title__sub2\"> Using multipart/form-data(UploadRequest) </span>  </p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\">Fuel<span class=\"token punctuation\">.</span><span class=\"token function\">upload</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/post\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">add</span> <span class=\"token punctuation\">{</span> <span class=\"token function\">FileDataPart</span><span class=\"token punctuation\">(</span><span class=\"token function\">File</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"myfile.json\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> name <span class=\"token operator\">=</span> <span class=\"token string\">\"fieldname\"</span><span class=\"token punctuation\">,</span> filename<span class=\"token operator\">=</span><span class=\"token string\">\"contents.json\"</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">response</span> <span class=\"token punctuation\">{</span> result <span class=\"token operator\">-></span> <span class=\"token punctuation\">}</span>\n\nFuel<span class=\"token punctuation\">.</span><span class=\"token function\">upload</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/post\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>\n        <span class=\"token function\">FileDataPart</span><span class=\"token punctuation\">(</span><span class=\"token function\">File</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"myfile.json\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> name <span class=\"token operator\">=</span> <span class=\"token string\">\"files[]\"</span><span class=\"token punctuation\">,</span> filename<span class=\"token operator\">=</span><span class=\"token string\">\"contents.json\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token function\">FileDataPart</span><span class=\"token punctuation\">(</span><span class=\"token function\">File</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"myfile2.json\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> name <span class=\"token operator\">=</span> <span class=\"token string\">\"files[]\"</span><span class=\"token punctuation\">,</span> filename<span class=\"token operator\">=</span><span class=\"token string\">\"contents2.json\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token function\">FileDataPart</span><span class=\"token punctuation\">(</span><span class=\"token function\">File</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"myfile3.json\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> name <span class=\"token operator\">=</span> <span class=\"token string\">\"files[]\"</span><span class=\"token punctuation\">,</span> filename<span class=\"token operator\">=</span><span class=\"token string\">\"contents3.json\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">response</span> <span class=\"token punctuation\">{</span> result <span class=\"token operator\">-></span> <span class=\"token punctuation\">}</span></code></pre></div>\n<p><span class=\"title__sub2\"> Cancle an async Request </span></p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token keyword\">val</span> request <span class=\"token operator\">=</span> Fuel<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"https://httpbin.org/get\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">interrupt</span> <span class=\"token punctuation\">{</span> request <span class=\"token operator\">-></span> <span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"<span class=\"token interpolation\"><span class=\"token delimiter variable\">${</span>request<span class=\"token punctuation\">.</span>url<span class=\"token delimiter variable\">}</span></span> was interrupted and cancelled\"</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">response</span> <span class=\"token punctuation\">{</span> result <span class=\"token operator\">-></span>\n    <span class=\"token comment\">// if request is cancelled successfully, response callback will not be called.</span>\n    <span class=\"token comment\">// Interrupt callback (if provided) will be called instead</span>\n  <span class=\"token punctuation\">}</span>\n\nrequest<span class=\"token punctuation\">.</span><span class=\"token function\">cancel</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// this will cancel on-going request</span></code></pre></div>\n<p><span class=\"title__sub2\"> Debug Logging </span></p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token keyword\">val</span> request <span class=\"token operator\">=</span> Fuel<span class=\"token punctuation\">.</span><span class=\"token function\">post</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"https://httpbin.org/post\"</span><span class=\"token punctuation\">,</span> parameters <span class=\"token operator\">=</span> <span class=\"token function\">listOf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"foo\"</span> <span class=\"token keyword\">to</span> <span class=\"token string\">\"foo\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"bar\"</span> <span class=\"token keyword\">to</span> <span class=\"token string\">\"bar\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"key\"</span> <span class=\"token keyword\">to</span> <span class=\"token string\">\"value\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token function\">println</span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">.</span><span class=\"token function\">cUrlString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\">// curl -i -X POST -d \"foo=foo&amp;bar=bar&amp;key=value\" -H \"Accept-Encoding:compress;q=0.5, gzip;q=1.0\" -H \"Device:Android\" -H \"Content-Type:application/x-www-form-urlencoded\" \"https://httpbin.org/post\"</span></code></pre></div>\n<h3>Asynchronous API</h3>\n<p>non-blocking asynchronous request 를 보통 사용한다고 하는데 이는 무엇인가?<br>\n먼저 Async, Sync &#x26; Blocking, Non-Blocking 의 차이를 살펴보자<br>\n작업을 요청하는 클라이언트 : A<br>\n작업을 수행해서 결과를 return : B  </p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Sync &amp; Async : 작업의 주체성을 누가 갖는가 =&gt; A / B\nBlocking &amp; Non-Blocking : 로직의 흐름 =&gt; 멈춘다. / 안 멈춘다.\n\nSync-Blocking : A 는 B 가 완료할 때까지 계속 기다린다.\nSync-Non-Blocking : A 가 작업의 주체성을 갖고 있으며, B 가 작업을 완료할 때까지 핑퐁하면서 완료 여부를 체크한다.\n\nNon-Blocking : B 가 A 에게\nAsync-Blocking : A 가 넘겨준 콜백 함수를 B 가 실행하고 완료하는 것을 기다린다.\nAsync-Non-Blocking : A 가 B 에게 콜백 함수를 넘겨주고 A 는 자신의 일을 계속 진행하다가 B 가 작업 완료하면 A 가 넘겨 준 콜백 함수를 수행한다.</code></pre></div>\n<h4>fuel doc</h4>\n<p><a href=\"https://fuel.gitbook.io/documentation/core/fuel#using-multipart-form-data-uploadrequest\">https://fuel.gitbook.io/documentation/core/fuel#using-multipart-form-data-uploadrequest</a></p>\n<h4>fuel github</h4>\n<p><a href=\"https://github.com/kittinunf/fuel\">https://github.com/kittinunf/fuel</a>\n<a href=\"https://github.com/kittinunf/fuel/blob/master/README-legacy.md\">https://github.com/kittinunf/fuel/blob/master/README-legacy.md</a></p>\n<p><a href=\"https://medium.com/swlh/is-fuel-an-alternative-for-retrofit-f81bd4505a87\">https://medium.com/swlh/is-fuel-an-alternative-for-retrofit-f81bd4505a87</a></p>\n<h4>webclient vs resttemplate</h4>\n<p><a href=\"https://tecoble.techcourse.co.kr/post/2021-10-20-synchronous-asynchronous/\">https://tecoble.techcourse.co.kr/post/2021-10-20-synchronous-asynchronous/</a></p>\n<p><span class=\"title__sub1\"> ■ 제목입니당 </span>\n<span class=\"title__sub2\"> ■ 서브제목입니당 </span>\n<span class=\"title__sub3\"> ■ 서브제목2입니당 </span></p>\n<ul>\n<li>This is <span class=\"text-mark__green\">green color text</span></li>\n<li>This is <span class=\"text-mark__red\">red color text</span></li>\n<li>This is <span class=\"text-mark__blue\">blue color text</span></li>\n</ul>\n<h1>안녕</h1>\n<h2>안녕</h2>\n<h3>안녕</h3>\n<h4>안녕</h4>\n<h5>안녕</h5>\n<p>이미지\n<img src=\"./001-01.PNG\"></p>\n<div class=\"gatsby-highlight\" data-language=\"diff\"><pre class=\"language-diff\"><code class=\"language-diff\"><span class=\"token deleted-sign deleted\"><span class=\"token prefix deleted\">-</span> hello\n</span><span class=\"token inserted-sign inserted\"><span class=\"token prefix inserted\">+</span> green\n</span><span class=\"token diff bold\"><span class=\"token prefix diff\">!</span> orange\n</span># gray</code></pre></div>","fields":{"tagSlugs":["/tags/fuel/"],"slug":"/spring/posts/2022-05-31--001"},"frontmatter":{"title":"[Spring] Kotlin Fuel","tags":["fuel"],"date":"2022-05-31","description":""}}},"pageContext":{"slug":"/spring/posts/2022-05-31--001"}},"staticQueryHashes":[]}