[Android]TFT API 이용해서 전적 검색 앱 만들기 - 2

우발자·2025년 9월 23일
1

이번에 혼자 개발을 하다보니 팀의 중요성을 점점 깨닫고 있다..

저 구린 디자인을 보면 생각나는 디자이너분들...(나의 최선이다ㅠㅠ)
가공되지않은 데이터를 프론트에서 사용할 수 있게끔 잘 가공해준 백엔드분들..

많은 분들이 떠올라진다.. 혼자 개발을 하다보니 순전히 개발하는 시간보다 문서를 찾고 데이터 가공하는 시간이 더 오래걸리는 것 같다..

아직 갈길이 멀었지만 현재까지 진행상황과 앞으로의 진행예정인 상황들을 간단하게 공유할려고 한다.


🧑‍💻 API 호출

기초작업을 끝낸 후 서치바를 생성한 뒤 이제 api호출을 하여 데이터를 가져올 일만 남았다. 근데 문서가 모두 영어로 되어있어서 어디서 어떻게 가져와야되는지 찾기가 어려웠다. 그래서 문서를 막 뒤지다가

/riot/account/v1/accounts/by-riot-id/{gameName}/{tagLine}
gameName - 롤에서의 닉네임이다. e.g. hideonbush
tagLine - 롤에서의 태그명이다. e.g. KR1

이 api를 이용하면 해당유저의 uuid를 준다. uuid는 78자의 고유값이며 이걸로 해당 유저의 매치정보를 조회 할 수 있다.

그래서 나의 계획은 매치리스트를 가져와서 해당 매치에 대한 정보를 다시 api를 호출하여 가져온 뒤 보여줄 생각이였다.

tft/match/v1/matches/by-puuid/{puuid}/ids

그래서 우선 매치리스트를 가져오는 api를 사용했다. 해당 결과값은list<String>이다. 안에는 matchId가 들어있고 해당 matchId로

tft/match/v1/matches/{matchId}

이 api를 호출하여 정보를 가져오면 된다.


🏙️ 이미지

데이터는 모두 정상적으로 가져올 수 있었고 문제는 이미지였다.
매치정보에선 이미지 url을 주는 것이 아닌 이미지 id를 줬다.
그 이미지 id를 라이엇이 제공해주는 json파일에서 매칭시켜서 가져와야된다.
이 과정이 난 너무 복잡하다고 느껴서 비정상적인 방법으로 해결하고자 했다.

  fun createImageUrl(id: String, type: String, version: String): String {
        val regex = Regex("""\d+\.\d+""")
        val match = regex.find(version)?.value
        val currentVersion = "$match.1"
        val imageName = when (type) {
            ImageType.CHAMPION.type -> {
                val season = Regex("""TFT(\d+)""").find(id)?.groupValues?.get(1)
                "$id.TFT_Set$season"
            }

            else -> id
        }
        return "https://ddragon.leagueoflegends.com/cdn/$currentVersion/img/$type/$imageName.png"
    }
}

이 로직을 잠깐 설명하자면 매치정보에서 주는 id값과 version값을 어떻게 파싱하여 url로 만들어줬다. 그래서 성공인 줄? 알았지만...

맨위에 보여지는 화면처럼 변수가 있었다. 몇몇의 챔피언들은 저 형식이 아닌 다른 형식이 있다는 점이였다. 그래서 그 예외되는 챔피언들만 예외처리를 해줄수도 있었지만 앞으로 버전이 늘어나면서 그러한 예외처리를 매번 해줄 수는 없을 것 같아서 방법을 바꾸기로 했다.


😵‍💫 해결방법

내가 생각한 해결방법은 우선 최신 버전들을 모아논 json파일이 있다.
https://ddragon.leagueoflegends.com/api/versions.json
이 파일을 스플래시에서 호출하여 최신버전이 있는 지 체크한다. (아마 sharedPreference로?)
체크 한 후 없으면 그대로 메인화면 이동하고 만약 있다면 그 버전의 asset.json파일을 호출하여 다운받는다. 다운을 받고 data class로 파싱한 후 room을 이용하여 로컬에 저장하고 이미지를 가져올 때 room에서 json파일 꺼내 이미지 id를 가져올 예정이다.

물론 3탄에서..

profile
나는 안드로이드 개발자다.

0개의 댓글