NestJS 기초 (15) MVC 디자인 패턴 구현하기

2022. 11. 19. 20:45·개발/NestJS

MVC(Model-View-Controller) 패턴은 사용자 인터페이스, 데이터 및 논리 구조를 구현하는  소프트웨어 디자인 패턴입니다. MVC 모델의 핵심은 비즈니스 로직과 화면 구현을 분리하여 관리하는 것입니다.

 

각 요소는 다음과 같은 특징을 갖고 있습니다. 보다 자세한 사항은 MDN의 MVC 설명 문서를 참고해보시기 바랍니다.

  1. 모델(Model): 앱에서 처리할 데이터를 관리합니다. 데이터 상태가 변경되면 뷰 또는 컨트롤러에게 이를 전달합니다.
  2. 뷰(View): 레이아웃과 화면을 처리합니다.
  3. 컨트롤러: 명령을 모델과 뷰 사이에서 사용자 입력에 대한 응답을 처리하는 로직을 포함하고 있습니다.

NestJS에서 MVC 구현하기

이제 NestJS에서 MVC 패턴을 구현해보도록 하겠습니다. 먼저, 새로운 프로젝트를 시작합니다.

$ sudo npm i -g @nestjs/cli
$ nest new proejct

다음으로 View를 처리할 패키지를 설치해줍니다.

$ npm install --save hbs

main.ts 파일을 아래와 같이 설정해줍니다.

// main.ts

import { NestFactory } from '@nestjs/core';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';
import { AppModule } from './app.module';
​
async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
​
  //__dirname은 현재 디렉토리 의미 ..은 상위 폴더를 의미
  // 여기에는 css와 js 정적 파일이 들어감
  app.useStaticAssets(join(__dirname, '..', 'public'));
  app.setBaseViewsDir(join(__dirname, '..', 'views'));
  app.setViewEngine('hbs');
​
  await app.listen(8000);
}
bootstrap();
​

여기까지 하셨다면 프로젝트 폴더에 public과 views 디렉토리를 만들어 줍니다. public 디렉토리에는 css 디렉토리와 js 디렉토리를 만들어줍니다. 여기까지의 폴더 구조는 다음과 같습니다.

 

 

다음으로 views 디렉토리를 만들고 index.hbs 템플릿 파일을 생성합니다.

// index.hbs
​
<html>
  <head>
    <meta charset='utf-8' />
    <title>App</title>
    <link href='css/styles.css' rel='stylesheet' />
  </head>
  <body>
    {{message}}
​
    <script src='js/scripts.js'></script>
  </body>
</html>

 

app.controller 파일을 열고 root() 메소드를 다음과 같이 수정해줍니다.

// app.controller.ts
​
import { Get, Controller, Render } from '@nestjs/common';
​
@Controller()
export class AppController {
  @Get()
  @Render('index')
  root() {
    return { message: 'Hello world!' };
  }
}

이제 서버를 실행하고 http://localhost:8000에 접속하면 Hello world!가 표시됩니다. 

MongoDB 연결하기

마지막으로 MongoDB를 연결해보도록 하겠습니다. 보다 자세한 사항은 몽구스 사용하여 MongoDB 연결하기 포스팅을 참조하실 수 있습니다.

 

먼저, 환경 변수를 사용하기 위해 config 패키지를 설치해줍니다.

$ npm i --save @nestjs/config

다음으로 app.module.ts 파일에서 다음과 같이 MongoDB를 연결해줍니다.

// app.module.ts
​
import { Module, NestModule } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { MongooseModule } from '@nestjs/mongoose';
import mongoose from 'mongoose';
import { AppController } from './app.controller';
import { AppService } from './app.service';
​
@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
    }),
    MongooseModule.forRoot(process.env.MONGODB_URI, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure() {
    const DEBUG = process.env.MODE === 'dev' ? true : false;
    mongoose.set('debug', DEBUG);
  }
}

이상으로 NestJS에서 MVC 패턴을 구현하고 MongoDB를 연결하는 방법에 대해 알아봤습니다. 

 

참고 자료

  • NestJS, Model, View, Controller

 

'개발 > NestJS' 카테고리의 다른 글

NestJS 기초 (14) 이미지 파일 업로드하기  (0) 2022.11.07
NestJS 기초 (13) JWT를 사용한 인증 인가 처리와 데코레이터 구현  (0) 2022.11.01
NestJS 기초 (12) 가드를 사용한 인증과 인가  (0) 2022.10.17
'개발/NestJS' 카테고리의 다른 글
  • NestJS 기초 (14) 이미지 파일 업로드하기
  • NestJS 기초 (13) JWT를 사용한 인증 인가 처리와 데코레이터 구현
  • NestJS 기초 (12) 가드를 사용한 인증과 인가
  • NestJS 기초 (11) API 문서 작성하기 (스웨거)
휘Hwi
휘Hwi
여행, 사진, 개발, 책 이야기를 기록하는 여행자 휘의 블로그 𓂍
Klook.com
  • 휘Hwi
    휘: 끝나지 않은 이야기
    휘Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기록
        • 일상 에세이
        • 인사이트
        • 투자와 재테크
        • 코인 이야기
        • 아카이빙
        • 집무실 레터
        • 사랑에 대하여
        • 번역 이야기(完)
        • 프리랜서 일지(完)
      • 여행
        • 🌎 세계 여행기 S1 (完)
        • 🌊 삼삼한 여행기 (完)
        • 🚶 온더로드
        • 🇯🇵 일본
        • 🏝️ 발리
        • 🇻🇳 베트남
        • 🇱🇰 스리랑카
        • 🇮🇳 인도
        • 🇹🇭 태국
        • 🇸🇬 싱가포르
        • 🇦🇺 호주
        • 🇭🇰 홍콩
        • 🇰🇷 한국
        • 🍚 여행자의 한 끼
        • ℹ️ 여행 정보
      • 사진
        • 사진가
        • 사진 이론과 생각
        • 사진 관련 정보
      • 영상
        • 파이널컷 모션 공부
        • 고프로 GoPro
        • 영상 관련 정보
      • 책
        • 책 읽고 쓰기
      • 개발
        • 티스토리
        • Internet
        • HTML
        • CSS
        • JavaScript
        • Typescript
        • React
        • Node.js
        • Express
        • NestJS
        • Python
        • Django
        • MySQL
        • MongoDB
        • AWS
        • Deployment
        • Terminal
        • Git
        • Glossaries
        • Articles
        • Projects
        • TIL;
      • 미분류
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
휘Hwi
NestJS 기초 (15) MVC 디자인 패턴 구현하기
상단으로

티스토리툴바