4주 프로젝트 DAY4

  • github 원격 저장소 branch 가져오기
  • 어떻게 AWS-SDK for JavaScript 를 Minio 와 같이 사용할 것인가?
  • 이 프로젝트 전체 데이터 플로우가?
  • 클라이언트에서 서버로 응답받은 Response 어떻게 뜯어?
  • JavsScript Promise 즉시 실행함수 패턴

github 원격 저장소 branch 가져오기

출처: jihun's development blog

  • 원격 저장소 branch 확인
    원격 저장소의 branch 리스트를 확인하는 방법이 있다.
    $ git branch -r: -r 옵션을 주면 원격 저장소의 branch 리스트를 볼 수 있고,
    $ git branch -a: -a 옵션을 주면 로컬, 원격 모든 저장소의 branch 리스트를 볼 수 있다.

  • 원격 저장소 branch 가져오기
    위의 상황에서 만약 원격 저장소의 feature/create-meeting branch를 가져오고 싶다면, $ git checkout -t origin/feature/create-meeting 처럼 하면 된다.

어떻게 AWS-SDK for JavaScript 를 Minio 와 같이 사용할 것인가?

sdk 정리

내 전략은
1.aws-sdk 에서 어떤 명령어가 있는지 보고
2.minio 랑 비교해서 aws-sdk의 모든 옵션을 사용하지는 않으니까 쓰는 옵션만 넣어서 테스트해보자.

구체적으로는

  1. createbucket
  2. putObject
  3. getObject
    을 순차적으로
    1번을 수행하는 코드를 작성한 후
    2,3번이 수행한다는 가정하에 테스트 코드를 작성 후
    2,3번 로직을 구현하려고 함.

이 프로젝트 전체 데이터 플로우가?

------>요청(업로드요청) ------>(SDK이용해서 S3에게 요청)
클라이언트 --------- 서버 --------- S3
endpoint 전달<----- SDK 통해 endpoint 응답받음 <----

클라이언트 ---------- s3
파일전송
이 파일전송에서 쓸 레퍼런스

클라이언트에서 서버로 응답받은 Response 어떻게 뜯어?

MDN

Body.json()
Takes a Response stream and reads it to completion. It returns a promise that resolves with the result of parsing the body text as JSON.

반환 값
A promise that resolves with the result of parsing the body text as JSON. This could be anything that can be represented by JSON — an object, an array, a string, a number...

Body.json()을 이제 알았네

그리고 fetchd에서 사용하는 그 response 에서 바디에서 데이터를 뜯어내고 싶어~

이거 말고도 다섯가지 있어~

  • Body.arrayBuffer() - 이것도 언제 쓰는지 모르겠다.
    Takes a Response stream and reads it to completion. It returns a promise that resolves with an ArrayBuffer.

  • Body.blob() - 이건 정확히 모르겠다.
    Takes a Response stream and reads it to completion. It returns a promise that resolves with a Blob.

  • Body.formData() - form 객체로 전달할때
    Takes a Response stream and reads it to completion. It returns a promise that resolves with a FormData object.

  • Body.json() - 객체형태로 보낼때도 이걸로 보내
    Takes a Response stream and reads it to completion. It returns a promise that resolves with the result of parsing the body text as JSON.

  • Body.text() - string을 리턴할때는 이렇게
    Takes a Response stream and reads it to completion. It returns a promise that resolves with a USVString (text). The response is always decoded using UTF-8.

async function getFileIdList() {
  const url = `http://localhost:4000/getFileIdList`;
  const response =  await fetch(url);

  if (!response.ok) {
    throw new Error(response.statusText);
}
  const result = await response.json(); <---
  return result;
}
...

router.get("/getFileIdList", async (ctx: Koa.Context, next) => {
  ctx.body = await storageClass.getFileList();
  ctx.status = 200;
});

...

public getFileList(): Promise<string[]> {
   return new Promise((resolve, reject) => {
     fs.readdir(`${__dirname}/uploads/`, (err, data) => {
       if (err) {
         reject(err);
       } else {
         resolve(data);
       }
     });
   });
 };

JavsScript Promise 즉시 실행함수 패턴

레퍼런스

promise 초강력 레퍼런스 발견

https://alligator.io/js/promises-es6/

typescript 공식문서 한글 번역

레퍼런스