오늘은 지난번에 배웠던 DI, IoC, 타입스크립트등을 이제 직접 쓰는 것이 아닌 골격이 만들어 져있는 nest.js 사용법에 대해서 학습을 하였다,
nest.js란 기존의 node.js에서 너무나 높은 자유도로 인해 하나하나 개발자가 모든 설정을 다 지정해줬어야 했다. 이러한 자유로움은 장점도 많지만 프로젝트와 같은 협업을 진행할 경우 개발자간의 다양한 코드작성 방법때문에 많은 에러를 만날 수 있게됩니다. 규모가 커질수록 협업과 소통에드는 비용과 시간이 많이 증가하며, 이는 생산성을 떨어뜨리고 유지보수를 하는데 있어 큰 문제로 이어집니다. 그래서 자바에서의 spring과 같은 프레임워크를 만든 것이 바로 nest.js이다.
nest.js의 장점
효율성
nest.js는 구조를 통일시킴으로써 개발자와 협업을 진행하는 사람들과 고도의 테스트를 가능하게하고, 확장성도 높이며 유지관리를 쉽게할 수 있도록 도와줍니다.
안정성
타입스크립트를 도입함으로써 코드 작성시 발생가능한 오류들을 사전에 방지할 수 있도록 하였고, 세부적인 모듈로 나누어져있어 독립적으로 모듈별로 테스트를 할 수 있도록 구현되어있어 안정성을 높인다.
확장성
모듈클래스를 지원하기때문에, 각 모듈들은 비슷한 기능과 개념들을 한 클래스에 담아 캡슐화하고 import를통해 코드가 연결될 수 있도록 구현되어있어 코드들을 조직화하여 느슨한결합을 통해 확장성과 테스트 가능성을 높입니다.
nest.js기반의 기본 세팅
- `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
}