Week3 Mission의 레이아웃을 구현했다.
특히 signin과 signup의 레이아웃 구성이 유사해서 하나의 css로 묶어줬다. 이 과정에서 css와 imgs를 static이라는 폴더로 리팩토링했고, html의 경우에도 폴더명/index.html
로 리팩토링하였다. 이렇게 할 경우 url로 접근할 때 확장자명까지 적지 않아도 되어서 편리하다. (물론 리액트나 다른 프래임워크를 사용하여 네비게이션을 하면 신경 안써도 되는 부분이다)
알고리즘 3문제를 풀었다. 실버 레벨 문제들로 감을 되찾기 위해서 가볍게 풀었다. 특히 ramda를 써서 pythonic한 문법을 익히고자 노력했다.
JSON 데이터 다루기
Javascript Object Notation의 줄임말로, 자바스크립트의 Object Literal 문법 및 배열 표현법 등과 일정 부분 호환되는 데이터포맷
JSON.parse
: 역직렬화JSON.stringify
: 직렬화json
메소드각 코드에 대응하는 상태 메시지를 가지고 있다
현재 request 또는 response의 바디에 들어있는 데이터가 어떤 타입인지 나타낸다. main type/sub type
형식이다.
text/html
: html 데이터image/jpeg
: jpeg, jpg 이미지 데이터audio/mpeg
: mp3, mpeg 오디오 데이터application/json
: json 데이터application/octet-stream
: 확인되지 않은 바이너리 파일 (텍스트 파일 이외의 파일을 binary file이라고 함. 즉 특정 확장자(mp4 등)에 해당하지 않는 바이너리 파일)application/x-www-form-urlencoded
id=6&name=Jason&age=34&department=engineering
이런 식으로 “이름=값” 프로퍼티를 “&”으로 연결된 데이터타입이다.multipart/form-data
: 여러 종류의 데이터를 하나로 합친 데이터 ex) 텍스트 + 이미지 + 동영상 데이터웹브라우저가 현재 페이지를 그대로 유지한 채로 서버에 리퀘스트를 보내는 response를 받아서 새로운 페이지를 로드하지 않고도 변화를 줄 수 있게 해주는 기술
컴퓨터끼리 통신하는 프로토콜에는 HTTP, HTTPS 이외에도, FTP, SSH, TCP, UDP, IP, Ethernet 등 정말 다양한 종류의 프로토콜이 있다.
비동기 실행에서는 코드가 꼭 등장하는 순서대로 실행되는 것이 아니다.
console.log('Start!');
fetch('https://www.google.com')
.then((response) => response.text()) // 콜백 1
.then((result) => { console.log(result); }); // 콜백 2
console.log('End');
fetch 함수가 리퀘스트를 보내고, 서버의 리스폰스를 받게 되면 콜백들이 순서대로 실행
console.log('Start');
console.log('End');
then
메소드로 등록해뒀던 콜백 실행비동기 실행 함수들
작업에 관한 상태정보를 가지고 있는 객체
fetch함수는 Promise 객체를 리턴한다. 이때 promise객체는 pending 상태
then
메소드로 작업이 성공하여 promise객체가 pending → fulfilled가 되면 실행할 콜백을 등록할 수 있다.프로미스 객체에 then 메소드를 연속적으로 작성하는 것.
then
메소드는 새로운 프로미스 객체를 리턴한다.
① 의 경우 then 메소드가 return한 promise 객체는 callback이 return한 promise 객체와 동일한 상태와 결과를 가진다
② 의 경우 then 메소드가 return한 promise 객체는 fulfilled 상태와 작업 성공 정보를 가진다.
③ 의 경우는 ① 경우와 똑같이 then 메소드가 리턴했던 Promise 객체는 fulfilled 상태가 되고, 그 작업 성공 결과로 undefined를 가진다.
④ then 메소드가 리턴한 Promise 객체는 rejected 상태가 되고, 그 작업 실패 정보로 해당 Error 객체를 갖게 된다
⑤의 경우 then 메소드가 리턴하는 promise 객체는 이전 promise 객체와 동일한 상태와 결과를 가진다.
잠깐! text 메소드, json 메소드는 promise 객체를 반환한다.
promise chaining이 필요한 경우
catch
메소드
then(undefiend, 콜백)
fetch("https://jsonplaceholder.typicode.commmmm/users")
.then((response) => response.text()) //①
.then((result) => {
console.log(result);
throw new Error('test'); // ②
})
.catch((error) => {console.log(error);});
//결과 - TypeError: Failed to fetch
유효하지 않은 url로 request를 보냈을 때 fetch가 return 한 promise는 rejected 상태와 error라는 작업 실패 정보를 가진다. ①의 callback은 실행되지 않고 then이 return한 promise는 fetch가 return 한 promise 와 똑같은 상태와 작업정보를 가진다. 즉 ①의 then의 promise는 rejected 상태와 error라는 작업 실패 정보를 가진다.
②의 callback은 실행되지 않고 ②의 then의 promise는 직전 promise와 동일하게 rejected 상태와 error라는 작업 실패 정보를 가진다.
따라서 catch문은 rejected 상태와 error라는 작업 실패 정보를 출력하는 것이다!
finally
메소드
callback hell에서 빠져나오기 위해 promise 객체가 생겼다.
const p = Promise((resolve, reject) => {
setTimeout(() => { resolve('success');}, 2000);
})
p.catch((error) => {console.log(error); });
const p = Promise.resolve('success')
.then(//어쩌고~)
const p = Promise.reject(new Error('fail'));
all
메소드 - all([p1, p2, p3 ...])
race
메소드 - .race([p1, p2, p3 ... ])
allSettled
메소드
any