async/await 의 장점
- linear
- concise
- native error handling
completion handler 를 사용한 코드

control flow 가 앞뒤로 왔다갔다 따라가기 힘듬
- 쉽게 읽기 어려운 코드가 된다.
- 지금은 1단이라 괜찮지만 내부에서 다시 dataTask 에 completionHandler 를 전달하는 코드를 작성한다면???
에러인스턴스(Error) 를 가지고 에러 핸들링을 직접 해주어야함
- 에러 전달을 빼먹어도 컴파일 에러가 발생하지 않음
- 또한 completionHandler 에 error 를 넣어서 호출하는 방식을 사용하기 때문에
- 이후 return 을 빼먹어도 컴파일 에러가 발생하지 않음
하나의 코드 덩어리지만 서로 다른 쓰레드에서 실행되는 문제
- dataTask 에 전달한 completion handler 는
session delegate queue
에서 실행된다.