[NestJS-study] NestJS 기본 구조 로직 흐름

JooSehyun·2024년 8월 7일
0

[Study]

목록 보기
39/56
post-thumbnail

[NestJS-study] NestJS 기본 구조 로직 흐름


설치를 하고 npm run start:dev 로 하고 await app.listen(3000); 로 설정된 http://localhost:3000/ 으로 들어가면 'Hello World!' 가 나온다. 해당 파일을 보고 어떻게 실행이 되는지 알아보자.


src 폴더 구조

src/
|
├── app.controller.spec.ts
|
├── app.controller.ts
|
├── app.module.ts
|
├── app.service.ts
|
└── main.ts

main.ts

import { NestFactory } from '@nestjs/core'; 🔵 NestJS의 핵심 모듈인 NestFactory를 가져옵니다.
import { AppModule } from './app.module'; 🔵 애플리케이션의 루트 모듈인 AppModule을 가져옵니다.

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000); 🔵 애플리케이션이 3000번 포트에서 수신 대기하도록 설정합니다. 
}
bootstrap();

app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

app.controller.ts

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get() 🔵 '/' 엔드포인트 
  getHello(): string {
    return this.appService.getHello(); 
  }
}

app.service.ts

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  🔵 리턴 헬로 월드!
  getHello(): string {
    return 'Hello World!';
  }
}

express.js 와 Nest.js 비교

express.js

server.js 진입점

app.use('/api/user', require('./routes/user')); 🔵 ex) 유저에 관한 => ./routes/user
app.use('/api/board', require('./routes/board')); 
app.use('/api/auth', require('./routes/auth'));

routes/user.route.js

router.get("/", userController.getUsers); 🔵 ex) 유저 ./routes/user => 모든유저를..
router.get("/:bandId", userController.getUser); 🔵 ex) 유저 ./routes/user => 특정유저를..
router.put("/", userController.updateUser);
router.delete("/", userController.deleteUser);

controllers/users.js

🔵 ex) 모든유저를 가져오는 함수
export const getUsers = async(req, res) {
	let users = db.getUsers();
    return users
}

Nest.js

app.module.ts 진입점

@Module({
	imports: [
    	TypeOrmModule.forRoot(typeORMConfig),
      	BoardsModule, 🔵 ex) 게시물에 관한 => board.controller.ts
      	AuthModule,
      	UserModule
    ],
})
export class AppModule {}

board.controller.ts

@Get() 🔵 엔드포인트 => board.service.ts
getAllBoards(
	@GetUser() user: User,
) : Promise<Board[]> {
  this.logger.verbose('User "${user.username} trying ... all boards`);
  return this.boardsService.getAllBoards(user);
}

@Get('/:id') 🔵 엔드포인트
getBoardById(
	@Param('id', ParseIntPipe) id: number,
  	@GetUser() user: User,
) : Promise<Board> {
	return this.boardsService.getBoardById(id, user);
} 

board.service.ts

🔵 DB작업 , 연산 => return 

async getAllBoards(
	user: User,
) : Promise<Board[]> {
	const query = this.boardRepository.createQueryBuilder('board');

	query.where('board.userId = :userId', { userId: user.id})

	const boards = await query.getMany();
	return boards;
}

출처: JhonAhn님의 유튜브 강의 NestJS를 참고하여 작성하였습니다.

0개의 댓글