- 아래 총 5 문제에 대한 해설을 작성한 뒤 Pull Request를 날려주세요.
- 문제 해설에 대한 정해진 양식은 없으며, 최대한 자세히 해설해주시면 좋습니다.
- 문제 유형은 해당 코스에서 다룰 주제들을 포함하고 있으니 완벽히 이해하시면 코스를 수강하는데 큰 도움이 될 것입니다.
*문의 사항은 사전 과제 Repository의 Issue로 등록해 주세요.
-
(1) 동기와 비동기 프로그래밍에 대한 차이점을 설명해주세요.
-동기는 말 그대로 동시에 일어난다는 뜻이다. 요청과 그 결과가 동시에 일어나며 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어진다. 순서에 맞춰 진행되는 장점이 있지만, 여러가지 요청을 동시에 처리할 수 없다. 설계가 매우 간단하고 직관적이지만, 결과가 주어질 때 까지 아무것도 못하고 대기해야 하는 단점이 있다.
- 비동기는 동시에 일어나지 않는다는 뜻이다. 요청과 결과가 동시에 일어나지 않는 것이며 하나의 요청에 따른 응답을 즉시 처리하지 않아도, 그 대기 시간동안 또 다른 요청에 대해 처리 가능한 방식이다. 여러 개의 요청을 동시에 처리 할 수 있는 장점이 있지만, 동기방식보다 속도가 떨어지며 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간동안 작업을 할 수 있으므로 자원을 효율적으로 사용 할 수 있다는 장점이 있다.
=> 결론적으로 동기는 추구하는 같은행위(목적)가 동시에 이루어지며, 비동기는 추구하는 행위(목적)가 다를 수도 있고, 동시에 이루어지지도 않는다.
-
(2) 블로킹과 논블로킹의 차이점을 설명해주세요. 블로킹(Blocking) 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 자신의 작업을 멈추고 해당 작업을 기다렸다가 다시 자신의 작업을 시작한다. 논 블로킹(Non-Blocking) 다른 주체의 작업에 관련 없이 자신의 작업을 하는 것을 의미한다.
-
(3) 본인이 주로 사용하는 언어에서 비동기 프로그래밍을 사용하는 방법을 설명해주세요. Java의 경우 대표적으로 Stream 등 이미 많은 비동기 프로그램이 구현되어 있습니다. 직접 구현을 할때는
Thread
,Future
를 사용해서 구현할 수 있습니다. -
(4) 메세지 큐를 쓰는 이유에 대하여 2가지 예시를 서술해주세요. 데이터 처리의 복잡성을 줄이고, 의존성을 최소화를 위해 사용합니다.
- 각 서비스를 분리할 수 있어 느슨한 의존성을 만들 수 있어 MSA 환경에서 많이 사용됩니다.
- Kafka의 경우 End to End 방식의 아키텍처를 Producer + Consumer 아키텍처로 변경해 구조가 단순하게 변경됩니다. 일괄처리를 위해 사용하는 경우도 있습니다.
-
(5) 본인이 작성한 서버 코드가 있는 github repo 주소를 제출해주세요. (CRUD 기능을 모두 포함하여야 하며, 서버에 대한 설명을 README에 작성해주시면 더욱 좋습니다.) https://github.com/thislast/comp1500.git
-
(6 - Optional) 해당 수업을 통해 꼭 배우고 싶은 주제 또는 지식이 있다면 자유롭게 서술해주세요. 현재 aws를 이용한 프로젝트를 진행중에 있습니다. 비용측면의 detail적인 배움과 aws의 효과적인 서비스 픽에대해 배우고싶습니다. ec2와 RDS dynamoDB에대해 자세히 배우고싶습니다