728x90
📍 19일 차 11.19. 금.(온라인 강의)
오늘은 async - await, error처리, HTTP, REST API에 대해서 배웠다.
❏ async / await 문법
Promise를 활용한 비동기 코드를 간결하게 작성하는 문법async / await문법으로 비동기 코드를 동기 코드처럼 간결하게 작성할 수 있다.async함수와await키워드를 이용한다.await키워드는 반드시async함수 안에서만 사용해야 한다.async로 선언된 함수는 반드시Promise를 리턴한다.async함수는function키워드 앞에async를 붙여 만든다async함수 내부에서await키워드를 사용한다.fetchData,fetchUser는Promise를 리턴하는 함수이다.then method chain시then을 2번 이상 사용하면 순차적으로 실행된다. 첫번째then을 기다렸다가 완료되면 다음then으로 이어진다.async도 마찬가지로await가 여러개 있을 때 순차적으로 실행된다.await키워드는,then메서드 체인을 연결한것처럼 순서대로 동작한다.- 비동기 코드에 쉽게 순서를 부여한다.
// async 함수
async function asyncFunc1(){
let data = await fetchData()
let user = await fetchUser(data)
return user
}
// await 키워드 실행 순서
async function asyncFunc2(){
let data1 = await fetchData1()
let data2 = await fetchData2(data1)
let data3 = await fetchData(data2)
return data3;
}
function promiseFunc(){
return fetchData1()
.then(fetchData2)
.then(fetchData3)
}
Promise를 리턴하는 함수의 경우, 에러가 발생하면catch메서드를 이용하여 에러를 처리한다.catch메서드를 사용하지 않는다면async함수에서try-catch구문을 이용하여 에러를 처리한다.try구절안에await가 2개 이상 있을 때catch문에 해당error가 들어간다.error처리를 세분화 하고 싶으면 한try구절에await를 1개씩만 담자.
// promise error handling
function fetchData1(){
return request()
.then(response => response.requestData)
.catch(error => // error)
}
// async - await error handling
async function asyncFunc(){
try{
let data1 = await fetchData1()
return fetchData2(data1)
} catch (e){
console.log("error: ", e)
}
}
- async 함수는 동기적으로 보이지만 비동기적으로 실행됩니다. 단, 내부에서
await키워드가 쓰이지 않았을 경우엔Promise.resolve()로 처리됩니다. - await 키워드는 프로미스를 리턴하지 않는 함수라도 사용할 수 있습니다. 단 이 경우 리턴한 데이터는
Promise.resolve()로 감싸 집니다.
728x90
❏ HTTP(HyperText Transfer Protocol)
Web에서 서버와 클라이언트 간의 통신하는 방법을 정한 것.- 클라이언트는 웹 브라우저 등 서버로 요청을 보내는 대상
- 서버는 클라이언트가 요청을 보내기 전까지 대응하지 않음
- 서버와 클라이언트 사이에는 무수히 많은 요소가 존재
HTTP는 이런 존재들 사이의 통신 방법을 규정- 규약을 통해 통신하지 않으면 복잡해지고 혼란스럽게 된다.
HTTP Message: 서버 주소, 요청 메서드(POST), 상태 코드(200, 404),target path, 헤더 정보, 바디 정보 등이 포함된다. 요청 메시지와 응답 메시지의 모양이 다르다.HTTP/1.1메시지는 사람이 읽을 수 있다.HTTP header: 콘텐츠 관련 정보(content-type: json...), 인증 관련 정보(Authorization), 쿠키 정보(헤더에 들어간다. 가벼운 정보 등), 캐시(페이지 조회정보를 클라이언트에 내릴 때 일정 시간 내에는 동일한 페이지를 그대로 사용하는 방법 등...) 관련 정보 등 서버와 클라이언트 통신 시 필요한 정보를 담는다. 클라이언트 요청 시, 서버 응답 시 모두 헤더에 정보를 담을 수 있다.HTTP status:HTTP요청 시, 클라이언트는 요청의 결과에 대한 상태 정보를 얻는다.200,400,500등 숫자 코드와,OK NOT FOUND등의 텍스트로 이루어진다. 코드를 이용해 각 결과에 해당하는 행위를 할 수 있다.요청 메서드: 클라이언트에서 서버로 요청에 의미를 부여할 때 사용하는 명령어(GET,POST,PUT,PATCH,DELETE)
❏ REST API(Representational State Transfer API)
- HTTP를 이용하여 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍쳐고
REST API는REST를 기반으로 서비스API를 규정한 것 - API는 사용자가 특정 기능을 사용할 수 있도록 제공하는 함수
REST API의 요청 메소드에 응하는 서버API와 클라이언트 간 통신의 구조가 지켜야 할 좋은 방법을 명시한 것이다.- 요청 메서드의 의미, URI설계, 클라이언트의 상태에 대한 동작 등을 정의한다.
- REST API 요청 메서드: GET - 리소스 정보를 얻음, POST - 리소스를 생성, PUT - 리소르르 생성하거나 업데이트 DELETE - 리소스를 제거
❏ Fetch API
HTTP를 활용할 수있는API- 기존
XMLHTTPRequest를 대체하는HTTP요청API(두 함수의 큰 차이점은Promise리턴 여부) ES6에 추가된Promise를 리턴하도록 정의 됨- 네트워크 요청 성공 시,
Promise는resolve - 네트워크 요청 실패 시,
Promise는reject response.객체는 결과에 대한 다양한 정보를 담는다.response.ok:200 <= HTTP status code <= 299: true, 그 외falseresponse.status:HTTP status code를 담는다.response.url: 요청한URL정보를 담는다- response.json():
body정보를json으로 만드는Promise를 반환한다. body값은json()값을resolve해서 나온 값을then처리를 해줘야 사용가능하다.json()을 한번만 사용하면promise를 사용하는 꼴이된다.POST:fetch(url, options)로fetch메서드 옵션을 넣는다.method필드로 여러 요청 메서드를 활용한다.headers,body필드를 활용해 서버에 추가 정보를 보낸다.
// response 객체 살펴보기
.fetch(URL)
.then(response => {
response.ok
response.status
response.statusText
response.url
response.bodyUsed
})
// response header
.fetch("https://randomuser.me/api/").then(response => {
for(let [k,v] of response.header){
console.log(k,v)
}}
);
// response body
.fetch(URL)
.then(response => response.json()
.then(console.log)
// POST 요청
fetch(serverURL, {
method: "post", // method 넣기
headers: {
'Content-Type': 'application/json; charset=utf-8',
Authentication: 'mysecret'
},
body: JSON.stringify(formData)
})
.then(res => res.json())
.then(console.log)반응형
'Frontend > 엘리스 SW 엔지니어 트랙' 카테고리의 다른 글
| [ 엘리스 SW 엔지니어 트랙 ] 21일차(5주차: 클린코드와 타입스크립트 - 정적타입, 인터페이스, Generic, Decorator) (0) | 2021.11.23 |
|---|---|
| [ 엘리스 SW 엔지니어 트랙 ] 20일차 (0) | 2021.11.21 |
| [ 엘리스 SW 엔지니어 트랙 ] 18일차 (0) | 2021.11.18 |
| [ 엘리스 SW 엔지니어 트랙 ] 17일차 (0) | 2021.11.17 |
| [ 엘리스 SW 엔지니어 트랙 ] 16일차(4주차: 자바스크립트 III - Promise, async / await, API 통신) (0) | 2021.11.16 |
댓글