터미널에 아래의 명령어를 입력하면 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();
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 {}
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번 포트에서 정상작동하는 모습을 볼 수 있습니다.
앞서 컨트롤러 코드에서 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하고 데이터베이스에 이 값들을 담는 법을 살펴보도록 하겠습니다.