[TIL] 2020/10/27

0715yk·2020년 10월 27일
0

Today I Learned

목록 보기
64/129

Today, I Will Learn


  • Asynchronous & Promise 부분 복습
  • 포트 폴리오 비동기처리 부분 수정하면서 공부한 부분 실습
  • sprint 복습(sequelize)

Today, I Learned


  • about dotenv
  • 실제로 sequelize-cli를 통해 db:migrate를 할 때는 NODE_ENV를 export로 설정해준 값이 들어가서 실행된다.
  • 테이블 관계 조회 관련 블로그
    select * from information_schema.table_constraints
  • Promise.all을 써서 포트폴리오의 이미지를 받아오는, 즉, img src에서 이미지를 받아오는 시간동안 isLoading이라는 메시지를 받아오게 하고 싶었는데 일단은 실패했다. 계속 진행중.. 참고로 본래 로딩시간이 생기는 것이 require 때문인줄 알았는데, 실제로는 src를 통해서 이미지를 받아오는 데에서 로딩 시간이 쓰이는 것이였다. 이러한 비동기 처리를 위해서는 이미지 src를 받아올 때에도 비동기 처리가 필요하다고 생각됨.(참고 사이트)
  • Promise 복습
    일반적인 동기적 처리를 하는 로직을 구현할 때는 하나를 실행하고나서 다음 처리를 한다.
    그러나, 비동기처리, 예를 들어, 하나의 처리가 언제 끝날지 모르는 로딩과 같은 처리는 다르다.
    유튜브에서 동영상을 로딩한다고 할 때, 로딩하는 동안 아무것도 못한다하면 그것은 동기적 프로그래밍으로 만들어진 것이다.
    그러나, 그러한 사이트는 요즘 없다. 방금 예시로 다시 생각해보면,
    백그라운드 로딩으로 동영상을 로딩하고, 로딩을 완료하면 동영상을 재생하도록 비동기처리를 해놓고,
    다른 버튼을 클릭하면, 그 버튼이 실행되도록 해두어야 한다.
    방금 예시를 통해서 설명해보면, 백그라운드 로딩에서 동영상을 먼저 로딩하고, 그 다음에 동영상을 재생하도록 비동기 처리를 할 때 Promise를 쓴다.
    비동기처리는 언제 끝날지 모르기 때문에(동영상을 받아와야 다음 단계로 넘어갈 수 있음) 동기적 프로그래밍과 같이 다음줄에 다음 로직을 쓰는 것으로는 부족하다.
    반드시 첫번째 동영상 로딩이 끝난 다음에 다음 로직, 즉, 동영상 재생을 처리해야한다.
    그러기 위해서, 첫번째 처리에서 Promise 객체를 생성해서 동영상 로딩을 하고, 로딩이 성공하면 resolve에 값을 담아서 다음 로직으로 전달하고,
    그 전달받은 곳에서 해당 동영상을 재생하는 로직을 구현해놓으면 된다.
    이 때, 동영상 로딩에 실패하면, reject로 처리하고, 마지막에 catch로 에러를 처리해준다(promise 체이닝을 이용하면 에러처리를 마지막에 한번 해줘도 된다)
    추가로, 한번에 많은 로직을 전부다 처리하고, 예를 들어, 여러 동영상을 한번에 로딩한 다음에 동시재생하고 싶을 때는 Promise.all을 쓰도록 한다.
    
  • Promise 객체를 실제로 다음 then에 리턴해줘야한다(자주하는 실수) + 꼭 마지막에 catch로 에러처리 해주자.
  • console.table(테이블)하면 테이블을 시각화해서 콘솔창에 보여준다(매우 편리한 기능).
  • 이번 스프린트에서 배운 클릭하면 조회수를 데이터베이스에 기록하는 기능을 기억했다가 다음에 사이트를 만들고 방문자수를 체크하는 기능을 구현해보자
  • in sequelize : findOrCreate:아이디 생성시에 아이디가 이미 있는 아이디면 안만들고, 없으면 생성하도록 하는 명령어(아이디 생성 말고도 다른 부분에도 쓰임! 단지 예시임)
  • res.sendStatus(200) 이렇게도 쓸 수 있다.
  • redirect는 대부분 300번대 status를 보낸다.

Planning to Study


  • img src받아오는 동안 전체를 isLoading 상태로 두고, 다 받아온 뒤에 내가 원하던 화면을 보여주는 것을 구현해보기 (in portfolio app) with Promise(asynchronous)
profile
포기하지 않는 이상 도착하게 돼있다

0개의 댓글