Skip to content

MintaekCho/wanted-pre-onboarding-challenge-BE-task-December

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

사전과제

(1) 동기와 비동기 프로그래밍에 대한 차이점을 설명해주세요.

<동기(sync)>

동기는 요청과 결과가 항상 동시간에 발생하게 됩니다. client에서 server로 요청을 보냈을 때 얼마의 시간이 걸리든 결과를 받을 때까지 기다려야 합니다.


<비동기(Async)>

비동기 방식은 요청과 결과가 동시에 일어나지 않습니다. 동기 방식은 요청을 보내면 결과를 받을 때까지 기다려야 하지만, 비동기 방식은 여러 작업이 동시에 진행될 수 있으며, 모든 요청이 별개로 진행됩니다. client에서 server로 요청을 보내더라도 응답을 언제 받든지 다른 요청을 보낼 수 있으며, 모든 요청이 별개의 작업 단위로 움직이게 됩니다

이처럼 동기와 비동기는 결과를 돌려주었을 때 순서와 결과에 관심이 있는지 아닌지로 판단할 수 있습니다.



(2) 블로킹과 논블로킹의 차이점을 설명해주세요.

Blocking

Blocking은 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작합니다. 즉 Blocking은 제어권이 자신에게 없다는 것을 의미합니다.


Non-Blocking

Blocking과는 반대로 다른 주제의 작업에 관련없이 자신의 작업을 하는 것을 Non-Blocking이라고 합니다. 즉 Non-Blocking은 제어권이 자신에게 있다는 것을 의미합니다.

이처럼 Blocking과 Non-Blocking의 차이는 다른 주체가 작업할 때 자신에게 제어권이 있는지 없는지로 볼 수 있습니다.



(3) 본인이 주로 사용하는 언어에서 비동기 프로그래밍을 사용하는 방법을 설명해주세요. java에서는 쓰레드 코드를 사용하여 비동기화를 구현합니다. 비동기 처리 방식은 Future 객체를 사용하는 방식과 Callback을 구현하는 방식이 있습니다.

Future 객체는 다른 주체에게 작업을 맡긴 상태에서 본 주체쪽에서 작업이 끝났는지 직접 확인하는 방법입니다.

이 때 확인하는 방법이 두가지가 있는데 하나는 isDone()이나 isCanceled() 메소드로 블로킹 없이 작업을 완료했는지의 여부만 확인하는 방법이고, 다른 하나는 get()으로 작업이 완료될 때까지 블로킹된 상태로 대기하는 방법입니다. 오래 걸리는 작업을 다른 주체에게 맡겨 두고 get()을 호출하기 전까지 이 쪽에서 할 일을 하다가, 작업을 마치면 get()을 호출해 작업의 결과를 받아오는 식으로 사용합니다. get() 메서드를 통해 Future 객체에 담긴 작업 결과를 얻을 수 있습니다.

Callback은 다른 주체에게 맡긴 작업이 끝나면 다른 주체 쪽에서 본 주체가 전해준 콜백 함수를 실행하는 방법입니다.

Callback을 구현하는 방법 중 CompletionHandler를 사용하는 경우를 설명들겠습니다. CompletionHandler는 비동기 I/O 작업의 결과를 처리하기 위한 목적으로 만들어졌으며, 콜백 객체를 만드는데 사용됩니다. completed() 메서드를 오버라이드해서 콜백을 구현하고, failed() 메소드를 오버라이드해서 작업이 실패했을 때의 처리를 구현하면 됩니다. try-catch나 if문을 이용하여 작업이 성공했는지 판단하여 작업이 성공했으면 콜백 객체의 completed() 메서드를 호출하고, 실패했거나 예외가 발생했으면 failed()를 호출하는 식으로 사용하면 됩니다.



(4) 메세지 큐를 쓰는 이유에 대하여 2가지 예시를 서술해주세요.

비동기 메시징 : 대기열은 애플리케이션에 무언가 수행이 필요하지만 당장 수행 할 필요가 없거나 결과에 신겨 쓰지 않는 시나리오에서 유용할 수 있습니다. 웹 서비스를 호출하고 완료 될 때까지 기다리는 대신 큐에 메시지를 쓰고 나중에 동일한 비즈니스 로직이 발생되도록 할 수 있습니다. 메시지 큐를 이용한 대기열은 비동기 프로그래밍 패턴을 구현하는 적절한 방법입니다.

확장성 향상 : 메시지 큐를 사용하면 프로그램의 여러 부분을 분리하고 독립적으로 확장할 수 있습니다. Azure, AWS 또는 기타 호스팅 솔루션을 사용하면 CPU 사용량 또는 기타 메트릭에 따라 백그라운드 서비스를 동적으로 확장할 수도 있습니다. 이처럼 메시지 큐는 확장성과 탄력성으로 많은 도움을 줄 수 있습니다.



(5) 본인이 작성한 서버 코드가 있는 github repo 주소를 제출해주세요. (CRUD 기능을 모두 포함하여야 하며, 서버에 대한 설명을 README에 작성해주시면 더욱 좋습니다.) https://github.com/codestates-seb/seb40_main_029 백엔드 서버 구현의 모든 부분을 담당하였습니다. 오늘 하루의 기분을 색깔로 표현한 프로필을 생성하여 친구들과 공유하는 SNS 커뮤니케이션 서비스를 구현하였습니다. 현재 진행하고 있는 프로젝트로 백엔드 서버쪽은 구현이 완료되어 있는 상황입니다. (dev 브랜치 참고)



(6 - Optional) 해당 수업을 통해 꼭 배우고 싶은 주제 또는 지식이 있다면 자유롭게 서술해주세요. 부트캠프 메인 프로젝트를 진행하면서 배포 인프라 구축에 대한 지식이 많이 부족함을 느꼈습니다. 취업하기 전 AWS 인프라 기술에 대한 기본을 학습하고 내 기술로 만들어 이번 기회에 꼭 취업에 성공하고 싶습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published