보일러플레이트-BackEnd(1)

Ricky·2021년 3월 15일
1

보일러플레이트

목록 보기
1/2
post-thumbnail
post-custom-banner

로그인, 회원가입, 데시보드, 게시판
웹서비스의 기본이되는 기능들로 웹사이트개발시마다 재사용 가능하도록 기본기능을 구현해 보려고 한다.

사용 기술
BACKEND - Nest.js, Typeorm, GraphQL
FRONTEND - React.js

BackEnd

우선은 백엔드를 먼저 구현하도록 한다.
가장 기본이 되는 프레임워크 Nest.js부터 설치해준다.
cli를 설치후 프로젝트 생성

$ npm i -g @nestjs/cli     // nestjs 설치
$ nest new Boilerplate-BE// nestjs 프로젝트 생성    

모듈은 npm으로 사용하도록 합니다.
프로젝트가 생성되었으면 기본서버 설정을 위해 GraphQL, TypeOrm 모듈을 설치해준다

// GraphQL
$ npm i @nestjs/graphql graphql-tools graphql apollo-server-express
// TypeOrm
$ npm install @nestjs/typeorm typeorm mysql2

해당 설치가 끝났으면 src/app.module.ts 에 모듈 설정을 해준다.
(최상위에는 app.module.ts, main.ts 를 제외하고 삭제한다.)

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: true,     //스키마를 메모리에서 즉시 생성
      sortSchema: true,         //스키마를 사전 순으로 정렬
      debug: true,              //디버그 모드 끄고싶을때 false
      playground: true,         //playground 끄고싶을때 false
    }),
    TypeOrmModule.forRoot({
			type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'root',
      database: 'test',
      synchronize: true,
			entities: [],
    })
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

GraphQLModule, TypeOrmModule 로 각각 설정해주고 db정보는 각자 알아서...
여기까지가 기본 설정은 완료하였다 . 설정을 완료하였으니 실행을 한번 해본다

$ npm run start:dev

GraphQLError: Query root type must be provided....... 이런 에러가 나올것이다.
graphQl 에서 쿼리가 없어서 발생하기 때문에 쿼리를 하나 만들어 주자
UserResolver 를 하나 생성해준다.

$ nest g r users
// nest cli 설치했으니 알차게 사용해준다..
// $ nest 실행하면 정보들이 나오니까 참고하자 

Resolver를 만들었으니 테스트 쿼리를 하나 만들어 준다.

import { Query, Resolver } from '@nestjs/graphql';

@Resolver()
export class UsersResolver {
  @Query(returns => String)        // 해당 쿼리의 리턴값 확인
  hi(){
    return 'hi';
  }
}

위와 같이 만들어주고 나면 정상적으로 실행되는 걸 볼수있다.

여기서 플레이그라운드를 한번 확인하고 가자. DOSC를 확인하면 우리가 만들어 놓은 query가 나오느걸 볼수있고 요청한 값이 정상적으로 출력된것을 볼수 있다.

이번에는 typeorm의 기본사용을 한번 알아보도록 하겠다.

제일 기본이 되는 entity 를 생성해줘야 한다.
그전에 모듈을 만들어서 폴더 정리를 하여준다. ( users.module.ts 에는 UsersResolver, appModule > UsersModule)

그 후 entities 폴더를 생성하여 user.entity.ts 파일을 생성해준다.

import { Field, InputType, ObjectType } from "@nestjs/graphql";
import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";

@InputType()
@ObjectType()
@Entity()
export class User {
  @PrimaryGeneratedColumn()
  @Field(() => Number)
  id: number;

  //TypeORM Special Columns
  @CreateDateColumn()
  @Field(() => Date)
  createdAt: Date;

  @UpdateDateColumn()
  @Field(() => Date)
  updatedAt: Date;

  @Column()
  @Field(type => String)
  email: string;

  @Column()
  @Field(type => String)
  password: string;

}

entity 정보를 typeorm 뿐만 아니라 graphql 도 함께 사용하도록 한다.
entity를 생성했으면 해당 엔티티를 typeorm에 추가하며 본다 .
app.module.ts

entities: [User], //엔티티 파일 경로

추가하여 재 실행 되면 자동으로 디비에 테이블이 생성되고 설정한 컬럼도 정상적으로 들어간 것을 볼수 있다.

오늘은 여기까지 기본적이 설정을 완료 하였다.

profile
Developer
post-custom-banner

0개의 댓글