- 동기 처리는 끝나야 다음꺼가 진행되고, 비동기 처리는 유도리 있게 진행하는 형태이다.
- 그리고
<form>
에서의 <input type = “submit”>
이나 <button type = “submit”>
은 전송 시 페이지 이동이 일어난다. 즉 동기 방식 HTTP 통신을 하고 있는 것이다.
- 비동기 방식에서는
<button *type*="button" *onclick*="axiosGet()">axios get 전송</button>
이런식으로 함수를 걸어서 js로 폼 전송을 적용시켜준다.
- 따라서 js코드 내에서 폼 유효성 검사를 하는 코드를 작성해야한다!
- 동기 방식의 HTTP 전송
- 페이지를 아예 이동해 서버가 데이터를 처리한다.
- 한 번에 하나만 처리. 예를 들어 로그인 시 비번을 잘못 입력하면 그에 대한 알람을 한 화면에서 보여주는
- 비동기 방식의 HTTP 통신
- 서버에 데이터를 보내고 응답을 기다리는 동안 다른 처리가 가능하다.
- 폼의 데이터를 서버와 dynamic하게 송수신 하는 것이다!
- 웹 문서가 정적으로 멈춰있는 것이 아니라 일부 내용이 실시간으로 변경되는 것!
- 즉 무언가를 제출 할 때마다 페이지를 이동하는 것이 아니라 한 페이지에서 동작하게 하고 싶다면?
- 비동기 방식을 이용하면 된다.
- 예를 들어 로그인 실패 시 창이 이동되지 않고 현재 페이지에서 값을 처리하고 알림을 주는 상황.
- 비동기 HTTP 통신 방법으로는 3가지가 있다.
Ajax
, Axios
, Fetch
.
- 얘네는 문법이 다를 뿐 사실상 같은 개념이다.
- 참고로 client가 server로 요청을 보내는 부분이기 때문에 백엔드에 가깝다.
Axios
- Node.js와 브라우저를 위한 Promise API를 활용한다.
- 비동기 HTTP통신이 가능하다.
- return값이 Promise객체로 온다!
- 장점
- Promise 기반이다.
- 브라우저 호환성이 뛰어나다! 주로 이걸로 사용!
- 단점
▶️ Axios 요청 문법
axios({
method: "GET",
url: "/axios",
params: data
})
url
: 통신하고자 하는 주소를 넣어준다.
- form에서의 action에 해당한다. 내가 데이터를 보내고자 하는 주소!
method
: 통신하고자 하는 방식을 넣어준다.
- get, post, patch, delete 등
data
: json형태의 보내고자 하는 데이터를 {}
안에 넣어준다.
{ key: value, key: value}
의 형태로 만들어 준다.
- put, post, patch 일 때 사용한다.
req.body
로 데이터를 보낸다.
params
: get 요청으로 데이터를 보낼 때 url의 ?
뒤에 객체로 보내지는 부분을 넣어준다.
{ key: value, key: value}
의 형태로 작성한다.
req.query
에 데이터가 담긴다.
params
값을 안보낼거면 URL에 쿼리스트링을 작성해서 보내도 된다.
▶️ Axios 응답 문법
axios({
method: "GET",
url: "/axios",
params: data
}).then((response) => {
console.log(response.data)
console.log(response.status)
console.log(response.headers)
});
- Promise 기반이기 때문에
.then
을 사용해준다.
- 백에서는?
res.send
를 이용해 데이터를 보낸다.
res.send
를 이용하면 데이터를 클라이언트로 다시 보낼 수 있다.
▶️ Axios 코드 예시
app.get("/axios", function (req, res) {
console.log(req.query);
res.send(req.query);
});
app.post("/axios", function (req, res) {
console.log(req.body);
const data = {
...req.body,
msg: "반가워요",
};
res.send(data);
});
function getData() {
const form = document.forms["register"];
if (!form.checkValidity()) {
form.reportValidity();
return false;
}
const data = {
id: form.id.value,
pw: form.pw.value,
name: form.name.value,
}
return data
}
function axiosGet() {
const data = getData()
axios({
method: "GET",
url: "/axios",
params: data
}).then((res) => {
console.log("res", res)
console.log("res.data", res.data)
const {
name
} = res.data
$("#result").html(`axios get 요청 성공 ${name}님 환영합니다.`)
})
}
async function axiosPost() {
const data = getData();
if (!data) return;
const res = await axios({
method: "POST",
url: "/axios",
data: data,
})
axios({
method: "POST",
url: "/axios",
data: data,
}).then((res) => {
console.log(res.data)
const {
name
} = res.data
console.log("res", res)
console.log("res.data", res.data)
$("#result").html(`axios post 요청 성공 ${res.data.name}님 환영합니다.`)
})
}
JSON이란?
- JavaScript Object Notation의 약자이다.
- 데이터를 표시하는 방법 중 하나이다! 데이터를 문자열의 형태로 나타내기 위해 사용한다.
- 가독성이 뛰어나 컴퓨터와 사람 모두 해석하기에 편리하다.
- JavaScript의 Object를 기반으로 하는 텍스트 형식이다.