[nest.js] 정글 커뮤니티 만들기 (시작하기)

Laska·2025년 6월 15일
post-thumbnail

핀토스를 마무리하고 드디어 마지막 여정인 나만무의 0주차 커리큘럼까지 왔다...
이 기간은 프레임워크들을 공부하여 나만무에서 쓰일 스택을 공부하는 시간이다.

나는 Django, Spring Boot 로 웹개발 경험이 있는 상태라서, Spring을 더 공부하고 싶었지만, 코치님께서 피드백 해주신 내용들을 종합해본 결과 한번도 써보지 않았던 java script 기반의 프레임워크를 공부해 보기로 했다.

그래서 node.js를 기반으로 둔 Nest.js를 선택하여 동료와 함께 스택을 나눠서 개발하기로 결정하였다.

나는 백엔드 개발 경험이 있어서, Spring Boot와 유사한 구조를 가지고 있는 Nest.js로 0주차 동안 개발해보기로 결정하였다. type script 분법은 생소해서 어려웠지만, 정글을 달려오는 동안 몸에 밴 공부 방식 떄문인지 몇번 끄적이다 보니 적응은 빨랐다. 완전히 언어를 가지고 놀 수 있는 수준은 아니지만, 시간이 없어 개발에 들어가기로 결정하였다.

먼저 우리가 만들기로 결정한건, 정글 커뮤니티 게시판 이다.
CRUD를 실습하는게 목표였기도 하고, 정글에서 다른 반 사람들과 교류할 일이 없다보니,
이런 커뮤니티가 있으면 재밌겠다는 생각이 들어 기획을 하였다.

해당 게시물을 시작으로 계속해서 개발 하는 과정을 적어 놓을 생각이다.


1️⃣ 현재 프로젝트 구성


  • Nest.js 백엔드 기반

  • MySQL DB 사용

  • 프론트와 연동 (React.js)

  • API 기반 CRUD 우선 구현

  • 협업 및 배포 고려 (Railway, swagger)

현재 프론트엔드와 협업을 하는 방식에 있어서 백엔드는 postman으로 API에 대한 확인이 가능하지만, 프론트엔드 입장에 있어서는 연동에 대한 확인이 불편할 수 있기 때문에 협업 및 배포를 고려 하게 되었다.

그래서 swagger를 통한 API 문서화와 Railway를 통한 배포를 통해 협업을 하는 것이 좋지 않을까 라는 생각에 해당 환경으로 작업하기로 하였고, 기획에 대한 것은 현재의 아이디어로 개발하며 차츰 늘려나가기로 결정하였다.



2️⃣ 협업 배포는 왜 ?


협업을 할때 백엔드는 PostMan을 통한 Api작업을 빠르게 가능하지만, 프론트엔드는 해당하는 데이터가 직접 보면서 작업하는 건 힘들다. (백엔드의 로컬 환경을 계속해서 반영해야한다.)


하지만, railway를 사용해서 git hub에 push하며, api를 만들어 나간다면 프론트엔드와 원활한 협업이 가능할 것 같았다. 이슈가 터졌을 떄 즉각 수정하며, 오류를 잡아나갈 수도 있을 것 같다는 생각도 들어서 해당 환경으로 개발을 하기로 결정하였다.



3️⃣ Today is ?


오늘은 공부가 끝나고 현재 프로젝트에 대한 초기세팅을 하기로 했다.

먼저 rail wayMySQL 과 내 프로젝트를 배포 한 후에 세팅 과정을 기술 하려고 한다.

현재 프로젝트 특성상 깃을 통한 배포라서, 데이터베이스에 대한 정보를 감추는 것이 필요했다.

app.module.ts

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserModule } from './user/user.module';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
    }),
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: process.env.DB_HOST,
      port: parseInt(process.env.DB_PORT ?? '3306'),
      username: process.env.DB_USERNAME,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_DATABASE,
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: true, // 개발단계만 true
    }),
    UserModule,
  ],
})
export class AppModule {}

따라서 위와 같이 .env 파일 안에 필요한 정보를 가두고, gitignore.env 파일을 넣어주었다. 해당 방식을 통해 내 정보를 감추고, 배포하는 과정이 가능하였다.


프론트와의 원활한 협업을 위하여, API문서 자동화를 해주는 Swagger를 도입하여 api명세서를 관리하기로 하여서, 해당 설정 또한 초기에 해주었다.


main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());

  // swagger 설정
  const config = new DocumentBuilder()
        .setTitle('정글 커뮤니티 API')
        .setDescription('정글 커뮤니티 백엔드 API 명세서')
        .setVersion('1.0')
        .build();
  
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api', app, document);

  await app.listen(process.env.PORT ?? 3000);
}
bootstrap();

swagger를 사용하기 위해 필요한 모듈을 설치한 후 DocumentBuilder를 통해 초기 작업을 해주었다.


Swagger 연동

이로인해 작업을 할때 명세를 통한 원활한 협업이 가능할 것 같다.

오늘은 초기세팅과 협업 방식을 정하였고,
내일부터는 User에 대한 서비스 로직을 만들어 보기로 하였다.

성공적인 협업과 경험이 되기를.

profile
똑똑해지고 싶어요

0개의 댓글