"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > GraphQL, Redis, JWT 및 Sequelize와 관련된 Node.js 스타터 프로젝트

GraphQL, Redis, JWT 및 Sequelize와 관련된 Node.js 스타터 프로젝트

2024년 12월 22일에 게시됨
검색:332

Node.js Starter Project dengan GraphQL, Redis, JWT, dan Sequelize

이 템플릿은 API용 GraphQL, API용 Redis로 구성된 Node.js 스타터 프로젝트를 제공합니다. 캐싱 및 임시 데이터 저장, 인증 및 권한 부여를 위한 JWT, ORM을 위한 Sequelize PostgreSQL 또는 MySQL과 같은 관계형 데이터베이스에 연결됩니다. 이 프로젝트는 통합되고 확장 가능한 기능을 갖춘 최신 웹 애플리케이션을 즉시 개발할 수 있는 모듈식 구조를 가지고 있습니다.

? 프로젝트 개요

이 프로젝트는 데이터 캐싱을 위해 Redis를 사용하고 API 보안을 위해 JWT를 사용하는 GraphQL API를 사용하여 백엔드 애플리케이션을 보다 쉽게 ​​개발할 수 있도록 설계되었습니다. Sequelize는 관계형 데이터베이스와의 상호 작용을 촉진하기 위한 ORM으로 사용됩니다. 또한 인증, 검증, 로깅을 보다 쉽게 ​​처리할 수 있는 미들웨어도 있습니다.

주요 특징

  • 보다 유연하고 효율적인 쿼리 및 데이터 변형을 위한 GraphQL API
  • JWT 인증 보안 토큰 기반 인증
  • Redis 데이터 캐싱 및 애플리케이션 성능 향상
  • 관계형 데이터베이스 관리를 위한 ORM 연속화
  • 미들웨어 중앙 집중식 승인 및 요청 처리
  • 확장성과 손쉬운 유지 관리를 위한 모듈식 및 구조적

?️ 사용된 기술

  • Node.js: JavaScript를 사용하여 서버측 애플리케이션을 구축하기 위한 플랫폼입니다. 자세히 알아보기
  • GraphQL: 효율적이고 유연한 데이터 검색을 가능하게 하는 API용 쿼리 언어입니다. 자세히 알아보기
  • Redis: 캐싱 및 메시지 중개에 자주 사용되는 임시 데이터 저장소(메모리 내)입니다. 자세히 알아보기
  • JWT: 안전하고 간단한 토큰 기반 인증 기술입니다. 자세히 알아보기
  • Sequelize: PostgreSQL, MySQL 및 기타 관계형 데이터베이스를 지원하는 Node.js용 ORM입니다. 자세히 알아보기

? 프로젝트 설정 및 실행 단계

1. 복제 저장소

우선, 이 템플릿 저장소를 로컬 머신에 복제하세요:

git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api

처음부터 시작하는 경우 다음을 사용하여 새 프로젝트를 초기화하세요.

mkdir blog-api
cd blog-api
npm init -y

2. 종속성 설치

저장소를 복제하거나 새 프로젝트를 생성한 후 다음 명령을 실행하여 필요한 종속성을 설치합니다.

yarn install

이렇게 하면 package.json 파일에 나열된 모든 종속성이 설치됩니다.


3. 환경 구성

프로젝트 루트 디렉터리에 .env 파일을 생성하고 Redis, JWT데이터베이스:
에 대해 다음 구성을 추가합니다.

DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase"
JWT_SECRET="your_jwt_secret_key"
REDIS_HOST="localhost"
REDIS_PORT="6379"

데이터베이스 구성에 따라 사용자, 비밀번호 및 mydatabase를 변경합니다.


4. Sequelize로 데이터베이스 준비

구성된 데이터베이스가 없는 경우 다음 명령을 실행하여 Sequelize를 초기화하고 모델을 생성하세요.

yarn sequelize init

이렇게 하면 프로젝트 내에 구성, 모델 및 마이그레이션 디렉터리 구조가 생성됩니다. 다음으로 User, Post 등 애플리케이션에 필요한 모델을 생성하고 마이그레이션을 수행하여 데이터베이스에 테이블을 생성합니다.

yarn sequelize db:migrate

데이터베이스가 실행 중인지 확인하세요(예: PostgreSQL 또는 MySQL 사용).


5. GraphQL 서버 설정

Apollo Server 및 GraphQL에 대한 종속성 설치:

yarn add apollo-server graphql

그런 다음 GraphQL 서버 구성 파일, 스키마 및 해석기를 생성합니다. 다음과 같은 방법으로 GraphQL 서버를 구성할 수 있습니다:

src/server.ts

import { ApolloServer } from 'apollo-server-express';
import express from 'express';
import { typeDefs, resolvers } from './graphql';
import { authenticateJWT } from './middlewares/auth';
import { sequelize } from './config/database';

const app = express();

// Gunakan middleware JWT
app.use(authenticateJWT);

// Inisialisasi Apollo Server
const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ req }) => ({ user: req.user }),
});

server.applyMiddleware({ app });

const PORT = process.env.PORT || 4000;

app.listen(PORT, async () => {
  console.log(`Server running at http://localhost:${PORT}${server.graphqlPath}`);
  await sequelize.authenticate();
  console.log('Database connected');
});

src/graphql/schema.ts

쿼리 및 변형을 위한 GraphQL 스키마 정의:

import { gql } from 'apollo-server-express';

export const typeDefs = gql`
  type User {
    id: ID!
    username: String!
  }

  type Post {
    id: ID!
    title: String!
    content: String!
    user: User!
  }

  type Query {
    posts: [Post]
    post(id: ID!): Post
    users: [User]
  }

  type Mutation {
    createPost(title: String!, content: String!): Post
    register(username: String!, password: String!): User
    login(username: String!, password: String!): String # JWT token
  }
`;

src/graphql/resolvers.ts

쿼리 및 변형에 대한 해석기 구현:

import { Post, User } from '../models';
import jwt from 'jsonwebtoken';
import bcrypt from 'bcryptjs';

export const resolvers = {
  Query: {
    posts: () => Post.findAll(),
    post: (_, { id }) => Post.findByPk(id),
    users: () => User.findAll(),
  },
  Mutation: {
    createPost: async (_, { title, content }, { user }) => {
      if (!user) throw new Error('Authentication required');
      const post = await Post.create({ title, content, userId: user.id });
      return post;
    },
    register: async (_, { username, password }) => {
      const hashedPassword = await bcrypt.hash(password, 10);
      const user = await User.create({ username, password: hashedPassword });
      return user;
    },
    login: async (_, { username, password }) => {
      const user = await User.findOne({ where: { username } });
      if (!user) throw new Error('User not found');

      const match = await bcrypt.compare(password, user.password);
      if (!match) throw new Error('Invalid password');

      const token = jwt.sign({ userId: user.id }, process.env.JWT_SECRET!, { expiresIn: '1h' });
      return token;
    },
  },
};

6. 개발용 서버 실행

핫 리로드를 사용하여 개발 환경에서 서버를 실행하려면 다음 명령을 사용하십시오.

yarn dev

서버는 http://localhost:4000에서 실행되며 GraphQL Playground에 액세스하여 API 쿼리 및 변형을 테스트할 수 있습니다.


? 프로젝트 디렉토리 구조

이 프로젝트 디렉토리 구조는 애플리케이션의 여러 부분을 분리하여 보다 모듈화되고 유지 관리가 용이하도록 설계되었습니다.

/myapp
├── src
│   ├── middlewares      # Berisi middleware untuk otentikasi (JWT), caching (Redis), dan validasi
│   ├── routes           # Definisi endpoint API dan resolver GraphQL
│   ├── services         # Logika bisnis utama dan pengolahan data
│   ├── app.ts           # File utama untuk inisialisasi aplikasi dan middleware
│   ├── graphql          # Menyimpan konfigurasi GraphQL, schema, dan resolvers
│   ├── models           # Model Sequelize untuk mengelola database relasional
│   ├── config           # File konfigurasi global untuk Redis, JWT, database, dll
│   ├── index.ts         # Entry point aplikasi, menginisialisasi server dan middleware
│   ├── resolvers        # Berisi resolver GraphQL untuk query dan mutasi
│   ├── server.ts        # File untuk setup Apollo Server dan konfigurasi GraphQL
│   ├── schema           # Definisi schema GraphQL
│   ├── types            # TypeScript types dan interfaces untuk GraphQL dan lainnya
│   └── utils            # Berisi helper dan fungsi utility
├──

 .env                 # File konfigurasi environment (Redis, JWT Secret, Database URL)
├── package.json         # Metadata proyek dan dependensi
└── tsconfig.json        # Konfigurasi TypeScript

? 배포

프로덕션용 프로젝트를 준비하려면 다음 명령을 사용하여 TypeScript를 JavaScript로 빌드하세요.

yarn build

출력은 dist/ 폴더에 있으며 프로덕션 서버에 배포할 준비가 됩니다.

클라우드 플랫폼 준비

이 프로젝트는 다음 단계에 따라 Heroku, AWS 또는 DigitalOcean와 같은 플랫폼에 배포할 수 있습니다.

  1. Git 저장소에 코드 푸시(GitHub, GitLab 또는 기타).
  2. 선택한 클라우드 플랫폼(Redis, JWT Secret, URL 데이터베이스)에 환경 변수를 설정합니다.
  3. 클라우드 플랫폼의 명령이나 통합을 사용하여 프로젝트를 배포합니다.

? 의지

  • GraphQL 문서
  • Redis 문서
  • JWT 문서
  • 문서화

위 단계를 수행하면 이제 Redis, JWTSequelize를 사용하여 GraphQL API 애플리케이션을 실행하고 개발할 수 있습니다.

릴리스 선언문 이 기사는 https://dev.to/dioarafi/nodejs-starter-project-dengan-graphql-redis-jwt-dan-sequelize-2l3i?1에 복제되어 있습니다. 침해가 있는 경우에는 [email protected]으로 문의하시기 바랍니다. 그것을 삭제하려면
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3