Blog Article 08 05 - nolsigan/nolsigan.github.io GitHub Wiki

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด์Œ์†Œ์‹œ์–ด์Šค์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์„ ๋งก๊ณ  ์žˆ๋Š” ๊น€๋ฒ”์ค€(์ค€)์ž…๋‹ˆ๋‹ค.

์ตœ๊ทผ ์•ˆ๋“œ๋กœ์ด๋“œ HTTP Client ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ Volley์—์„œ Retrofit2๋กœ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์—์„œ ๊ฒช์—ˆ๋˜ ProGuard ๊ด€๋ จ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ๊ณผ์ •์„ ๊ณต์œ ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.
์ €ํฌ๊ฐ€ ๊ฒช์€ ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ƒˆ๋กœ์šด feature์— ์“ฐ์ด๋Š” API ๋ชจ๋“ˆ์„ Retrofit2๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  2. QA ๊ณผ์ •์—์„œ ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†์–ด์„œ ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด์— ๋ฐฐํฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  3. ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜๋‹ˆ ์ƒˆ๋กœ ๋งŒ๋“  API๊ฐ€ ์ž‘๋™์„ ์•ˆ ํ–ˆ์Šต๋‹ˆ๋‹ค ใ… ใ… 

๋ฉ€์ฉกํ•˜๋˜ API๊ฐ€ ๋ฐฐํฌํ•˜๋‹ˆ ๊ฐ‘์ž๊ธฐ ์•ˆ๋˜๋‹ค๋‹ˆ.. (๋ฉ˜๋ถ•) APK ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š๊ณ  Android Studio๋ฅผ ํ†ตํ•œ ๋นŒ๋“œ๋กœ๋งŒ ํ…Œ์ŠคํŠธํ•œ ๊ฒƒ์ด ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.
ProGuard๊ฐ€ APK๋ฅผ ๋‚œ๋…ํ™”ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋˜ ๊ฒƒ์ด์ฃ !

์ •ํ™•ํžˆ ์–ด๋–ค ๋ฌธ์ œ์˜€๋Š”์ง€ ์„ค๋ช…ํ•˜๊ธฐ์— ์•ž์„œ ๋จผ์ € ProGuard์™€ ์ €ํฌ๊ฐ€ ์‚ฌ์šฉํ•œ retrofit2 ์„ค์ •์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ProGuard๋ž€?

ProGuard๋Š” APK ๋นŒ๋“œ ๊ณผ์ •์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•จ์œผ๋กœ์จ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ , ๋‚จ์€ ์ฝ”๋“œ๋ฅผ ๋‚œ๋…ํ™”๋ฅผ ํ†ตํ•ด ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง์„ ์–ด๋ ต๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
ProGuard์˜ ๊ฒฝ์šฐ์—๋Š” class, method, field์˜ ์ด๋ฆ„์„ ์ค„์—ฌ ๋‚œ๋…ํ™”๋ฅผ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค๋ฉด 'name' ์ด๋ผ๋Š” String ํƒ€์ž…์˜ field๋ฅผ 'a'๋ผ๊ณ  ์น˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋•Œ, ๋‚œ๋…ํ™”๊ฐ€ ์ฝ”๋“œ ์ž‘๋™์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„๋“ค์€ '-keep class ~'์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚œ๋…ํ™”์—์„œ ์ œ์™ธํ•ด์ค๋‹ˆ๋‹ค.

retrofit2 + rxjava

์ €ํฌ๊ฐ€ retrofit2์„ ๋„์ž…ํ•˜๋ฉด์„œ ์„ ํƒํ•˜๊ฒŒ ๋œ ๊ตฌ์กฐ๋Š” rxjava์˜ Observable class์™€ GsonConverter๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

-- ์ฝ”๋“œ -- //Retrofit ์„ค์ • mApi = new Retrofit.Builder() .baseUrl(SERVER_URL) .client(new OkHttpClient()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //Rxandroid .addConverterFactory(GsonConverterFactory.create()) //Json Parser ์ถ”๊ฐ€ .build().create(Im8Service.Im8Api.class); //์ธํ„ฐํŽ˜์ด์Šค ์—ฐ๊ฒฐ

  • ๋”ฐ๋กœ - @POST("get_nation_ids_and_names") Observable<Im8Response.Nations> getNationIdsAndNames(@Query("access_token") String accessToken);

  • ๋ชจ๋ธ ๋”ฐ๋กœ - -- ์ฝ”๋“œ --

RxJava์˜ Observable๋ฅผ ํ†ตํ•ด ์–ด๋–ค class๋กœ response๋ฅผ ๋ฐ›์„ ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ด์ฃผ๋ฉด, GsonConverter๋ฅผ ํ†ตํ•ด response๋ฅผ JSON์œผ๋กœ serializeํ•˜์—ฌ ์ง€์ •ํ•œ class์˜ ๊ฐ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•ด์ค๋‹ˆ๋‹ค.
API ์ฝœ์„ ๋ถ€๋ฅด๋ฉด callback์— ์ง€์ •ํ•œ class์˜ ๊ฐ์ฒด๋ฅผ ๋Œ๋ ค์ฃผ๋‹ˆ ๊ทธ๋ƒฅ ๋ฐ”๋กœ class method๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์งฑ ํŽธํ•จ..)

retrofit2 + rxjava์˜ ์ž์„ธํ•œ ์„ค์ •์ด ๊ถ๊ธˆํ•˜์‹  ๋ถ„์€ https://medium.com/@ahmedrizwan/rxandroid-and-retrofit-2-0-66dc52725fff#.rn3g84oxv๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”~

๋ฌธ์ œ๋Š” Model์˜ ๋‚œ๋…ํ™”์— ์žˆ์—ˆ๋‹ค..

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ response๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด GsonConverter๊ฐ€ JSON์œผ๋กœ ํŒŒ์‹ฑํ•ด์ฃผ๊ณ  model class์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•ด์ฃผ๋Š”๋ฐ, ์ด ๋•Œ ProGuard๊ฐ€ ์ด class์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋‚œ๋…ํ™”ํ•˜๋ฉด..! ๋Œ€์‘ ๋˜๋Š” ์ด๋ฆ„์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์ด์ฃ .

์‹ค์ œ๋กœ ๋‚œ๋…ํ™” ๋œ class๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

-- ์‚ฌ์ง„ --

proguard configuration

default

retrofit ํ™ˆํŽ˜์ด์ง€๋Š” proguard๋ฅผ ์‚ฌ์šฉํ•  ์‹œ ์–ด๋–ค ์„ค์ •์„ ์ ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์นœ์ ˆํ•˜๊ฒŒ ์จ ๋†“์•˜์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์ง„ -

์ด๊ฒƒ๋งŒ ๋ณด๊ณ  ์„ค์ •์ด ๋๋‚ฌ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ๊ฒƒ์ด์ฃ  ใ… ใ… 

keep model

-- ์ฝ”๋“œ --

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” model class๋ฅผ ๋‚œ๋…ํ™”์—์„œ ์ œ์™ธํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

-- ์‚ฌ์ง„ --

Inner class๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” model ์ผ ๋•Œ

Inner class๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‚œ๋…ํ™”์—์„œ ์ œ์™ธ๋ฅผ ํ•ด์ฃผ๋”๋ผ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•ˆ์— ์žˆ๋Š” ํด๋ž˜์Šค๋Š” ๋‚œ๋…ํ™”๊ฐ€ ๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-- ์ฝ”๋“œ -- ์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ Inner class๋„ ๋‚œ๋…ํ™”์—์„œ ์ œ์™ธ๋˜๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

-- ์‚ฌ์ง„ --

์ง !

ํ›„๊ธฐ

์ €์—๊ฒ ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฐฐํฌ๊ฐ€ ์ด๋ฒˆ์ด ์ฒ˜์Œ์ด์—ˆ๋Š”๋ฐ์š”, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๊ฐ€ ํ„ฐ์ ธ์„œ ๊ณ ์ƒ์„ ํ–ˆ์ง€๋งŒ ๊ทธ๋ž˜๋„ ํ•ด๊ฒฐํ•˜๊ณ  ๋‚˜๋‹ˆ ๋งŽ์ด ๋ฐฐ์šด ๊ฒƒ ๊ฐ™์•„ ๋ฟŒ๋“ฏํ•˜๋„ค์š” ใ…Ž