TIL day 14

어니언·2023년 2월 1일
0
post-thumbnail

오늘은 지난번에 배웠던 DI, IoC, 타입스크립트등을 이제 직접 쓰는 것이 아닌 골격이 만들어 져있는 nest.js 사용법에 대해서 학습을 하였다,

nest.js란 기존의 node.js에서 너무나 높은 자유도로 인해 하나하나 개발자가 모든 설정을 다 지정해줬어야 했다. 이러한 자유로움은 장점도 많지만 프로젝트와 같은 협업을 진행할 경우 개발자간의 다양한 코드작성 방법때문에 많은 에러를 만날 수 있게됩니다. 규모가 커질수록 협업과 소통에드는 비용과 시간이 많이 증가하며, 이는 생산성을 떨어뜨리고 유지보수를 하는데 있어 큰 문제로 이어집니다. 그래서 자바에서의 spring과 같은 프레임워크를 만든 것이 바로 nest.js이다.

nest.js의 장점
효율성
nest.js는 구조를 통일시킴으로써 개발자와 협업을 진행하는 사람들과 고도의 테스트를 가능하게하고, 확장성도 높이며 유지관리를 쉽게할 수 있도록 도와줍니다.

안정성
타입스크립트를 도입함으로써 코드 작성시 발생가능한 오류들을 사전에 방지할 수 있도록 하였고, 세부적인 모듈로 나누어져있어 독립적으로 모듈별로 테스트를 할 수 있도록 구현되어있어 안정성을 높인다.

확장성
모듈클래스를 지원하기때문에, 각 모듈들은 비슷한 기능과 개념들을 한 클래스에 담아 캡슐화하고 import를통해 코드가 연결될 수 있도록 구현되어있어 코드들을 조직화하여 느슨한결합을 통해 확장성과 테스트 가능성을 높입니다.

nest.js기반의 기본 세팅

  1. src폴더 내부에 apis와 common폴더를 생성한다.
- `apis` : API 폴더
- `common` : 모든 API 에서 공통적으로 사용되는 것들을 따로 빼놓는 폴더
`
2. apis폴더 내부에 boards 폴더를 생성한다.(boadrs는 이름이 변경될 수 있다.)
`
board 폴더 안에는 `게시물 관련 API` 가 들어가게 됩니다.

따라서, board 폴더 안에 `boards.module.ts` , `boards.resolver.ts`, `boards.service.ts` 파일을 만들어 주세요.

- `.module.ts` : .resolver.ts + .service.ts 합쳐주는 파일
- `.resolver.ts`  : 실질적 API 로직
    - .controller.ts 와 같은 파일로 이름만 다른 파일입니다. 앞으로 controller 대신에 resolver 를 사용하게 될 것입니다.
- `.service.ts` : 핵심 비즈니스 로직

Graph-QL-API

이전 수업에서는 rest-api를 이용하여 코드를 작성한것을 실행하였는데 이번에는 graphql을 통해 작성한것을 실행해보았다. 처음 graphql을 학습햇을 때는 rest-api방식에서 스웨거와 같은 기능을 코드를 작성하여 하는 schema first를 했었다. 우리가 정의를하고 그 정의에 맞게 입력을하면 값들이 나왔었다.
예시)

// cat.graphql

type Query {
  cats: [Cat]
  cat(id: ID!): Cat
}

type Mutation {
  createCat(createCatInput: CreateCatInput): Cat
}

type Subscription {
  catCreated: Cat
}

이번엔 타입스크립트와 데코레이터를 사용하여 먼저 작성한 resolver를 기반으로 graphql에 스키마를 자동생성하도록 하는 방법을 배웠다. 이 방식의 장점으로는 중복이 최소화 된다는 장점이 존재하는 것이고 단점으로는 schema first에 비해 직관적이지 못한 것이라고 할 수 있다.

예시)

// cat.graphql

type Query {
  cats: [Cat]
  cat(id: ID!): Cat
}

type Mutation {
  createCat(createCatInput: CreateCatInput): Cat
}

type Subscription {
  catCreated: Cat
}
profile
안녕하세요.

0개의 댓글