[ํฐ๋] ํฐ๋ Retrofit2 Multipart๋ฅผ ์ฌ์ฉํด ์๋ฒ์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ๊ธฐ
์๋
ํ์ธ์ ๋์์จ ํฐํ์ ์๋๋ก์ด๋ ๊ฐ๋ฐ์ ๊น์ ์ ์
๋๋ค :D
ํฐ๋์ 3์ฐจ ์
๋ฐ์ดํธ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์๋๋ฐ์.
์ค๋์์๋ก์ด ๊ธฐ๋ฅ ๊ตฌํ์ ์ํด ์ฌ์ฉํ๋ Retrofit2์ Multipart์ ๋ํด ์๊ฐํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ฉ๐ปRetrofit2๋?
Retrofit์ ์๋๋ก์ด๋์ ์๋ฒ๊ฐ์ REST API ํต์ ์ ๋์์ฃผ๋ OkHTTP ๊ธฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํฐ๋ ์ญ์ ์๋๋ก์ด๋์ ์๋ฒ ํต์ ์ Retrofit์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. Retrofit์ ํน์ง์ ์๋์ ๊ฐ์ต๋๋ค.
- ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Volley, AsyncTack)์ ๋นํด ๋์ ์ฑ๋ฅ
- Annotaion์ผ๋ก HTTP ๋ฉ์๋๋ฅผ ์ ์ํ์ฌ ๊ฐ๋ ์ฑ์ด ๋์
- JSON, XML์ ์๋์ผ๋ก ํ์ฑํด์ฃผ๋ Converter ์ฐ๋์ ์ง์ํ๋ฏ๋ก ์ ์ง๋ณด์๊ฐ ์ฌ์
๐ฉ๐ปMultipart๋?
Retrofit์ ์ฌ์ฉํด Multipart ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ๋ก ํ์ผ๋ Multipart์ ๋ํด ์์๋ด์ผ๊ฒ ์ฃ ?
Multipart๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ผ ๋ HTTP ์์ฒญ์ ๋ฐ๋์ ์ฌ๋ฌ ๋ถ๋ถ์ผ๋ก ๋๋์ด ๋ณด๋ด๋ ๋ฐฉ์์ ๋งํฉ๋๋ค.
ํ์ผ ์ ์ก ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ํ์ผ์ ์ ๋ก๋ํ ๋ HTTP ๋ฐ๋ ๋ถ๋ถ์ ํ์ผ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์กํ๊ฒ ๋๋๋ฐ, Multipart ํ์์ผ๋ก ์ ์กํ ์ ํ ๋ฒ์ ์ฌ๋ฌ๊ฐ์ ํ์ผ ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๊ฒ ๋๋ ๊ฒ์ด์ฃ !
๐ฉ๐ปRetrofit2 Multipart ์ค์ต
๋ณธ๊ฒฉ์ ์ผ๋ก Retrofit2 Multipart ์ฌ์ฉ ๊ณผ์ ์ ์ค๋ช ํด๋ณผํ ๋ฐ์,
์๋์ ๊ณผ์ ์ Retrofit2์ ๋ํ ์ฌ์ฉ ์ธํ ์ด ๋ง์น ์ํ์์ ์ด๋ฃจ์ด์ก๋ค๋ ๊ฒ์ ์ผ๋ํด์ฃผ์ธ์ :)
1. ์๋ฒ ์์ฒญ ํ์ธ
๊ฐ๋ฐ ์ ๋จผ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ์ ๋ฆฌํด๋ API ๋ช ์ธ์๋ฅผ ํ์ธํฉ๋๋ค.
id์ Content๋ ๊ฐ๊ฐ int์ Stringํ์ผ๋ก memoDto์ ๋ด๊ธฐ๊ณ , json type์ผ๋ก ์ง์ ๋์ด์์ต๋๋ค.
image๋ Mulipartfile ํ์์ผ๋ก ์ง์ ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
2. API Interface ์ค์
๋ช ์ธ์ ๋ง์ถ์ด API ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ค๋๋ค.
- @Multipart ์ด๋ ธํ ์ด์ : Multipart ์์ฒญ์ ์ฌ์ฉํ ๊ฒ์์ ์ ์
- @POST ์ด๋ ธํ ์ด์ : POST HTTP ์์ฒญ์ "/memo" ์๋ํฌ์ธํธ์ ๋ณด๋ผ ๊ฒ์์ ์ ์
- fun memo : memo ๋ฉ์๋๋ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ณ ๋ฐ์์ค๋ ์ญํ ์ ์ํ
- @Part("memoDto") : ๋ฉํฐํํธ ๋ถ๋ถ ์ค ํ๋๋ก, memoDto๋ผ๋ ์ด๋ฆ์ผ๋ก ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ ์ก
- @Part image : MultipartBody.Part ํํ๋ก ์ด๋ฏธ์ง๋ฅผ ์ ์ก, ์ด๋ ?๋ ์ด๋ฏธ์ง๊ฐ null ๊ฐ์ผ ์ ์์์ ์๋ฏธ
- memo ๋ฉ์๋๋ ํต์ ์ ๊ฒฐ๊ณผ๋ก ResponseChallengeJoin ํํ์ ์๋ต์ ๋ฐํ
๋๋ถ์ด memoDto๋ ์๋์ ๊ฐ์ data class๋ก ์ ์ํด๋์์ต๋๋ค.
3. API ์ฌ์ฉ
Interface๊ฐ ์ ์๋์๋ค๋ฉด ์ค์ API๊ฐ ์ฌ์ฉ๋ ํ์ด์ง์์ API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ณธ API๋ฅผ ํธ์ถํ๊ธฐ ์ํด postMemo ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ ํฌ๊ฒ API ์ฌ์ฉ์ ์ํ ์ ์ฒ๋ฆฌ ๋ถ๋ถ๊ณผ, ์ค์ API ์ฌ์ฉ๋ถ๋ก ๋๋ ์ ์์ต๋๋ค.
๋จผ์ ์ ์ฒ๋ฆฌ ๋ถ๋ถ์ ๋๋ค.
- memoDto์ ๊ฐ๊ฐ string๊ณผ intํ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ฃผ์ด์ผํ๋ฏ๋ก ํ๋ณํ ํ JSON ํ์์ memoDto๋ฅผ ์์ฑ
- Gson ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด memoDto ๊ฐ์ฒด๋ฅผ JSON ํ์์ผ๋ก ๋ณํํ๊ณ , memoDtoRequestBody ๋ณ์์ ์ ์ฅ
- uri ๋ณ์์ ์ด๋ฏธ์ง uri๊ฐ ๋ด๊ฒจ ์๋ค๋ฉด ํด๋น uri์์ ์ด๋ฏธ์ง ํ์ผ์ ๊ฐ์ ธ์ค๊ณ MultipartBody.Part ํํ๋ก ๋ณํ
- ์ด๋ uri ๋ณ์๊ฐ null๊ฐ์ผ ๊ฒฝ์ฐ null ๊ฐ์ ์ ์ง
์ฌ์ ์ ์ ์ํ API ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ ๋๋ค.
- memo ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ค์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์ก
- ์ด๋, input์ ์ก์ธ์ค ํ ํฐ, JSON ํ์์ memoDto, MultipartBody.Part ํ์์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ
- ์๋ฒ์ ์๋ต์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด enqueue ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ฝ๋ฐฑ ๋ฑ๋ก
- onFailure๋ฅผ ์ฌ์ฉํด ์ค๋ฅ ์ฒ๋ฆฌ
๐ฉ๐ป ๋ง์น๋ฉฐ
String์ด๋ Intํ์ ์ฃผ๋ก ์ฃผ๊ณ ๋ฐ๋ ์ผ๋ฐ์ ์ธ Retrofit์ ์ฌ์ฉ๊ณผ ๋ฌ๋ฆฌ Multipart๋ ์๋ฒ์ ์์ฒญ์ ๋ฐ๋ผ ํ ๋ณํ์ ๊ฑฐ์ณ์ผํด ๊น๋ค๋กญ๊ณ , ์์ํ๊ฒ ๋๊ปด์ง๊ธฐ๋ ํฉ๋๋ค. ํ์ง๋ง ํญ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋ช ์ธ์๋ฅผ ๊ผผ๊ผผํ ํ์ธํ๊ณ API๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฒญ์ ์ฑ๊ณตํ๋ ์ง๋ฆฟํจ์ ๋๋ ์ ์๋ต๋๋ค :D !
โฌ๏ธ ์ง๊ธ ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด์์ ํฐ๋ ๋ค์ด ๋ฐ๊ธฐ
https://play.google.com/store/apps/details?id=com.team7.tikkle&hl=ko-KR
๐ฉ Contact : yuu-jeong@naver.com
๐ฒ SNS : https://instagram.com/yu.eek
'๐ฉโ๐ป TECH' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TECH] GitHub Actions๋ก CI/CD ๊ตฌ์ถํ๊ธฐ(2) (0) | 2023.09.05 |
---|---|
[TECH] Android Studio๋ก ๋ค์ํ ๊ธฐ๊ธฐ ํ๋ฉด์ ๋์ํ๊ธฐ II (์ค์ ์ผ์ฑ ์๋ฎฌ ์ฌ์ฉ๋ฒ) (3) | 2023.08.29 |
[TECH] GitHub Actions๋ก CI/CD ๊ตฌ์ถํ๊ธฐ(1) (0) | 2023.08.15 |
[TECH] Android Studio๋ก ๋ค์ํ ๊ธฐ๊ธฐ ํ๋ฉด์ ๋์ํ๊ธฐ (0) | 2023.08.07 |
[TECH] RecyclerView ViewModel ์ ์๊ธฐ (0) | 2023.08.02 |