Memory Heap
변수와 객체의 메모리 할당Call Stack
어떤 순서로 작업을 수행하는지 기록 (작업 스케쥴링)function getUser() {
let user;
setTimeout(function() {
user = 'jnary';
}, 0)
return user;
}
콜백함수를 익명함수로 전달하는 과정에서 콜백 안에 함수 호출이 반복
들여쓰기 수준이 감당하기 힘들 정도로 깊어지는 현상
→ Promise, Async로 해결
// Promise 객체 생성
const promise = new Promise((resolve, reject) => {
// 비동기 작업 수행
if (/* 성공 */) {
resolve('result');
} else ( /* 실패 */) {
reject(new Error('failure'));
}
});
Pending
대기Fulfilled
성공then
을 통해 처리값 반환rejected
실패catch
를 통해 실패 처리 결과값 반환then
인자 : (성공 시 호출되는 콜백함수, 실패 시 호출되는 콜백함수)
Promise 반환
promise.then(
result => alert(result), // 안 다루고 싶으면 null
error => alert(error) // 안 다루고 싶으면 생략
);
// 성공 콜백만 다루고 싶을 때
promise.then(
result => { alert(result); }
)
promise.then(
result => alert(result)
)
catch
then(null, f)
와 동일finally
promise.finally(() => alert('처리되었습니다.'));
then(f, f)
와 달리 인수 필요 XPromise.reject('Error!')
.catch(error => {
console.log('첫번째 catch:', error);
// 여기서 오류를 다시 던지거나 거부된 Promise를 반환하지 않는다면,
// 다음 then은 실행됩니다.
return 'Recovered';
})
.then(result => {
console.log('첫번째 then:', result); // 'Recovered' 출력
throw 'New Error!';
})
.catch(error => {
console.log('두번째 catch:', error); // 'New Error!' 출력
// 여기서 아무것도 반환하지 않거나 값을 반환하면, 다음 then이 실행됩니다.
})
.then(result => {
console.log('두번째 then:', result); // undefined 또는 catch에서 반환한 값 출력
});
Promise.reject('Error')
.catch(error => {
console.log('Caught an error:', error);
throw 'New Error from catch';
})
.then(result => {
// 이 블록은 실행되지 않음
console.log('This will not run:', result);
})
.catch(error => {
// 여기서 두 번째 오류를 처리
console.log('Caught another error:', error);
});
try ... catch
와 직관성 떨어짐→ async/await 등장
async
function 앞에 위치
해당 함수는 항상 Promise를 반환
Promise 아닌 값 반환해도 fulfilled
상태의 Promise로 반환
async function f() {
return Promise.resolve(1);
}
f().then(alert); // 1
await
async
함수 내에서만 사용 가능
해당 키워드 만나면 Promise가 처리될 때까지 대기
promise.then 보다 가독성 굳
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve('success!'), 1000)
});
let result = await promise; // Promise 처리될 때까지 대기
alert(result); // 'success!'
}
try ... catch
예외를 처리하기 위한 문법HTTP URI
를 통해 자원 명시HTTP Method
를 통해 자원 읽고 씀 (CRUD: Create, Read, Update, Delete)REST Server : API 제공 → 비즈니스 로직 처리 및 저장
Client : 사용자 인증, context 관리
→ 서로 간 의존성 감소
RESTful
: REST 설계 규칙을 올바르게 지킨 시스템GET
데이터 조회POST
데이터 추가 및 등록PUT
데이터 갱신DELETE
데이터 삭제PATCH
부분적으로 수정Authorization, Content-Type 등 부가정보 전송
try {
const data = axios.get(
`api/name/validation?userName=${userName}`,
return data;
);
} catch (err) {
console.error(err);
}
2xx
성공3xx
리다이렉션 (캐싱, 다른 쪽으로 대체)4xx
클라이언트 요청 오류 (Bad Request)5xx
서버 내부 오류axios
가 더 편리.gitignore
에 포함import.meta.env
로 접근VITE_
로 시작 → VITE 배포시 인식하도록