보충 하기
기획안 구성
- 웹사이트 컨셉 / 목적/ 목표
- 참고 - 웹기획 스토리보 양식, 작성 예시
- 사용 기술
- 레이아웃(와이어프레임) + 요소별 기능
- 미디어쿼리 부분 넣기
- 참고 - 즐겨찾기 - 자료 - 기획
- 구현기능
- 참고 - 좀더 찾기
- 역할분담
- 참고 - 발표자료 스크랩 구글 시트
필수 체크
- 프론트
- UI 일관성
- 반응형
- UX ( 유효성 검증, 버튼 등의 클릭 유도시 커서- 포인터 적용 등)
- 백
- 데이터 삭제는 DELETE 아닌, POST로 가려주기
- 코드 재사용성 고려
- 사용성 많은 곳에 통신 적게 적용
👉 상황 예시 :
음식점에서 포장 주문을 한 경우, 결과를 알 수 있는 방법
방법 1 ) 기다리면서 포장이 완료될 때까지 계속 진행 상태를 묻는다.
손님 : 다 됐나요?
사장 : 아니오.
*** 반복
손님 : 다 됐나요?
사장 : 네 됐습니다.
방법 2) 포장 주문이 완료되면 연락을 받을 수 있도록 전화번호를 주고 나올 수도 있다.
그러면 손님도 연락이 올 때까지 다른 일들을 할 수 있다. 그리고 사장도 주문 상품이 완료되거나 혹은 실패하더라도 전화번호를 기억했다가 연락을 해서 알려줄 수 있다.
이 방법처럼 사용하는 것이 바로 ‘promise’ 이다.
타입 : 객체
생성 키워드 : new Promise
콜백 함수의 인수 : resolve, reject
const pr = new Promise((resolve, reject) ⇒ { // code });
resolve : 성공한 경우 실행 함수
reject : 실패한 경우 실행 함수
※ 콜백 함수(callback) : 어떤 일이 완료된 후 실행되는 함수
생산자와 소비자 (Productor & Consumer)
👉 프로미스로 콜백지옥을 해결할 수 있다!
※ 콜백 지옥 : depth 가 깊어지면서 계속 콜백 함수를 호출하는 형태
const f1 = (callback) => {
setTimeout(function () {
console.log('1번 주문 완료');
callback();
}, 1000);
};
.... f2, f3
console.log('시작');
f1(function () {
f2(function () {
f3(function () {
console.log('끝');
});
});
});
f1()
.then((res) => f2(res))
.then((res) => f3(res))
.then((res) => console.log(res))
.catch(console.log)
.finally(() => console.timeEnd('x'));
Promise.all([f1(), f2(), f3()])
.then(res => {
console.log
})
👉 실행 속도 차이
- (좌) Promises chaining / (우) Promise all
- Promise all 이 더 빠른 것이 확인된다.
용량이 큰 이미지를 로딩하는 경우, 그 중 하나라도 완료되면 그 이미지를 보여줄 때 사용한다.
// console.time('x');
Promise.race([f1(), f2(), f3()]).then((res) => {
console.log(res);
// console.timeEnd('x');
});
- 1번 프로미스가 완료되고, 2번 result를 예정하고 있었으나, 1번이 완료되었기 때문에 무시된다.
예제 코드 추가
async 와 await
: promise를 조금 더 간단하고 가독성 좋게, 동기적으로 실행되는 것처럼 보이게 만들어준다.
: 기존에 존재하는 Promise 위에 조금더 간편한 API를 제공한다.