FAQ
FAQ
"Ktor"라는 이름은 무엇을 의미하나요?
Ktor라는 이름은 ctor(생성자, constructor)라는 약어에서 유래되었으며, 첫 글자를 Kotlin의 'K'로 바꾼 것입니다.
질문, 버그 보고, 연락, 기여, 피드백 제출 등은 어떻게 하나요?
Support 페이지에서 이용 가능한 지원 채널에 대해 자세히 알아보세요. How to contribute 가이드는 Ktor에 기여할 수 있는 다양한 방법을 설명합니다.
CIO는 무엇을 의미하나요?
CIO는 Coroutine-based I/O(코루틴 기반 I/O) 의 약자입니다. 보통 외부 JVM 기반 라이브러리에 의존하지 않고 Kotlin과 코루틴(Coroutines)을 사용하여 IETF RFC나 다른 프로토콜을 구현하는 로직을 가진 엔진을 의미합니다.
해결되지 않은(빨간색) Ktor 임포트(import) 문제를 어떻게 해결하나요?
해당하는
Ktor는 서버가 안정적으로 종료(graceful shutdown)될 수 있도록 IPC 시그널(예: SIGTERM 또는 SIGINT)을 캐치하는 방법을 제공하나요?
EngineMain을 실행 중이라면 자동으로 처리됩니다. 그렇지 않으면 직접 처리해야 합니다. JVM의 Runtime.getRuntime().addShutdownHook 기능을 사용할 수 있습니다.
프록시 뒤에 있는 클라이언트 IP를 어떻게 가져오나요?
프록시가 적절한 헤더를 제공하고
call.request.origin 속성은 원래 호출자(프록시)에 대한 연결 정보를 제공합니다. main 브랜치의 최신 커밋을 어떻게 테스트할 수 있나요?
jetbrains.space에서 Ktor 나이틀리 빌드(nightly build)를 받을 수 있습니다. Early Access Program에서 더 자세한 내용을 확인하세요.
사용 중인 Ktor 버전을 어떻게 확인할 수 있나요?
Ktor 버전이 포함된 Server 응답 헤더를 보내는
라우트가 실행되지 않습니다. 어떻게 디버깅하나요?
Ktor는 라우팅 결정을 문제 해결하는 데 도움이 되는 추적(tracing) 메커니즘을 제공합니다. Tracing routes 섹션을 확인하세요.
'Response has already been sent' 오류를 어떻게 해결하나요?
이 오류는 사용자 본인 또는 플러그인이나 인터셉터(interceptor)가 이미 call.respond* 함수를 호출했으며, 이를 다시 호출하려고 함을 의미합니다.
'No configuration setting found for key ktor' 오류를 어떻게 해결하나요?
이것은 Ktor가
resources 폴더에 설정 파일이 있는지, 그리고 resources 폴더가 제대로 지정되었는지 확인하세요. 작동하는 프로젝트를 기반으로 시작하려면 Ktor 프로젝트 생성기 또는 IntelliJ IDEA Ultimate용 Ktor 플러그인을 사용하여 프로젝트를 구성하는 것이 좋습니다. 자세한 내용은 Android에서 Ktor를 사용할 수 있나요?
네, Ktor 서버와 클라이언트는 적어도 Netty 엔진을 사용하면 Android 5 (API 21) 이상에서 작동하는 것으로 알려져 있습니다.
왜 'CURL -I'가 '404 Not Found'를 반환하나요?
CURL -I는 HEAD 요청을 수행하는 CURL --head의 별칭입니다. 기본적으로 Ktor는 GET 핸들러에 대해 HEAD 요청을 처리하지 않습니다. 이 기능을 활성화하려면
'HttpsRedirect' 플러그인을 사용할 때 발생하는 무한 리다이렉트(infinite redirect) 문제를 어떻게 해결하나요?
가장 가능성 있는 원인은 백엔드가 리버스 프록시(reverse proxy) 또는 로드 밸런서(load balancer) 뒤에 있고, 이 중개 장치가 백엔드에 일반 HTTP 요청을 보내고 있기 때문입니다. 따라서 Ktor 백엔드 내부의 HttpsRedirect 플러그인은 이를 일반 HTTP 요청으로 간주하고 리다이렉트로 응답하게 됩니다.
보통 리버스 프록시는 원래 요청에 대한 정보(예: HTTPS 여부 또는 원래 IP 주소)를 설명하는 헤더를 보내며,
Kotlin/Native에서 해당 엔진을 사용하기 위해 Windows에 'curl'을 설치하는 방법은 무엇인가요?
Curl 클라이언트 엔진은 curl 라이브러리 설치가 필요합니다. Windows의 경우 MinGW/MSYS2 curl 바이너리 사용을 고려해 볼 수 있습니다.
MinGW/MSYS2에 설명된 대로 MinGW/MSYS2를 설치합니다.
다음 명령어를 사용하여
libcurl을 설치합니다:shellMinGW/MSYS2를 기본 위치에 설치했다면,
PATH환경 변수에 C:\msys64\mingw64\bin\ 를 추가하세요.
'NoTransformationFoundException'을 어떻게 해결하나요?
NoTransformationFoundException은 수신된 본문(received body)에 대해 결과(resulted) 타입에서 클라이언트가 기대하는(expected) 타입으로의 적절한 변환을 찾을 수 없음을 나타냅니다.
요청의
Accept헤더가 원하는 콘텐츠 타입을 지정하고 있는지, 그리고 서버 응답의Content-Type헤더가 클라이언트 측에서 기대하는 타입과 일치하는지 확인하세요.작업 중인 특정 콘텐츠 타입에 필요한 콘텐츠 변환을 등록하세요.
클라이언트 측에서 ContentNegotiation 플러그인을 사용할 수 있습니다. 이 플러그인을 사용하면 다양한 콘텐츠 타입에 대해 데이터를 직렬화(serialize) 및 역직렬화(deserialize)하는 방법을 지정할 수 있습니다.
kotlin필요한 모든 플러그인을 설치했는지 확인하세요. 누락되었을 수 있는 기능들:
- 클라이언트 WebSockets 및 서버 WebSockets
- 클라이언트 ContentNegotiation 및 서버 ContentNegotiation
- Compression
