2.13) 비동기 작업 처리하기 2. Promise
promise 객체를 어떻게 사용하는건지 배웠는데요
콜백지옥을 해결하기 위해 탄생한건가요?
promise 객체를 사용해서 비동기함수를 쓰면 얻는 장점이 무엇인가요? 결과적으로 얻는 이점에 대한 설명이 좀 부족하지 않나 싶고 궁금합니다
답변 2
1
안녕하세요 이정환입니다.
우선 본 강의는 리액트를 메인으로 다루는 강의인 만큼, 자바스크립트에 대해서는 아주 기초적인 핵심 지식만 다루고 넘어가기 때문에 타 자바스크립트만 다루는 도서나 강의보다는 제한적인 정보를 제공하고 있음을 알려드립니다. 이에 아쉬운 부분이 조금 있으셨던 것 같아요 😢
Promise 객체는 콜백 지옥을 해결하기 위해 등장한게 맞지만, 단순히 콜백 지옥을 해결하는 것 이상의 장점도 함께 제공하고 있습니다. 이런 장점들 중 강의에서 설명해드린 점을 제외한 몇가지만 추가로 설명해드릴게요
먼저 Promise를 사용하면 비동기 작업의 호출부와 처리부를 분리할 수 있습니다. 콜백함수를 사용했을 때에는 비동기 작업을 호출하면서 이 작업을 처리하는 콜백함수를 함께 반드시 전달했어야 했지만 Promise를 활용하면 코드의 어느 부분이든 자유롭게 호출해 사용하는 것이 가능합니다.
또한 Promise를 사용하면 비동기작업을 다양한 방식으로 처리할 수 있도록 도와주는 Promise 메서드를 활용할 수 있는데 Promise.all, Promise.allSettled 등이 그것입니다. 이 메서드를 활용하면 여러개의 비동기 작업을 병렬로 수행시키거나, 병렬로 수행 시킨 상태에서 먼저 수행시킨 작업만 성공 시키거나 하는 등의 다양한 활용이 가능합니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
0
안녕하세요, 인프런 AI 인턴입니다.
yh J님의 질문에 대해, “비동기 방식에서 콜백함수 사용 이유”와 관련된 내용이 도움이 될 것 같습니다. 이 질문에서는 왜 비동기 작업을 처리할 때 콜백 함수를 사용하는지, 그리고 비동기 처리에 대한 솔루션으로 Promise 객체를 도입하는 이유에 대한 설명이 있습니다.
관련 답변 링크
비동기 방식에서 콜백 함수를 사용하는 주된 이유 중 하나는, 함수의 결과를 비동기적으로 처리한 후 콜백을 통해 그 결과를 활용할 수 있도록 하는 것입니다. 예를 들어, 웹 API 호출 등의 비동기 작업을 수행한 후 그 결과를 가지고 다음 작업을 수행해야 할 때 콜백 함수를 사용합니다. 하지만 이 과정에서 콜백 함수를 중첩하게 되면 코드의 가독성과 유지 관리성이 떨어지는 ‘콜백 지옥(callback hell)’ 문제가 발생할 수 있습니다.
Promise 객체는 이러한 콜백 지옥 문제를 해결하기 위해 등장했습니다. Promise를 사용하면 비동기 작업의 성공(fulfillment)과 실패(rejection)를 간결하고 명확하게 처리할 수 있습니다. 이를 통해 코드의 가독성을 크게 향상시킬 수 있으며, 연속된 비동기 작업을 순차적으로 또는 병렬로 처리하는 것이 더욱 용이해집니다.
비동기 함수에서 Promise 객체의 사용은 콜백 기반 비동기 처리의 복잡성을 줄여주며, .then(), .catch(), .finally() 메서드를 통해 성공, 실패 및 최종적인 처리를 간단한 방식으로 이어서 수행할 수 있게 합니다. 결과적으로, 비동기 로직의 동기적 표현을 가능하게 하여 개발자가 코드 흐름을 더 쉽게 이해하고 관리할 수 있도록 돕습니다.
이 내용이 궁금증 해결에 도움이 되길 바랍니다. 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
useEffect와 lifecycle문의
0
28
2
프론트엔드 학습 수준 문의
0
39
2
리액트 챕터별 코드에서 eslint 설정파일이 없어요
0
48
2
데이터 로딩중 화면만 계속 나와요!!
0
55
2
퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요
0
79
2
이후의 커리큘럼 문의
0
102
2
실슬환경 설정에서 save후 console.log 부분이 새로고침이 안되는현상입니다.
0
50
2
최적화 관련 질문있습니다 (useMemo 등)
0
84
3
프로바이더 컴포넌트의 위치는 어떤 기준인가요?
1
82
3
Date 객체에 관련하여 질문드립니다.
0
85
2
리액트 개정판 교재 질문
0
60
2
예제코드가 안나와요!
0
78
2
select a variant 선택에서 javascript와 javascript+react compiler 중 무엇을 선택해야하나요? com
0
108
2
onMouseEnter 관련 문의 드립니다
0
92
3
배열의 렌더링 관련 질문 드립니다.
0
73
2
2:40초 refObj를 콘솔로 출력시 오류가 발생합니다.
0
113
2
TS, 리액트 강의중에 뭘 먼저 수강하는게 좋을까요?
0
137
2
useCallback 적용한 onCreate, onUpdate, onDelete 함수..
0
70
1
vs code 자동완성관련 문의
0
113
2
91강 useEffect내에서 상태변화함수 호출시 발생하는 에러
1
179
2
87강 필터 함수 질문
0
69
2
useRef, useState count 비교
0
67
2
안된다고했던 이유가 무엇이었는지 모르겠습니다
0
90
2
85강에서 객체를 왜 클래스로 만들어서 new 하지 않는건지 궁금합니다.
0
75
2





