이 튜토리얼에서는 IntelliJ IDEA를 사용해, 실행중인 Thread나 Callback을 블록하지 않고 코루틴을 사용하여 네트워크 요청을 수행하는 방법을 살펴볼 것이다.
📖 당신은 Kotlin 기초 구문에 익숙해야 하지만, Coroutines에 대한 사전 지식은 필요하지 않습니다.
당신은 다음의 사항들에 대해 배울 것입니다.
- 네트워크 요청을 하기 위해 일시 중단 함수를 왜 그리고 어떻게 사용해야 하는지
- Coroutines을 사용하여 요청을 동시에 보낼 수 있는 방법
- 서로 다른 Coroutines 간에 Channels를 이용하여 정보를 공유하는 방법
네트워크 요청들을 위해서 Retrofit 라이브러리를 필요로 하지만, 이 튜토리얼에서 보여지는 접근 방식은 보편적이고 Coroutines를 지원하는 다른 라이브러리에서도 비슷하게 작동합니다.
📖 모든 작업들에 대한 솔루션은 프로젝트 저장소의 solutions 브랜치 에서 확인할 수 있습니다.
시작하기 전 준비하기
1. IntellJ IDEA의 최신 버전을 다운로드 후 설치하시오.
2. 프로젝트 템플릿을 Welcome Screen 상의 Get from VCS 를 사용하거나 File | New | Project from Version Control을 사용하여 복제하시오.
다음과 같이 커멘드 라인을 사용해 복제를 할 수도 있습니다 :
git clone https://github.com/kotlin-hands-on/intro-coroutines
GitHub 개발자 토큰 생성
프로젝트 내부에서 GitHub API를 사용할 것이다. 액세스 하기 위해 GitHub 계정 이름과 비밀번호 혹은 토큰을 지정한다. 이중 인증이 활성화 된 경우 토큰이면 충분하다.
GitHub API를 사용하기 위해 자신의 계정으로 새로운 GitHub token을 생성한다.
1. Token에 대한 이름을 지정한다, 예를 들어 coroutines-tutorial :
2. 어떠한 권한도 선택할 필요가 없으며, 페이지 하단의 Generate token을 선택한다.
3. 생성된 토큰을 복사한다.
코드 실행하기
이 프로그램은 선택된 조직의 모든 저장소의 기여자를 로드한다. 조직은 기본적으로 "kotlin" 이지만, 다른 어떠한 조직일 수도 있다. 나중에는 기여 수를 기준으로 유저를 정렬하는 로직을 추가할 것이다.
1. src/contributors/main.kt 파일을 열고 main() 함수를 실행한다. 다음과 같은 윈도우가 보일 것이다.
만약 글자 크기가 너무 작다면 main() 함수 내부에 setDefaultFontSize(18f) 를 적용하면 된다.
2. GitHub 사용자 이름과 토큰(혹은 비밀번호)을 입력합니다.
3. Variant 드롭다운 메뉴에서 BLOCKING 옵션이 선택되었는지를 확인한다.
4. Load contributors를 클릭한다. UI가 약간의 시간 동안 멈춘 다음 기여자들의 목록을 보여줄 것이다.
5. 데이터가 로드 된 것을 확인하기 위해 program output을 연다. 각 성공적인 요청 후에 정보가 로깅된다.
이 로직을 구현하기 위해 blocking request나 callback을 활용한 다양한 방법이 사용될 수 있다. 이러한 솔루션들을 코루틴을 사용한 것과 비교하고 서로 다른 Coroutines 간에 정보를 공유하기 위해 Channels를 사용하는 방법에 대해 알아볼 것이다.
*그림2 는 공식 문서에 포함된 그림이 아닙니다.
이 글은 Coroutines 공식 문서를 번역한 글입니다.
원문 최종 수정 : 2022년 8월 19일
'공식 문서 번역 > Coroutines 공식 문서' 카테고리의 다른 글
Coroutines와 Channels 튜토리얼 - 2. Blocking Requests (0) | 2023.05.20 |
---|---|
IntelliJ IDEA 사용해 Kotlin Flow 디버깅 하기 (0) | 2023.05.18 |
IntelliJ IDEA 사용해서 Coroutine 디버깅 하기 (0) | 2023.05.17 |
Coroutine 공유 상태와 동시성 3편 - Mutex 사용하기, Actors 사용하기 (0) | 2023.05.16 |
Coroutine 공유 상태와 동시성 2편 - Thread-safe한 데이터 구조, 세밀하게 Thread 제한하기, 굵게 Thread 제어하기 (0) | 2023.05.15 |