본문 바로가기

프로그래밍/Android

[하톡시그널] Retrofit으로 서버와 연결하기

처음으로 안드로이드에서 서버와 연결하는 과정

이슈 1. http와 통신하기

현재 서버가 http로 올라가 있었는데,

private val moshi = Moshi
    .Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

private val retrofit = Retrofit
    .Builder()
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    .baseUrl(BASE_URL)
    .build()
    
    interface MatchingApiService{
    @POST("/room/entrance")
    suspend fun StartMatch(@Body body: MatchingRequest): Response<MatchingResponse>

}

object MatchingApi {
    val retrofitService: MatchingApiService by lazy {
        retrofit.create(MatchingApiService::class.java)
    }
}

위와 같이 기본 설정을 구성했다.
interface를 사용하고 object로 구성하는 것은 굉장히 깔끔하고 사용성이 좋았다 (구글 강의를 참고했다.)
문제는 서버가 http를 사용하고 있는데, retrofit은 http는 차단하는 것이 default인 듯하다.

private val retrofit = Retrofit
    .Builder()
    .addConverterFactory(MoshiConverterFactory.create(moshi).asLenient())
    .baseUrl(BASE_URL)
    .build()

떄문에 위와 같이 asLenitent() 메소드를 추가해주어야했다.

이슈 2. Response의 type

Post 방식으로 ID와 PW를 서버에 보냈다고 하자.
그리고 서버에서는 (Success: true) 라고 보내준다고 생각했다. 

data class MatchingResponse(
    val success: Boolean
)

그래서 위와 같이 data class를 구성해서 데이터를 받았다!
그러나 서버에서는 success 단일 string으로 보내주고 있었고, 위와 같이 body 타입으로 받으니 오류가 났다.

추후 body로 받지 않고? 단일 string으로 값을 보내주면 어떻게 받아야 할지 알아보자!