E-commerce Application(Nest js Microservice) - 2. Auth-Service(1)

yellow_note·2021년 8월 17일
0

#1 프로젝트 설치 및 user 모듈 환경만들기

터미널에 아래의 명령어를 입력하면 auth-service라는 이름으로 nest 프로젝트가 생성됩니다.

nest new auth-service

nest generate module user
nest generate controller user
nest generate service user

명령어를 통해 user 관련 기본적인 모듈들을 생성해줍니다. 위 명령어들을 입력하면 자동적으로
user.module.ts 파일에 controllers, providers에 UserController와 UserService값이 들어가있는 모습을 볼 수 있습니다.

그리고 main.ts파일에서 포트번호를 변경하여 auth-service의 포트를 7000번으로 맞추도록 하겠습니다.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(7000); // on PORT 7000
}

bootstrap();

#2 mysql 연동

npm install --save @nestjs/typeorm typeorm mysql

명령어를 통해서 @nestjs/typeorm typeorm mysql을 설치하도록 합니다. 그리고 공식 문서에 나와있듯이 app.module.ts파일에 다음과 같이 코드를 입력하겠습니다.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  // set mysql
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: '사용자 비밀번호',
      database: 'auth',
      autoLoadEntities: true,
      synchronize: true,
    }),
    UserModule
  ],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {}

#3 Controller

user.controller.ts 파일 작업을 통해 auth-service가 정상적으로 작동하는지 안하는지 확인해보도록 하겠습니다.

user.controller.ts

import { Controller, Get, Param, Post } from '@nestjs/common';

@Controller('users')
export class UserController {
    @Get('status')
    getStatus() {
        return "auth-serivce is working successfully";
    }

    @Post('register')
    register() {
        return "";
    }

    @Post('login')
    login() {
        return "";
    }

    @Get(':userId')
    getUser(@Param('userId') userId: string) {
        return "";
    }

    @Get()
    getAll() {
        return "This will return all users";
    }
}

컨트롤러 코드를 완성하고 localhost:7000/users/status으로 get request를 보내어 정상작동하는지 확인해보도록 하겠습니다.

터미널에 아래 명령어를 입력해주세요.

npm run start:dev

그리고 postman으로 request를 보내보겠습니다.

사진처럼 auth-service가 7000번 포트에서 정상작동하는 모습을 볼 수 있습니다.

#4 request data 확인하기

앞서 컨트롤러 코드에서 getUser 메서드에는 @param이라는 데코레이터를 볼 수 있습니다. 스프링으로 따지면 @PathVariable과 같은 역할을 하는 데코레이터인데요, 이 데코레이터는 가령 www.biuea.com/users/1과 같은 요청이 들어왔을 때 users는 컨트롤러 데코레이터의 prefix에 해당하고 1은 getUser의 @param에 해당하는 값이 됩니다. 이런 식으로 @Body데코레이터도 활용하여 실제 로그인, 회원가입과 같은 데이터가 어떻게 들어오는지 확인을 해보도록 하겠습니다.

import { Body, Controller, Get, Param, Patch, Post } from '@nestjs/common';

@Controller('users')
export class UserController {
    @Get('status')
    getStatus() {
        return "auth-serivce is working successfully";
    }

    @Post('register')
    register(@Body() requestRegister) {
        return {
        	...requestRegister
        };
    }

    @Post('login')
    login(@Body() requestLogin) {
        return {
        	...requestLogin
        };
    }

    @Get(':userId')
    getUser(@Param('userId') userId: string) {
        return userId;
    }

    @Get()
    getAll() {
        return "This will return all users";
    }

    @Patch(":userId")
    updateUser(
        @Param('userId') userId: string,
        @Body() requestUpdate
    ) {
        return {
            data: userId,
            ...requestUpdate
        };
    }
}

1) requestRegister

2) requestLogin

3) getUser

4) requestUpdate

위 결과들처럼 모든 api에서 정상작동하는 모습들을 살펴볼 수 있습니다.

다음 게시글에서는 service와 dto를 작성하고 mysql과 연동하여 실제로 데이터를 request하고 데이터베이스에 이 값들을 담는 법을 살펴보도록 하겠습니다.

0개의 댓글

관련 채용 정보