앱에 가입한 유저가 공식적으로 제공하는 가이드라인을 사용하지 않고 본인에 상황에 맞는 커스텀 가이드라인을 사용하고 싶을 때를 위해 API와 UI를 구성했다.
Swagger에서 API 가이드를 보고 요청할 값들을 post형태로 통신을 시도했는데 Error 500이 발생했고, 여러 가지 값을 바꾸거나 해도 해결되지 않았다.
새벽까지 지속적으로 팀원들과 소통을 했는데
내가 정말 너무나도 간과한 사실이 있었다..
세션과 쿠키에 대한 구현을 아예 생각을 못했었다.
말도 안되는 일을 해버린 것이다..
당연하게도 서버는 유저들을 구분하고 관리하기 위해 세션, 쿠키를 사용하는데 나는 로그인을 API로 요청해서 정상적인 값이 있느냐, 없느냐만 확인하고는 '아 로그인 잘 되는구나?' 하고 넘겨버린 것이다..
새벽에도 급하게 얼른 세션에 관련된 부분을 붙였다.
// MyOkHttpClient 싱글톤 객체
object MyOkHttpClient {
// CookieManager의 private 인스턴스를 생성
private val cookieManager = CookieManager().apply {
// 쿠키 정책을 ACCEPT_ALL로 설정해서 모든 쿠키를 제한 없이 허용하는 것을 의미합니다.
setCookiePolicy(CookiePolicy.ACCEPT_ALL)
}
// OkHttpClient의 인스턴스를 싱글톤의 속성으로 정의
val instance: OkHttpClient = OkHttpClient.Builder()
// OkHttpClient를 사용할 때 JavaNetCookieJar와 이전에 생성한 CookieManager를 사용하도록 설정
.cookieJar(JavaNetCookieJar(cookieManager))
// OkHttpClient 인스턴스를 빌드
.build()
}
파일을 하나 새로 만들고 MyOkHttpClient를 만들었다.
여러 파일들에서 접근해야하므로 싱글톤 패턴을 이용해서 만들었다.
소프트웨어 공학에서 다양한 패턴에 대해 학습했고 그 때 싱글톤 패턴도 배웠는데 실제로 사용해보는 것은 처음이었다.
실제로 싱글톤을 사용해보니 정말 편했다. 전 범위에서 하나의 인스턴스만 생성되고 그 하나만 사용하고 관리하면 되니까.
[기존] 모든 API 통신
client.newCall(request).enqueue(object : Callback
[변경] 유저와 상호작용을 하는 API 통신
MyOkHttpClient.instance.newCall(request).enqueue
정상적으로 서버와 통신이 가능했다!!