Database 복습 (2)

dosiri_·2021년 9월 15일
0

복습

목록 보기
6/14
post-thumbnail
post-custom-banner

0915

1. MySQL 특징

  • 세계에서 가장 많이 쓰이는 오픈소스 관계형 데이터베이스 관리 시스템
  • 다중 스레드, 다중 사용자 형식의 구조
  • 3306번 포트 이용
  • Mysql Workbench: 프론트엔드 툴. 이용의 편의성 증가

2. MySQL 이용한 서버 통신 실습

1) 새로운 express 환경 구축

  • express --view=ejs db_test
  • npm install
  • node를 nodemon으로 변경
  • sql2설치

2) MySQL에 새로운 스키마 생성 후 테이블 생성

3) express 환경에 config와 modules파일 생성해서 sql과 연결

4) router 작성

기존의 모듈화에서 라우터 부분만 남겨두고 나머지 모든 기능 부분을

controllers 라는 폴더를 생성해서 분리

MVC패턴과 비슷

MVC 는 Model, View, Controller의 약자.
하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지로 구분한 패턴.

사용자가 보는 페이지, 데이터처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤
이 3가지로 구성되는 하나의 애플리케이션을 만들면
각각 맡은바에만 집중을 할 수 있다.

서로 분리되어 각자의 역할에 집중할 수 있게끔하여 개발을 하고
그렇게 애플리케이션 만들어 유지보수성, 애플리케이션의 확장성, 그리고 유연성이
증가하고, 중복코딩이라는 문제점이 해결된다.

const express = require("express");
const router = express.Router();
const membershipController = require("../../controllers/membership/membershipController");
const upload = require("../../modules/awsUpload");

router.get("/:gender", membershipController.detailMembership);

router.post("/images", upload.single("img"), membershipController.uploadImage);

router.post("/", membershipController.uploadMembership);

module.exports = router;

라우터의 코드가 훨씬 더 심플해졌다.

5) Controller 에서 sql과 서버 통신

const { none } = require("../../modules/awsUpload");
const con = require("../../modules/mysql");
// const upload = require("../../modules/awsUpload");

const membershipController = {
  detailMembership: (req, res) => {
    const { gender } = req.params;
    const sql = "select * from membership where gender=?";
    const params = [Number(gender)];

    if (Number(gender) === 0 || Number(gender) === 1) {
      con.query(sql, params, (err, result) => {
        if (err)
          return res.status(400).json({
            message: "조회 실패",
          });

        res.status(200).json({
          message: "조회 성공",
          data: result,
        });
      });
    } else {
      res.status(401).json({
        // 오류번호는 중첩되면 안됨!
        message: "옳지 않은 gender 값 입니다.",
      });
    }
  },
 
module.exports = membershipController;

membershipController라는 함수에 여러 connection들을 만들어
조회 / 추가 / 삭제 하도록 코드를 만들었다.

이후 Postman 을 통해 통신 실습을 하면 sql 에 데이터가 추가되고 삭제되는 것을 볼 수 있었다.

3. S3와 MySQL, 서버 통신

1) 이미지 업로드 준비

  • config 폴더에 awsConfig.json 파일 가져오기! (나의 IAM )

  • modules 폴더에 기존 awsUpload 파일 가져오기

  • npm install multer multer-3 aws-sdk

2) multer를 이용해 S3에 이미지 업로드 후 response 값으로 img의 url 불러오기

const membershipController = {
 uploadImage: (req, res, err) => {
     const img = req.file; // req.body가 아니라 req.file로 받아옴
     console.log(img);

     // postman에서 header값 dataform으로
     if (img) {
       res.status(200).json({
         message: "이미지 업로드 완료",
         imgUrl: img.location, // location으로 img의 url 가져오기!
       });
     } else {
       res.status(400).json({
         message: "이미지 업로드 실패",
       });
     }
   },

   uploadMembership: (req, res) => {
     const { gender, title, img } = req.body;
     const sql = "insert into membership (gender, title, img) values (?, ?, ?)";
     const params = [gender, title, img];

     // postman에서 header값 application/json으로
     con.query(sql, params, (err, result) => {
       if (err)
         return res.status(500).json({
           message: "에러가 발생했습니다.",
         }); // return 으로 err가 걸리면 바로 if문 탈출하므로 else 노필요
       res.status(200).json({
         message: "생성이 완료되었습니다.",
       });
     });
   },
};

위의 코드로 S3에 이미지 파일 업로드

업로드 된 파일을 MySQL 에 저장 (img 의 URL 형태로)

post-custom-banner

0개의 댓글