[Day102] NodeJS - 모듈화, 계층화 - 2 (Modularization, Layered Architecture)

Validator·2023년 11월 13일

4. 데이터베이스 연결 및 사용

웹 애플리케이션은 데이터 저장 및 검색을 위해 데이터베이스와의 연결을 필요로 한다. MySQL과 Sequelize ORM(Object-Relational Mapping)을 사용할 수 있다.

a. Sequelize 및 MySQL 사용 예시

  1. Sequelize 설치 및 설정

    • Sequelize는 MySQL, PostgreSQL, SQLite 등 다양한 SQL 데이터베이스를 지원하는 ORM이다.
    • npm install sequelize mysql2를 실행하여 Sequelize와 MySQL 드라이버를 설치한다.
    • Sequelize를 사용하여 데이터베이스에 연결하고 모델을 정의한다.
    const Sequelize = require('sequelize');
    
    const sequelize = new Sequelize('database', 'username', 'password', {
        host: 'localhost',
        dialect: 'mysql'
    });
    
    const Board = sequelize.define('board', {
        title: Sequelize.STRING,
        content: Sequelize.TEXT,
        author: Sequelize.STRING
    });
  2. 리포지토리에서 모델 사용

    • boardRepository.js에서 Sequelize 모델을 사용하여 데이터베이스와 상호 작용한다.
    const Board = require('../models').Board;
    
    exports.findAll = async () => {
        return await Board.findAll();
    };
    
    exports.create = async (boardData) => {
        const board = Board.build(boardData);
        return await board.save();
    };

5. 오류 처리

오류 처리는 애플리케이션의 중요한 부분이다. Express에서는 미들웨어를 사용하여 오류를 효율적으로 처리할 수 있다.

a. 오류 처리 미들웨어

  • Express는 요청-응답 사이클의 마지막에 위치하는 오류 처리 미들웨어를 사용한다.

  • 이 미들웨어는 4개의 매개변수를 받는다: 오류 객체, 요청 객체, 응답 객체, 다음 미들웨어 함수.

    app.use((err, req, res, next) => {
        console.error(err.stack);
        res.status(500).send('Something broke!');
    });

6. 보안 관련 설정

웹 애플리케이션의 보안은 매우 중요하다. Express 애플리케이션의 보안을 강화하기 위해 다음과 같은 방법을 사용한다.

a. Helmet 사용

  • Helmet은 HTTP 헤더를 통한 보안 강화를 위한 미들웨어 패키지다.

  • npm install helmet 후 애플리케이션에 적용한다.

    const helmet = require('helmet');
    app.use(helmet());

7. 실제 API 구현

게시판 API 구현을 통해, 조회, 생성, 수정, 삭제 기능을 제공한다.

a. API 라우팅 설정

  • boardRoutes.js에서 각 경로에 맞는 컨트롤러 함수를 연결한다.

    router.get('/', boardController.getAllBoards);
    router.post('/', boardController.createBoard);
    router.put('/:id', boardController.updateBoard);
    router.delete('/:id', boardController.deleteBoard);

b. 컨트롤러 구현

  • boardController.js에서 API 엔드포인트에 대한 로직을 구현한다.

    exports.updateBoard = async (req, res) => {
        // 게시글 업데이트 로직
    };
    
    exports.deleteBoard = async (req, res) => {
        // 게시글 삭제 로직
    };

c. 서비스 및 리포지토리 레이어 추가 구현

  • 서비스 및 리포지토리 레이어에서는 비즈니스 로직 및 데이터베이스와의 상호 작용을 구현한다.

0개의 댓글