Nest Js로 API 만들기를 들으며 알게 된 것들(노마드 코더 강의)

12498 단어 NestJSNestJS

출처 강의 https://nomadcoders.co/nestjs-fundamentals/lobby

배우게 된 이유

집현전 웹페이지 프로젝트를 하게 되면서 백엔드를 맡게 됐다.
우리 백엔드는 언어: Typescript 프레임워크: Nestjs 를 쓰게 되었고 이에 따라 Nestjs를 공부하게 되었다.

세팅

nest js공식 사이트 https://docs.nestjs.com/에 들어가보면 친절히 설치하는 방법과 실행방법까지 자세히 나와있다.

이렇게 nestjs를 설치한 후 (좀 걸렸다.)
nest를 치면

이렇게 설치된 모습과 특정 템플릿을 이용할 때 어떻게 사용하는지 나타내준다.

npm run start 를 치고 localhost:3000 에 접속하면 'Hello World'가 떠 있을 것이다.
그러면 노마드 코더 강의를 들을 준비가 된 것이다!

강의를 들으면서 알아둬야 할 것들

HTTP 메소드

출처: https://ryan-han.com/post/translated/pathvariable_queryparam/
http://www.ktword.co.kr/abbr_view.php?m_temp1=3791
https://programmer93.tistory.com/39

GET: GET 요청 방식은 URI(URL)가 가진 정보를 검색하기 위해 서버 측에 요청하는 형태.
ex) 사용자 목록을 가져온다.

POST:내용 전송(파일 전송 가능), 클라이언트에서 서버로 전달하고자하는 정보를 서버로 보냄
ex) 새로운 사용자를 생성한다.

PUT: 내용 갱신 위주(파일 전송 가능), POST처럼 정보를 서버로 제출하는 것이나 보통 갱신 위주다.
ex) 사용자를 갱신한다.

PATCH
ex) 사용자를 갱신한다.

DELETE: 파일 삭제, 웹 리소스를 제거할 때 사용. 하지만, DELETE의 경우 서버에서 클라이언트의 요청을 무시 가능하기 때문에 실제로 삭제되지 않았지만, 클라이언트는 파일이 삭제 되었다고 생각할 수 있다.
ex) 사용자를 삭제한다.

HTTP 메소드 PUT , PATCH 차이

PUT : 리소스의 모든 것을 업데이트 한다.
PATCH : 리소스의 일부를 업데이트 한다.

예를 들어 이름, 나이, 성별, 사는 곳이 적혀있다고 했을 때 PUT이랑 PATCH 둘다 나이만 바꾼다고 해보자.
그러면 PUT은 나이가 갱신이 되지만 나머지 이름, 성별, 사는 곳은 NULL값이 되어버린다.
하지만 PATCH는 나이가 갱신이 되는 건 같지만 나머지 값들은 바뀌지 않고 남아있다.

Param vs Body vs Query 관계

만약 어떤 resource를 식별하고 싶으면 Path Variable을 사용하고,
정렬이나 필터링을 한다면 Query Parameter를 사용하는 것이 Best Practice이다.

@Body

    @Post()
    create(@Body() movieData) {
        console.log(movieData);
        return movieData;
    }

이런 식으로 썼을 때 Body는 Json파일에 모든 내용을 consol에 나타낸다.

@Param

    @Get(':id')
    getOne(@Param('id') movieId: string) {
        return `This whill return one movies with the id: ${movieId}`;
    }

Param은 Path Variable을 받아올 때 사용한다.
위와 같은 코드에서는 http://localhost:3000/movies/42
라고 했을 때

이렇게 아이디 값(42)을 담아낼 수 있다.

@Query

    @Get('search')
    search(@Query('year') searchingYear: string) {
        return `We are searching for a movie made after: ${searchingYear}`;
    }

Query는 Query Parameter를 받아올 때 사용한다.
주소 이후에 "?" 뒤에 있는 변수를 담게 된다.
위와 같은 코드에서는 localhost:3000/movie/search?year=2021일 경우에 year을 초기화 시켜준 2021을 가져오게 된다.

전개 연산자

출처: https://yuddomack.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%AC%B8%EB%B2%95-%EB%B9%84%EA%B5%AC%EC%A1%B0%ED%99%94-%ED%95%A0%EB%8B%B9

...은 전개연산자로

[a1, a2, ...rest_a] = [1,2,3,4,5,6,7,8] 

이라 할 때 a1은 1, a2는 2 그리고 rest_a는 나머지 숫자가 된다.
전개 연산자 뒤로 변수를 입력 또는 좌, 우항이 다른 속성일 경우 에러다.

화살표 함수

출처: https://poiemaweb.com/es6-arrow-function

화살표 함수(Arrow function)는 function 키워드 대신 화살표(=>)를 사용하여 보다 간략한 방법으로 함수를 선언할 수 있다.
화살표 함수의 기본 문법은 다음과 같다.

// 매개변수 지정 방법
    () => { ... } // 매개변수가 없을 경우
     x => { ... } // 매개변수가 한 개인 경우, 소괄호를 생략할 수 있다.
(x, y) => { ... } // 매개변수가 여러 개인 경우, 소괄호를 생략할 수 없다.

// 함수 몸체 지정 방법
x => { return x * x }  // single line block
x => x * x             // 함수 몸체가 한줄의 구문이라면 중괄호를 생략할 수 있으며 암묵적으로 return된다. 위 표현과 동일하다.

() => { return { a: 1 }; }
() => ({ a: 1 })  // 위 표현과 동일하다. 객체 반환시 소괄호를 사용한다.

() => {           // multi line block.
  const x = 10;
  return x * x;
};

test 방법

package.json 파일에 테스팅과 관련된 스크립트가 5가지 정도 있다.

    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"

여기서 jest는 자바스크립트를 아주 쉽게 테스팅하는 npm 패키지이다.
특정 파일을 테스팅하고 싶다면 같은 이름 파일 뒤에 .spec.ts라 붙인 테스팅하는 파일을 만든다.
.spec.ts 파일도 특정한 규칙이 있다.
Nestjs에서는 jest가 .spec.ts 파일들을 찾아 볼 수 있도록 설정 되어있다.

  • 유닛 테스팅은 모든 함수를 따로 테스트하는 방법이다.
    서비스에서 분리된 유닛을 테스트하는 것을 말한다.

  • e2e테스팅은 전체 시스템을 테스트하는 것이다.
    사용자 관점에서 보는 것이다. 사용자가 특정 링크를 클릭하면 이 링크를 볼 수 있어야하는 걸 테스트하는게 e2e테스트이라 한다.
    사용자가 취할만한 액션들을 처음부터 끝까지 테스트하는 것이다.

좋은 웹페이지 즐겨찾기