- 아래 총 5 문제에 대한 해설을 작성한 뒤 Pull Request를 날려주세요.
- 문제 해설에 대한 정해진 양식은 없으며, 최대한 자세히 해설해주시면 좋습니다.
- 문제 유형은 해당 코스에서 다룰 주제들을 포함하고 있으니 완벽히 이해하시면 코스를 수강하는데 큰 도움이 될 것입니다.
*문의 사항은 사전 과제 Repository의 Issue로 등록해 주세요.
뇌피셜로 작성하였습니다ㅠ
- (1) 동기와 비동기 프로그래밍에 대한 차이점을 설명해주세요.
- 동기적으로 프로그래밍은 작성된 순서에 따라 순차적으로 기능을 수행하게 됩니다.
- 동기를 맞추기 위해서 스레드는 경우에 따라 busy waiting을 수행하며 결과값을 확인하게 되기도 합니다.
- 이와 달리 비동기 프로그램은 순서와 무관하게 기능을 수행할 수 있게 됩니다. (스레드 풀의 크기나 동작 가능한 워커 스레드의 갯수에 따라)
- 비동기적으로 하나의 기능을 수행하도록 명령을 내리고 다른 스레드에게 일을 위임한 다음, 해당 스레드는 이와 무관하게 다른 로직을 수행할 수 있습니다.
- 동기적으로 프로그래밍은 작성된 순서에 따라 순차적으로 기능을 수행하게 됩니다.
- (2) 블로킹과 논블로킹의 차이점을 설명해주세요.
- 블로킹은 스레드의 작업이 중단(blocked, sleep 등)되는 상태를 말합니다.
- 시간이 오래 걸리는 I/O 작업 등이 발생할 때, 이 작업의 결과물을 기다려야 하는 스레드는 cpu 사용권한을 빼앗기고 blocked 될 수 있습니다.
- 논블로킹의 경우 스레드가 시간이 걸리는 작업을 수행하게 되더라도, 블로킹 되지 않고 다른 작업을 수행할 수 있습니다.
- (3) 본인이 주로 사용하는 언어에서 비동기 프로그래밍을 사용하는 방법을 설명해주세요.
- 스레드와 콜백, concurrent api 혹은 reactive 기술을 활용하여 비동기적인 동작을 구현할 수 있다.
- 워커 스레드는 비동기적인 작업을 수행하게 되면, 결과를 기다리지 않고 바로 다음 작업을 받아서 처리한다. 이후 결과물은 그 때 가용한 워커 스레드를 통해 처리한다.
- (4) 메세지 큐를 쓰는 이유에 대하여 2가지 예시를 서술해주세요.
- 메세지 큐를 활용해서 다량의 트래픽 중 동기적으로 처리해야 하는 동작을 제어할 수 있다.
- 서버의 가용한 범위만큼 요청 이벤트의 수를 제어할 수 있다.
- (5) 본인이 작성한 서버 코드가 있는 github repo 주소를 제출해주세요. (CRUD 기능을 모두 포함하여야 하며, 서버에 대한 설명을 README에 작성해주시면 더욱 좋습니다.)
- (6 - Optional) 해당 수업을 통해 꼭 배우고 싶은 주제 또는 지식이 있다면 자유롭게 서술해주세요.