Skip to content

클라이언트 애플리케이션 생성하기

클라이언트 애플리케이션 생성하기

Ktor는 멀티플랫폼 비동기 HTTP 클라이언트를 포함하고 있어,

요청을 보내고
요청을 보내고 요청 URL, HTTP 메서드, 헤더 및 요청 본문과 같은 다양한 요청 매개변수를 지정하는 방법을 알아봅니다.
응답을 처리
응답을 받고, 응답 본문을 가져오고, 응답 매개변수를 얻는 방법을 알아봅니다.
할 수 있으며,
인증(authentication)
Auth 플러그인은 클라이언트 애플리케이션에서 인증 및 권한 부여를 처리합니다.
,
JSON 직렬화(JSON serialization)
ContentNegotiation 플러그인은 클라이언트와 서버 간의 미디어 타입 협상과 요청 전송 및 응답 수신 시 특정 형식으로 콘텐츠를 직렬화/역직렬화하는 두 가지 주요 목적을 수행합니다.
등과 같은
플러그인
클라이언트 플러그인을 사용하여 로깅, 직렬화, 인증과 같은 일반적인 기능을 추가하는 방법을 알아봅니다.
으로 기능을 확장할 수 있습니다.

이 튜토리얼에서는 요청을 보내고 응답을 출력하는 첫 번째 Ktor 클라이언트 애플리케이션을 만드는 방법을 보여줍니다.

사전 준비 사항

이 튜토리얼을 시작하기 전에, IntelliJ IDEA Community 또는 Ultimate를 설치하세요.

새 프로젝트 생성하기

기존 프로젝트에서 Ktor 클라이언트를 수동으로

생성하고 구성
Ktor 클라이언트를 생성하고 구성하는 방법을 알아봅니다.
할 수 있지만, 처음부터 시작하는 편리한 방법은 IntelliJ IDEA에 내장된 Kotlin 플러그인을 사용하여 새 프로젝트를 생성하는 것입니다.

새 Kotlin 프로젝트를 생성하려면, IntelliJ IDEA를 열고 다음 단계를 따르세요:

  1. 시작 화면에서 New Project를 클릭합니다.

    또는 메인 메뉴에서 File | New | Project를 선택합니다.

  2. New Project 마법사의 왼쪽 목록에서 Kotlin을 선택합니다.

  3. 오른쪽 창에서 다음 설정을 지정합니다.

    IntelliJ IDEA의 새 Kotlin 프로젝트 창
    • Name : 프로젝트 이름을 지정합니다.

    • Location : 프로젝트 디렉토리를 지정합니다.

    • Build system : Gradle이 선택되었는지 확인합니다.

    • Gradle DSL : Kotlin을 선택합니다.

    • Add sample code : 생성된 프로젝트에 샘플 코드를 포함하려면 이 옵션을 선택합니다.

  4. Create를 클릭하고 IntelliJ IDEA가 프로젝트를 생성하고 의존성을 설치할 때까지 기다립니다.

의존성 추가하기

Ktor 클라이언트에 필요한 의존성을 추가해 보겠습니다.

  1. gradle.properties 파일을 열고 Ktor 버전을 지정하기 위해 다음 줄을 추가합니다.

    kotlin

    NOTE

    Ktor의 EAP 버전을 사용하려면 Space 저장소(Space repository)를 추가해야 합니다.

  2. build.gradle.kts 파일을 열고 dependencies 블록에 다음 아티팩트(artifact)들을 추가합니다.

    kotlin
    • ktor-client-core는 핵심 클라이언트 기능을 제공하는 핵심 의존성입니다.
    • ktor-client-cio는 네트워크 요청을 처리하는
      엔진(engine)
      네트워크 요청을 처리하는 엔진에 대해 알아봅니다.
      에 대한 의존성입니다.
  3. build.gradle.kts 파일 오른쪽 상단에 있는 Load Gradle Changes 아이콘을 클릭하여 새로 추가된 의존성을 설치합니다.

    Load Gradle Changes

클라이언트 생성하기

클라이언트 구현을 추가하려면 src/main/kotlin으로 이동하여 다음 단계를 따르세요.

  1. Main.kt 파일을 열고 기존 코드를 다음 구현으로 교체합니다.

    kotlin

    Ktor에서 클라이언트는 HttpClient 클래스로 표현됩니다.

  2. HttpClient.get() 메서드를 사용하여

    GET 요청을 보냅니다
    요청을 보내고 요청 URL, HTTP 메서드, 헤더 및 요청 본문과 같은 다양한 요청 매개변수를 지정하는 방법을 알아봅니다.
    .
    응답(response)
    응답을 받고, 응답 본문을 가져오고, 응답 매개변수를 얻는 방법을 알아봅니다.
    HttpResponse 클래스 객체로 수신됩니다.

    kotlin

    위의 코드를 추가한 후, IDE는 get() 함수에 대해 다음과 같은 에러를 표시합니다: Suspend function 'get' should be called only from a coroutine or another suspend function .

    Suspend 함수 에러

    이를 해결하려면 main() 함수를 중단 함수(suspending function)로 만들어야 합니다.

    TIP

    suspend 함수 호출에 대해 더 자세히 알아보려면 코루틴 기초(Coroutines basics)를 참조하세요.
  3. IntelliJ IDEA에서 정의 옆의 빨간 전구를 클릭하고 Make main suspend를 선택합니다.

    Make main suspend
  4. println() 함수를 사용하여 서버에서 반환한 상태 코드(status code)를 출력하고, close() 함수를 사용하여 스트림을 닫고 이와 관련된 모든 리소스를 해제합니다. Main.kt 파일은 다음과 같아야 합니다:

    kotlin

애플리케이션 실행하기

애플리케이션을 실행하려면 Main.kt 파일로 이동하여 다음 단계를 따르세요.

  1. IntelliJ IDEA에서 main() 함수 옆의 거터(gutter) 아이콘을 클릭하고 Run 'MainKt'를 선택합니다.

    앱 실행
  2. IntelliJ IDEA가 애플리케이션을 실행할 때까지 기다립니다.
  3. IDE 하단의 Run 창에 출력이 표시되는 것을 볼 수 있습니다.

    서버 응답

    서버가 200 OK 메시지로 응답하지만, SLF4J가 StaticLoggerBinder 클래스를 찾는 데 실패하여 기본적으로 NOP(no-operation) 로거 구현을 사용한다는 에러 메시지도 표시될 것입니다. 이는 사실상 로깅이 비활성화되었음을 의미합니다.

    이제 작동하는 클라이언트 애플리케이션이 생성되었습니다. 하지만 이 경고를 해결하고 로깅을 통해 HTTP 호출을 디버깅하려면 추가 단계가 필요합니다.

로깅 활성화하기

Ktor는 JVM에서 로깅을 위해 SLF4J 추상화 레이어를 사용하므로, 로깅을 활성화하려면 Logback과 같은 로깅 프레임워크를 제공해야 합니다.

  1. gradle.properties 파일에 로깅 프레임워크의 버전을 지정합니다.

    kotlin
  2. build.gradle.kts 파일을 열고 dependencies 블록에 다음 아티팩트를 추가합니다.

    kotlin
  3. Load Gradle Changes 아이콘을 클릭하여 새로 추가된 의존성을 설치합니다.
  4. IntelliJ IDEA에서 다시 실행 버튼(intelliJ IDEA rerun icon)을 클릭하여 애플리케이션을 다시 시작합니다.

  5. 더 이상 에러가 표시되지 않아야 하며, IDE 하단의 Run 창에 동일한 200 OK 메시지가 표시될 것입니다.

    서버 응답

    이제 로깅이 활성화되었습니다. 로그를 확인하려면 로깅 구성을 추가해야 합니다.

  6. src/main/resources로 이동하여 다음 구현이 포함된 새로운 logback.xml 파일을 생성합니다.

    xml
  7. IntelliJ IDEA에서 다시 실행 버튼(intelliJ IDEA rerun icon)을 클릭하여 애플리케이션을 다시 시작합니다.

  8. 이제 Run 창의 출력된 응답 위에 트레이스(trace) 로그가 표시되는 것을 볼 수 있습니다.

    서버 응답

TIP

Ktor는
Logging
필요한 의존성: io.ktor:ktor-client-logging
플러그인을 통해 HTTP 호출에 대한 로그를 추가하는 간단하고 명확한 방법을 제공하며, 구성 파일을 추가하면 복잡한 애플리케이션에서 로깅 동작을 세밀하게 조정할 수 있습니다.

다음 단계

이 구성을 더 잘 이해하고 확장하려면,

Ktor 클라이언트를 생성하고 구성하는 방법
Ktor 클라이언트를 생성하고 구성하는 방법을 알아봅니다.
을 살펴보세요.