[Swift][Foundation] GCD에 대하여 (1)

Uno·2021년 10월 2일
0

GCD

목록 보기
1/1


iOS 앱 개발을 하면, 어느 순간 이 개념을 만나게 됩니다.
그게 언제냐면,

Networking 을 통한 something을 할 떄!

URLSession이 내부적으로 비동기처리를 하고 있습니다. 그리고 그 결과를 UI 업데이트를 하려고하면! 에러가 뙇! 하고 나타나는 경험을 합니다. 그러다가 그 에러를 복붙해서 검색해보면, 코드 몇 줄로 문제를 해결할 수 있습니다. 그 코드 몇 줄에 대해서 개념을 알아보고자 합니다.


GCD에 대하여

Dispatch 란 무엇이냐.
Apple said,

Execute code concurrently on multicore hardware by submitting work to dispatch queues managed by the system.
-> 시스템에서 관리하는 dispatch queue에 작업을 보내 멀티코어 하드웨어에 “동시에[“ 코드를 실행합니다. (라는 프레임워크)

공식문서 링크 : Apple Developer Documentation

애플에서 위처럼 정의하고 있습니다. 여기서 주목해야할 표현을 보면 아래와 같습니다.

  • 시스템에서 관리
  • Dispatch Queue에 작업을 보냄
  • 멀티코어
  • 동시에

이 표현만 봐도 느낌이 오시나요?
시스템에서 관리하는 친구다. 그리고 이것들을 관리하도록 하려면 Dispatch 대기열에 보내야한다. 근데 언제사용하냐? 멀티코어가 있는 하드웨어에서 동시에 무언가 처리할 때, 사용한다.

GCD는 동시에 테스크를 처리해야할 때, 사용한다.



GCD ? Dispatch?

Q. 아니 우노, 지금 GCD 보려고 왔는데 왜 Dispatch를 설명해주시나요?

왜냐하면, 바로 다음 글에 그 이유가 있습니다.

공식문서를 보면 다음처럼 설명하고 있습니다

GCD(Grand Central Dispatch)라고도 하는 Dispatch에는 macOS, iOS, watchOS 및 tvOS의 멀티코어 하드웨어에서 동시 코드 실행 지원에 대한 체계적이고 포괄적인 개선 사항을 제공하는 언어 기능, 런타임 라이브러리 및 시스템 개선 사항이 포함되어 있습니다.

GCD == Dispatch 라고 보셔도 됩니다.
애플이 그랬음.

이후 설명을 요약하면,

BSD subsystem (Unix의 베리에이션), Core Foundation, Cocoa APIs 들은 GCD 기능을 통해서 애플리케이션을 더욱 “빠르고”, “효율적이며” 그리고 “반응을 잘하도록” 기능확장을 할 수 있습니다. GCD는 시스템 레벨에서 동작합니다. 그리고 사용가능한 시스템 리소스에 맞게 알아서 잘 테스크를 분배합니다.
(조금 제 해석이 있으니 원문을 원하시면 위에 적은 링크에서 보세요!)

제 언어로 좀 바꿔볼게요.

  • 애플리케이션의 “성능”을 향상시켜준다.
  • 그리고 그건 GCD를 이용하면 알아서 하드웨어가 가지고 있는 리소스에 맞게 잘 처리해준다.
    그러면 내가할 일은 모다?
    -> GCD를 어떻게 사용하는지만 알면 된다! 그 이후는 프레임워크에서 해준다!

정리하겠습니다.

GCD(=Dispatch)는 애플리케이션에서 비동기 처리를 할 수 있도록 도와주는 프레임 워크이다.



Topics에 대하여

그리고 Topics 을 보겠습니다.
(Topics를 모두 확인할 필요는 없지만 카테고리는 봐둘 필요가 있습니다. 나중에 필요할 때, 떠오를 겁니다.제발)

  • Queues and Tasks : 대기열과 테스크에 대한 클래스나 문서가 있겠죠. 이것들을 우리가 조작할 겁니다.
  • Thread Scheduling : 쓰레드를 우리가 조작할 수 있도록 구성해두었군요!
  • System Event Monitoring : 시스템에서 발생하는 이벤트들을 우리가 확인할 수 있다고 하네요. 이렇게 되면, 어느 부분에서 성능저하가 일어나는지 혹은 디버깅할 때 도움이 될 것 같습니다.
  • Task Synchronization : 테스크를 동기화? 그래서 조금 찾아보았더니 세마포어에 관련된 내용입니다. (세마포어에 관한 설명은 생략할게요. 그냥 퉁쳐서 말씀드리면, 멀티쓰레딩(지금 GCD와 관련개념)에서 발생하는 문제가 있는데, 이걸 해결하는 하나의 방법입니다.)
  • Time Constructs : 시간 구성? 이게 무슨말인가.. 싶은데, 내용을보면, 아까부터 제가 자꾸 무언가를 “보낸다(dispatch)” 라고 했죠. 그 보내는 시간을 관리와 관련된 객체들이 있습니다. 시간을 관리하면 단순하죠? 시작 -> 진행 -> 종료 이 3 단계를 다룬다는 뜻입니다.
  • Dispatch Objects : dispatch와 관련된 객체들이 있습니다.

정리하겠습니다.

GCD에서는 Task를 관리하고 대기열에 추가하는 동작 그리고 그 과정에서 필요한 관리들을 할 수 있다.



Q. GCD가 무엇인가?
Q. GCD는 왜 사용해야하는가?
Q. GCD 통해서 어떤 것들을 할 수 있는가?

위 질문에 답할 수 있도록 글을 구성했습니다!

자 이제 기초적인 키워드들은 한 번씩 본 것 같습니다. 이후에 글은, 좀더 구체적인 사용방법이나, 사용 사례들을 녹여서 글을 작성하겠습니다.

profile
iOS & Flutter

0개의 댓글