Kotlin에서 HTTP 요청 생성
- Kotlin 프로젝트 생성 및 종속성 추가
-
Retrofit
을 사용하여 Kotlin에서 HTTP 요청 생성 - 자바 표준 라이브러리의 API를 사용하여 Kotlin에서 HTTP 요청 생성
-
Fuel
API를 사용하여 Kotlin에서 HTTP 요청 생성 -
OkHttp
API를 사용하여 Kotlin에서 HTTP 요청 생성 - 결론
HTTP는 웹용 통신 프로토콜이며 웹 서버에서 웹 브라우저로 웹 콘텐츠를 제공하는 역할을 합니다.
웹 콘텐츠는 정적 데이터 또는 동적 데이터일 수 있습니다. 정적 데이터는 페이지에 표시되는 정보가 변경되지 않는 반면 웹 페이지에 표시되는 동적 데이터는 항상 변경됨을 의미합니다.
서버에서 검색된 데이터에는 구조화된 데이터, 이미지 및 비디오 파일이 포함됩니다. 대부분의 애플리케이션은 일반적으로 데이터베이스에서 관리하는 구조화된 데이터로 작업합니다.
데이터베이스에서 웹 클라이언트로 데이터를 가져올 때 일반적인 접근 방식은 안정적인 API를 사용하는 것입니다. Restful API는 HTTP 프로토콜을 통해 다양한 라이브러리를 사용하는 애플리케이션에서 사용되며 웹 클라이언트에 로드됩니다.
이 자습서에서는 Restful API를 사용하는 HTTP 요청을 만드는 데 사용할 수 있는 다양한 방법을 배웁니다. Restful API는 Heroku
에서 호스팅되는 애플리케이션에서 국가 목록을 반환합니다.
Kotlin 프로젝트 생성 및 종속성 추가
IntelliJ 개발 환경을 열고 파일
> 새로 만들기
> 프로젝트
를 선택합니다. 열리는 창에서 프로젝트 name
을 kotlin-http-request
로 입력하고 Language
섹션에서 Kotlin
을 선택한 다음 Build system
섹션에서 Gradle
을 선택합니다.
마지막으로 만들기
버튼을 눌러 프로젝트를 생성합니다.
build.gradle.kts
파일을 열고 다음 코드에 표시된 모든 종속성이 있는지 확인합니다. 이러한 종속성은 HTTP 요청을 생성하는 데 사용할 수 있는 라이브러리를 추가하는 데 도움이 됩니다.
dependencies{
implementation ("com.squareup.retrofit2:retrofit:2.9.0")
implementation ("com.squareup.retrofit2:converter-gson:2.9.0")
implementation ("com.github.kittinunf.fuel:fuel:2.3.1")
implementation ("com.squareup.okhttp3:okhttp:4.10.0")
testImplementation(kotlin("test"))
}
Retrofit
을 사용하여 Kotlin에서 HTTP 요청 생성
Retrofit은 Kotlin 또는 Java로 애플리케이션을 개발할 때 가장 일반적으로 사용되는 라이브러리입니다.
kotlin
폴더 아래에 model
이라는 폴더를 만듭니다. Country.kt
라는 파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.
package model
data class Country(var id: Number,
var countryName: String);
이 코드에서는 서버에서 가져온 국가
개체를 저장하는 데 사용할 데이터 클래스
를 만들었습니다. 클래스에는 서버에서 검색된 개체의 필드와 매핑되는 id
및 countryName
필드가 있습니다.
kotlin
폴더 아래에 service
라는 이름의 폴더를 만듭니다. CountryService.kt
라는 파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.
package service
import model.Country
import retrofit2.Call
import retrofit2.http.GET
interface CountryService {
@GET("/country/all")
fun getAllCountries(): Call<List<Country>>;
}
이 코드에서는 서버에서 모든 국가 List<Country>
를 가져오기 위해 상대 경로 /country/all
에 매핑되는 GET
요청을 생성했습니다. 우리는 서버에서 데이터를 검색할 때 항상 @GET
주석을 사용합니다.
getAllCountries()
메소드는 메소드가 서버에 요청을 하고 응답을 리턴한다는 의미인 Call
을 리턴합니다.
CountryServiceImpl.kt
라는 파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.
package service
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class CountryServiceImpl {
fun getCountryServiceFactory(): CountryService{
val retrofit = Retrofit.Builder()
.baseUrl("https://countryapp254.herokuapp.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
return retrofit.create(CountryService::class.java);
}
}
이 클래스는 getAllCountries()
메서드에서 제공한 상대 URL을 빌더에 제공된 baseUrl()
로 매핑하여 서버에서 데이터를 가져오는 주요 작업을 수행합니다.
addConverterFactory()
는 Retrofit
에서 제공하는 Gson
라이브러리를 사용하여 Kotlin 개체를 역직렬화하는 데 도움이 됩니다.
kotlin
폴더 아래에 Main.kt
파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.
import model.Country
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import service.CountryService
import service.CountryServiceImpl
fun getAllCountriesUsingRetrofit(){
val countryService: CountryService =
CountryServiceImpl().getCountryServiceFactory();
val call: Call<List<Country>> = countryService.getAllCountries();
call.enqueue(object : Callback<List<Country>> {
override fun onResponse(call: Call<List<Country>>,
response: Response<List<Country>>
) {
response.body()?.forEach(::println)
}
override fun onFailure(call: Call<List<Country>>, t: Throwable) {
t.printStackTrace();
}
})
}
fun main(){
getAllCountriesUsingRetrofit();
}
위의 코드는 Retrofit 코드가 작동하는지 확인합니다. CountryService
를 반환하는 getCountryServiceFactory()
를 호출합니다.
CountryService
인스턴스는 getAllCountries()
메서드를 호출하는 데 도움이 됩니다. 이 메서드는 데이터에 대한 응답이 포함된 Call
을 반환합니다.
서버에서 검색된 국가를 가져오려면 enqueue()
메서드를 호출하고 CallBack
의 onResponse()
및 onFailure()
메서드를 구현합니다.
enqueue()
메서드는 비동기식으로 실행되며 콘솔 애플리케이션을 생성하고 있기 때문에 body()
응답을 콘솔에 기록하기만 하면 됩니다. 이 코드를 실행하고 출력이 아래와 같은지 확인하십시오.
[{"id":18,"countryName":"Kenya"},
{"id":20,"countryName":"Tanzania"},
{"id":21,"countryName":"Ethiopia"},
{"id":22,"countryName":"Malawi"},
{"id":23,"countryName":"Country"},
{"id":24,"countryName":"Country"},
{"id":25,"countryName":"Kenya"},
{"id":26,"countryName":"Country"},
{"id":27,"countryName":"USA"},
{"id":28,"countryName":"USA"},
{"id":29,"countryName":"Kenya"},
{"id":30,"countryName":"Kenya"}]
자바 표준 라이브러리의 API를 사용하여 Kotlin에서 HTTP 요청 생성
Main.kt
파일의 이전 예제에 주석을 달고 다음 코드를 복사하여 그 뒤의 파일에 붙여넣습니다.
import java.net.HttpURLConnection
import java.net.URL
fun getCountriesUsingHttpURLConnection(){
var url = URL("https://countryapp254.herokuapp.com/country/all");
with(url.openConnection() as HttpURLConnection){
inputStream.bufferedReader().use {
it.lines().forEach(::println)
}
}
}
fun main(){
getCountriesUsingHttpURLConnection();
}
URLConnection
은 java.net
패키지의 Java 표준 라이브러리 API이며 Kotlin에서 HTTP 요청을 만드는 데 사용할 수 있습니다.
HttpURLConnection
은 URLConnection
의 인스턴스이며 이를 사용하여 서버에 대한 HTPP 연결을 생성합니다. with()
함수는 설정된 연결을 사용하여 서버에 단일 요청을 만들고 함수 내부의 코드를 실행하고 결과를 반환합니다.
함수 내부의 inputStream
은 bufferedReader()
를 사용하여 설정된 연결에서 데이터를 읽고 use()
확장 기능은 서버에서 읽은 데이터를 콘솔에 기록하는 데 도움이 됩니다. 이 코드를 실행하고 출력이 아래와 같은지 확인하십시오.
[{"id":18,"countryName":"Kenya"},
{"id":20,"countryName":"Tanzania"},
{"id":21,"countryName":"Ethiopia"},
{"id":22,"countryName":"Malawi"},
{"id":23,"countryName":"Country"},
{"id":24,"countryName":"Country"},
{"id":25,"countryName":"Kenya"},
{"id":26,"countryName":"Country"},
{"id":27,"countryName":"USA"},
{"id":28,"countryName":"USA"},
{"id":29,"countryName":"Kenya"},
{"id":30,"countryName":"Kenya"}]
Fuel
API를 사용하여 Kotlin에서 HTTP 요청 생성
Main.kt
파일의 이전 예제에 주석을 달고 다음 코드를 복사하여 그 뒤의 파일에 붙여넣습니다.
import com.github.kittinunf.fuel.httpGet
import com.github.kittinunf.result.Result
fun getCountriesUsingFuel(){
val request = "https://countryapp254.herokuapp.com/country/all"
.httpGet()
.responseString{ request, response, result ->
when(result){
is Result.Failure -> {
println(result.getException());
}
is Result.Success -> {
println(result.get())
}
}
}
request.join();
}
fun main(){
getCountriesUsingFuel();
}
Fuel
API는 애플리케이션에서 HTTP 요청을 생성하는 데 사용할 수 있는 또 다른 접근 방식입니다. 이 예제에서는 String
클래스의 확장 함수인 httpGet()
을 호출하여 GET
요청을 하고 있음을 나타냅니다.
문자열은 서버에서 데이터를 가져오는 데 사용되는 RESTful API를 제공합니다.
httpGet()
메서드는 responseString()
메서드를 호출하여 핸들러를 인수로 전달하여 요청을 Charset.UTF-8
로 비동기적으로 실행할 수 있는 Request
를 반환합니다.
핸들러는 Request
, Response
및 Result
유형의 세 가지 매개변수를 수락하고 어떤 값도 반환하지 않음을 의미하는 Unit
을 반환하는 람다 함수입니다. 결과
에 관심이 있으므로 실패
및 성공
을 호출하여 각각 애플리케이션이 실패하거나 성공했을 때 결과를 제공합니다.
when()
메서드는 Java의 switch
와 동일하며 요청이 성공 또는 실패했을 때 다른 결정을 내리는 데 도움이 됩니다. 이 코드를 실행하고 출력이 아래와 같은지 확인하십시오.
[{"id":18,"countryName":"Kenya"},
{"id":20,"countryName":"Tanzania"},
{"id":21,"countryName":"Ethiopia"},
{"id":22,"countryName":"Malawi"},
{"id":23,"countryName":"Country"},
{"id":24,"countryName":"Country"},
{"id":25,"countryName":"Kenya"},
{"id":26,"countryName":"Country"},
{"id":27,"countryName":"USA"},
{"id":28,"countryName":"USA"},
{"id":29,"countryName":"Kenya"},
{"id":30,"countryName":"Kenya"}]
OkHttp
API를 사용하여 Kotlin에서 HTTP 요청 생성
Main.kt
파일의 이전 예제에 주석을 달고 다음 코드를 복사하여 그 뒤의 파일에 붙여넣습니다.
import okhttp3.OkHttpClient
import okhttp3.Request
private val httpClient = OkHttpClient()
fun getCountriesUsingOkHttp() {
val countriesRequest = Request.Builder()
.url("https://countryapp254.herokuapp.com/country/all")
.build();
httpClient.newCall(countriesRequest).execute().use { countryResponse ->
if (!countryResponse.isSuccessful) throw RuntimeException("status code $countryResponse");
println(countryResponse.body!!.string())
}
}
fun main(){
getCountriesUsingOkHttp();
}
OkHttpClient()
는 서버에 HTTP 요청을 하는 데 사용할 수 있는 공유 API 인스턴스를 생성합니다.
공유 인스턴스는 각 클라이언트에 자체 스레드 풀과 연결 풀이 있기 때문에 생성되며 메모리를 절약하고 대기 시간을 줄이기 위해서는 이를 재사용하는 것이 중요합니다.
Builder()
는 제공된 URL
을 사용하여 Request
를 생성하고 서버에 대한 요청을 준비하기 위해 OkHttpClient()
인스턴스에서 newCall()
메서드를 호출하고 Request
를 전달합니다. 이 메서드의 인수로.
newCall()
메서드는 Call
을 반환하고 execute()
메서드를 호출하여 Response.body()
에서 요청에 대한 응답을 얻습니다. use()
확장 기능은 응답 데이터에 액세스하고 콘솔에 기록하는 데 도움이 됩니다.
use()
함수는 예외 발생 여부에 관계없이 결과를 닫습니다. 이 코드를 실행하고 출력이 아래와 같은지 확인하십시오.
[{"id":18,"countryName":"Kenya"},
{"id":20,"countryName":"Tanzania"},
{"id":21,"countryName":"Ethiopia"},
{"id":22,"countryName":"Malawi"},
{"id":23,"countryName":"Country"},
{"id":24,"countryName":"Country"},
{"id":25,"countryName":"Kenya"},
{"id":26,"countryName":"Country"},
{"id":27,"countryName":"USA"},
{"id":28,"countryName":"USA"},
{"id":29,"countryName":"Kenya"},
{"id":30,"countryName":"Kenya"}]
결론
이 튜토리얼에서는 Kotlin에서 HTTP 요청을 생성하는 데 활용할 수 있는 다양한 방법을 배웠습니다. 우리가 다룬 접근 방식에는 Retrofit
사용, Java 표준 라이브러리의 API 사용, Fuel
API 사용, 마지막으로 OkHttp
API 사용이 포함됩니다.
이것이 우리가 사용할 수 있는 유일한 접근 방식은 아닙니다. Volley
API와 같이 사용할 수 있는 다른 접근 방식이 있습니다. 사용 사례에 적합한 방법을 자유롭게 사용하십시오.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub