๐ฒ ์ค๋์ ๊ฐ๋ฐ ์ผ์ง
- postman์ผ๋ก ์๋ฒ ํต์ ํ
์คํธ ํ์ ๋ ์ ๋๋๋ฐ ์๋๋ก์ด๋์์ ํ
์คํธํ๋ฉด ์ ๋ ๋๋ ๋ฌด์กฐ๊ฑด ๋ด๊ฐ ์ฝ๋๋ฅผ ์๋ชป์ง ๊ฑฐ๋คโฆ
- usecase, repository, datasource, api ๋ญ ์๋ชปํ๊ฑฐ ํ๋๋ ์๋๋ฐ ์ ์ ๋์ง ํ์ง๋ง ์๊ณ ๋ณด๋ ์์ฒญ api ์ฃผ์๊ฐ ์๋ชป ์ ๋ ฅํ์๋ค..
- flow๋ฅผ ์ฌ์ฉํ ๋๋ emit์ผ๋ก ๊ฐ์ ์ถ๋ ฅํ๋์ง ๊ผญ ํ์ธํ์.
- Dto ๋ณ์๋ช ๋ ์ ํ์ธํ์โฆ
- Hilt์์ applicationContext๋ฅผ ์ฌ์ฉํด์ผ ํ ๋๋ ์ด๋
ธํ
์ด์
์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
1 2 3 4 5
@Provides @Singleton fun provideXAccessTokenInterceptor(@ApplicationContext context: Context): XAccessTokenInterceptor { return XAccessTokenInterceptor(UserSharedPreference(context)) }
- SharedPreference ์ฌ์ฉํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.
์๋ retrofit์์ header๋ฅผ ๋ถ์ผ ๋ ์ง์ ๋ถ์ฌ์ค์ผ ํ์ง๋ง Interceptor๋ฅผ ์ฌ์ฉํ๋ฉด ํต์ ๊ณผ์ ์์ Interceptor๊ฐ ์๋์ผ๋ก Header๋ฅผ ๋ถ์ด๊ฒ ํ ์ ์๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
class XAccessTokenInterceptor @Inject constructor( private val sharedPref: UserSharedPreference ): Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val token = sharedPref.getStringFromPreference("jwt") Log.d(TAG, "intercept token: $token") val request = chain.request().newBuilder() .addHeader("JWT-AUTHENTICATION", token) .build() Log.d(TAG, "intercept headers: ${request.headers} ") Log.d(TAG, "intercept body : ${request.body} ") return chain.proceed(request) } }
์ด๋ ๊ฒ Interceptor๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ
1 2 3 4 5 6 7 8 9 10 11 12 13
@Provides @Singleton fun provideOkHttpClient(xAccessTokenInterceptor: XAccessTokenInterceptor): OkHttpClient = OkHttpClient.Builder().addNetworkInterceptor(xAccessTokenInterceptor).build() @Provides @Singleton fun provideRetrofitInstance(gson: Gson, client: OkHttpClient): Retrofit = Retrofit.Builder() .baseUrl(SERVER_URL) .client(client) .addConverterFactory(GsonConverterFactory.create(gson)) .build()
์ด๋ฐ ์์ผ๋ก Retrofit ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ client๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.