본문 바로가기
사이드 프로젝트/로그인 & 회원가입 & 결제

로그인, 회원가입, 결제 기능 프로젝트 기획, NestJS와 TypeORM 채택

by 코드스니펫 2024. 3. 18.
반응형

로그인, 회원가입, 결제 기능 프로젝트 기획, NestJS와 TypeORM 채택

 

login icon

 

내일배움캠프의 교육이 끝나고나서 사이드 프로젝트로 진행하는 로그인, 회원가입, 결제 기능 프로젝트입니다. 이번 프로젝트에서 사용할 NestJS와 TypeORM에 대해 각각의 특징과 장점에 대해 정리해보았습니다.

 

 

NestJS에 대해

 

nestJS 로고

 

NestJS, 현대 웹 애플리케이션을 위한 종합 프레임워크

NestJS는 서버 측 애플리케이션을 구축하기 위해 TypeScript를 활용하는 진보적인 Node.js 프레임워크입니다. 기본적으로, NestJS는 Express나 Fastify를 감싸고 있어 개발자들이 기본 HTTP 서버 프레임워크를 선택할 수 있게 합니다. 하지만, NestJS는 이 프레임워크들 위에 단순한 추상화를 제공하는 것을 넘어, 일반적인 웹 개발 도전과제를 해결하기 위해 많은 내장 모듈과 기능으로 개발 경험을 풍부하게 하는 장점이 있습니다.

 

 

모듈화 및 유지보수 가능한 코드베이스

angular 로고

 

NestJS의 주요 영향 중 하나는 모듈러 아키텍처로 유명한 인기 있는 프론트엔드 프레임워크인 Angular입니다. NestJS는 비슷한 접근 방식을 채택하여 개발자들이 애플리케이션을 재사용 가능한 모듈과 컴포넌트로 구성할 수 있게 합니다. 이 모듈러 아키텍처는 코드 재사용성을 향상시킬 뿐만 아니라, 각 모듈이 독립적으로 개발되고 테스트될 수 있기 때문에 유지보수를 단순화합니다.

 

 

TypeScript 채택

typescript logo

 

TypeScript를 기본 프로그래밍 언어로 삼음으로써, NestJS는 강력한 타이핑의 이점을 개발자들에게 제공합니다. TypeScript의 정적 타입 검사는 컴파일 시간에 오류를 잡아내어 런타임 오류를 크게 줄이고 코드 품질을 개선합니다. 또한, TypeScript의 인기와 커뮤니티 지원은 많은 개발자들에게 바람직한 선택으로 만듭니다.

 

 

내장 애플리케이션 기능

NestJS는 데이터베이스 통합, ORM 지원, 설정 관리, 검증 등과 같은 광범위한 내장 기능을 제공합니다. 이러한 종합적인 기능 세트는 개발자들이 제3자 라이브러리를 연결하는 데 시간을 적게 들이고 애플리케이션의 고유한 기능을 구축하는 데 더 많은 시간을 할애할 수 있게 합니다.

 

▼ nestJS 공식문서 ▼

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea

docs.nestjs.com

 

 

Express와 NestJS 비교

 

Node.js 기반의 웹 애플리케이션 개발 시, 프레임워크 선택은 프로젝트의 성공에 큰 영향을 미칩니다. 이러한 중요한 결정 과정에서 NestJS를 선택한 이유를 Express와 비교하여 상세하게 설명하고자 합니다. 특히, 로그인, 회원가입, 결제 등의 기능을 포함하는 프로젝트에 있어 NestJS의 장점이 어떻게 빛나는지 알아보겠습니다.

 

Express

유연함과 확장성: Express는 Node.js의 가장 기본적인 웹 프레임워크로, 매우 가볍고 빠른 서버 구축이 가능합니다. 하지만, 이 유연성은 필요한 기능을 직접 찾아서 구현해야 하는 번거로움을 가져올 수 있습니다.

 

Typescript 지원: Express는 자바스크립트를 기반으로 하며, Typescript를 사용하기 위해서는 추가 설정이 필요합니다.

 

커뮤니티: 가장 큰 커뮤니티를 보유하고 있어, 다양한 문제에 대한 해결책을 찾기 용이합니다.

 

 

NestJS

프레임워크 자체 기능: NestJS는 Express 위에 구축되어 있으면서도, IoC, 미들웨어, CQRS 등 다양한 기능을 프레임워크 자체에서 제공합니다. 이로 인해 개발자는 보다 복잡한 애플리케이션을 손쉽게 구축할 수 있습니다.

 

Typescript 기본 설정: NestJS는 타입스크립트를 기본으로 사용하며, 강력한 타입 시스템을 통해 개발 과정에서 발생할 수 있는 오류를 최소화합니다.

 

커뮤니티: NestJS의 커뮤니티는 꾸준히 성장하고 있으며, 사용자가 늘어남에 따라 지원과 정보 공유가 활발해지고 있습니다.

 

 

login logo

 

로그인 & 회원가입 & 결제 프로젝트를 위한 NestJS의 선택

NestJS를 선택한 이유는 바로 프로젝트의 복잡성과 개발의 효율성을 동시에 해결할 수 있는 프레임워크의 필요성에서 비롯됩니다. 로그인, 회원가입, 결제와 같은 기능을 구현할 때, 보안, 데이터 관리, 트랜잭션 처리 등 고려해야 할 사항이 많습니다. NestJS는 이러한 요구사항을 효율적으로 관리할 수 있는 강력한 기능을 제공합니다.

 

Express 사용 예시

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.json());

app.post('/register', (req, res) => {
    // 사용자 등록 로직
});

app.listen(3000, () => console.log('Server running on port 3000'));

 

 

NestJS 사용 예시

import { Controller, Post, Body } from '@nestjs/common';
import { UsersService } from './users.service';
import { CreateUserDto } from './create-user.dto';

@Controller('users')
export class UsersController {
    constructor(private usersService: UsersService) {}

    @Post()
    async register(@Body() createUserDto: CreateUserDto) {
        return this.usersService.create(createUserDto);
    }
}

 

NestJS 예시에서 볼 수 있듯, NestJS는 타입스크립트의 장점을 활용하여 DTO(Data Transfer Object)를 통해 입력 데이터의 유효성 검사를 자동으로 수행할 수 있습니다. 또한, UsersService를 통해 비즈니스 로직을 분리함으로써 코드의 재사용성과 유지보수성을 높일 수 있습니다.

 

로그인, 회원가입, 결제 기능을 포함하는 웹 애플리케이션 개발에 있어서 NestJS는 Express 대비 높은 생산성, 강력한 타입 시스템, 그리고 애플리케이션 아키텍처 구성에 있어서의 이점을 제공한다고 생각합니다. 

 

 

TypeORM에 대해

 

typeorm logo

 

▼ typeORM 공식 문서 ▼

 

TypeORM - Amazing ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server,

 

typeorm.io

 

TypeORM은 TypeScript와 밀접하게 연결된 ORM(Object-Relational Mapping) 라이브러리입니다. 개발자들이 데이터베이스를 더 직관적이고 객체 지향적인 방식으로 작업할 수 있게 하여, 직접적인 데이터베이스 조작의 복잡성을 추상화합니다.

 

원활한 데이터베이스 통합

TypeORM은 다양한 데이터베이스 시스템을 지원하여 프로젝트에 적합한 데이터베이스를 선택할 수 있는 유연성을 제공합니다. NestJS의 모듈 시스템과 TypeORM의 데코레이터는 엔터티와 관계를 선언적으로 정의하는 방법을 제공하여 통합이 간단합니다.

 

 

데이터 조작 단순화

TypeORM은 CRUD 작업을 단순화하여 데이터 조작 작업을 더 쉽게 만들고 보일러플레이트 코드(최소한의 변경으로 여러곳에서 재사용되며, 반복적으로 비슷한 형태를 띄는 코드)를 줄입니다.

 

리포지토리와 액티브 레코드 패턴(데이터베이스의 데이터에 액세스하는 접근 방식)은 데이터베이스와의 상호작용 방식에 있어 개발자에게 선택권을 제공하여 다양한 코딩 스타일과 선호도를 충족시킵니다.

 

 

로그인 화면 이모티콘화

 

극복해야하는 도전과제

 

NestJS와 TypeORM은 웹 애플리케이션을 위한 견고한 기반을 제공하지만, 개발시 학습 곡선과 성능 고려 사항과 같은 도전과제에 직면할 수 있을 것으로 예상합니다.

 

학습 곡선

NestJS와 TypeORM의 종합적인 특성은 새로운 도구에 익숙하지 않은 개발자에게 학습 곡선이 있을 수 있습니다. 그러나 풍부한 문서, 활발한 커뮤니티, 온라인에 제공되는 다수의 튜토리얼을 통해 이 전환을 용이하게 할 수 있습니다.

 

* 프로젝트 진행시 참고할 자료 모음

 

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea

docs.nestjs.com

 

 

NestJS로 배우는 백엔드 프로그래밍

> # 제이펍에서 책이 출간되었습니다. > [교보문고](https://product.kyobobook.co.kr/detail/S000200383301) / [예스24]() /…

wikidocs.net

 

 

성능 고려 사항

NestJS와 TypeORM은 확장성과 성능을 염두에 두고 설계되었지만, 모든 프레임워크나 라이브러리와 마찬가지로 부적절한 사용은 성능 병목 현상을 초래할 수 있습니다. 모든 개발자들이 그렇겠지만 데이터베이스 쿼리 최적화, 캐싱 활용 등의 최선의 방법을 따라 애플리케이션이 규모에 맞게 효율적으로 운영되도록 해야 합니다.

 

 

사용자 등록 기능을 위한 NestJS와 TypeORM 샘플 코드

아래는 기존 프로젝트에서 작업한 NestJS와 TypeORM을 사용하여 사용자 등록 기능을 구현했던 코드 중 일부입니다.

 

import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  email: string;

  @Column()
  password: string;
}

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  controllers: [UsersController],
  providers: [UsersService],
})
export class UsersModule {}

 

이 코드는 사용자 엔터티와 해당 모듈의 기본 구조를 개요하여 NestJS 애플리케이션 내에서 TypeORM을 통합하는 방법을 보여줍니다. 모델을 정의하고 서비스 및 컨트롤러를 연결하는 NestJS의 접근 방식과 데이터베이스 상호 작용을 위한 TypeORM의 ORM 기능을 활용하는 것이 얼마나 간단한지 보여줍니다.

 


 

끝으로

NestJS와 TypeORM은 웹 애플리케이션을 구축하기 위한 강력하고, 확장 가능하며, 개발자 친화적인 스택을 제공합니다. 종합적인 기능 세트, TypeScript와의 강력한 타이핑, 그리고 모듈러 아키텍처는 사용자 인증과 결제 처리와 같은 복잡한 기능을 요구하는 프로젝트에 탁월한 선택이라 생각합니다. 잠재적인 도전과제를 해결하고 두 도구의 강점을 활용함으로써, 개발자는 효율적이고, 유지보수가 용이하며, 고품질의 웹 애플리케이션을 구축할 수 있을것으로 기대합니다.

 

▼ 이전 진행한 프로젝트 ▼

 

 

축구팀 관리 프로젝트 - 경기 데이터 기반 추천 포메이션 기능

축구팀 관리 프로젝트 - 경기 데이터 기반 추천 포메이션 기능 축구 경기의 승리는 수많은 변수에 의해 결정되며, 이 중에서도 '포메이션'은 경기의 결과에 큰 영향을 미칩니다. 그러나, 많은 팀

lemonlog.tistory.com

 

 

내일배움캠프 Node트랙 심화 프로젝트 역할 및 진행사항

내일배움캠프 Node트랙 심화 프로젝트 역할 및 진행사항 이번 프로젝트는 팀 프로젝트로 Node트랙 심화 프로젝트를 진행하게 되었습니다. 프로젝트를 시작하며 팀에서 맡은 역할과 현재 진행사항

lemonlog.tistory.com