NEXT JS로 CRUD 만들기 ( 기본 요소 )

sangyong park·2023년 4월 4일
0

NEXT JS 기본 구조

eslintrc.js

  • 개발자들이 특정한 규칙을 가지고 코드를 깔끔하게 짤수있게 도와주는 라이브러리 타입스크립트를 쓰는 가이드 라 인 제시, 문법에 오류가 나면 알려주는 역할 등등

prettierrc

  • 주로 코드 형식을 맞추는데 사용한다. 작은따옴표(')를 사용 할지 큰 따옴표(")를 사용할지, Indent 값을 2로 줄지 4로 줄지 등등, 에러 찾는것이 아닌 코드 포맷터 역할.

nest-cli.json

  • nest 프로젝트를 위해 특정한 설정을 할 수 있는 json 파일

tsconfig.json
- 어떻게 타입스크립트를 컴파일 할지 설정

tsconfig.build.json

  • sconfig.json의 연장선상 파일 이며 , build를 할 때 필요한 설정들 "excludes"에서는 빌드할 때 필요 없는 파일들 명시

package.json

  • build : 운영환경을 위한 빌드 / format : 린트에러가 났을지 수정 / start: 앱 시작

src

  • main.ts : 앱을 생성하고 실행 / app.module.ts : 앱 모듈을 정의

NextJS 모듈이란 ?

Nest JS를 사용해서 만드는 앱 구조

App Module안에 BoardModule과 AuthModule이 있으면 각 모듈안에 Controller Entity Service등이 있다. 우선 모듈(Module)이 무엇인지 알아보자.

모듈은 @Module () 데코레이터로 주석이 달린 클래스이다. @Module () 데코레이터는 Nest가 어플리케이션 구조를 구성하는데 사용하는 메타 데이터를 제공한다.

각 응용 프로그램에는 하나 이상의 루트 모듈이 있다. 루트 모듈은 Nest가 사용하는 시작점이다.

모듈은 밀접하게 관련된 기능 집합으로 구성 요소를 구성하는 효과적인 방법이다.
ex) 유저 모듈, 주문 모듈, 챗 모듈...

같은 기능에 해당하는 것들은 하나의 모듈 폴더안에 넣어서 사용한다. (UserController, UserService, UserEntity 다 같은 기능이기에 UserModule안에 넣는다.)

모듈은 기본적으로 싱글 톤이므로 여러 모듈간에 쉽게 공급자의 동일한 인스턴스를 공유 할 수 있습니다.

Board Module 생성하기

CRUD 기능을 만들기 위해서는 아래와 같은 두개의 모듈이 필요하다.

모듈 생성하기

module 생성 명령어

 nest g module boards

이렇게 생성한 boards 모듈을 사용하기 위해서는 루트 모듈에 등록해 주어야한다.

npm run start:dev로 잘 실행되는지 확인

NextJS Controller란 ?

컨트롤러는 클라이언트에서 들어오는 요청을 처리하고 클라이언트에 응답을 반환한다.

컨트롤러는 @Controller 데코레이터로 클래스를 데코레이션하여 정의된다.

Handler 란 ?

핸들러는 @Get, @Post, @Delete 등과 같은 데코레이터로 장식 된 컨트롤러 클래스 내의 단순한 메서드이다. 원하는 동작을 처리 해주는 핸들러

Boards Controller 생성

nest g controller boards --no-spec

  • nest: using nestcli
  • g: generate
  • controller: controller schematic
  • boards: name of the schematic
  • --no-spec: 테스트를 위한 소스 코드 생성 x

CLI로 명령어 입력 시 Controller 만드는 순서

cli는 먼저 boards 폴더를 찾는다. boards 폴더 안에 controller 파일을 생성한다. boards 폴더안에 module 폴더를 찾고, module 파일안에 controller를 넣어준다.

NextJS의 Providers, Service란 ?

Provider란

Provider 에는 서비스, 팩토리 등이 포함된다.

Provider 의 가장 메인 아이디어는 의존성으로서 주입될 수 있다는 데에 있다.

의존성 주입을 통해 서로 다른 객체들이 다양한 관계를 맺을 수 있다. 물론 모듈에 필요한 Provider 들을 정의하고, 실제 시스템에 반영되는 내부적인 작업은 Nest 런타임 시스템이 위임하여 처리한다고 한다.

Provider 는 주로 Controller 를 통해 전달받은 요청에 대하여 복잡한 기능을 수행하는 비즈니스 로직이 담긴다.

Service란

@Injectable 데코레이터로 감싸져서 모듈에 제공되며, 이 서비스 인스턴스는 애플리
케이션 전체에서 사용 될 수 있다.

서비스는 컨트롤러에서 데이터의 유효성 체크를 하거나 데이터베이스에 아이템을 생하는 등의 작업을 처리하는 부분이다.

Boards Service 만들기

Service 안에서는 데이터베이스 관련된 로직을 처리한다. 데이터베이스에서 데이터를 가져오거나 데이터베이스안에 게시판 생성할때 그 생성한 게시판 정보를 넣어 주는 등의 로직을 처리한다.

nest g service boards --no-spec

Boards Service

CLI를 이용해서 Service를 생성하면 이렇게 boards.service.ts 파일이 생성된다.

이 생성된 파일 안에는 Injectable 데코레이터가 있으며 이 NestJS는 이것을 이용해서
다른 컴포넌트에서 이 서비스를 사용 할 수있게(Injectable)만들어준다.

그리고 CLI로 Service 생성시에는 module에도 자동으로 Service가 추가된다.

profile
Dreams don't run away It is always myself who runs away.

0개의 댓글