Home [TIL] 2022-11-07
Post
Cancel

[TIL] 2022-11-07

๐Ÿ˜ฒ ์˜ค๋Š˜์˜ ๊ฐœ๋ฐœ ์ผ์ง€


  • 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๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

[TIL] 2022-11-04

[TIL] 2022-11-08