처음으로 IT 1차프로젝트를 진행하게되었다.
나 포함 4명이고
우리는 주제선정과 각자의 역할분담을 하기로 했다.
토론결과
나는 벡엔드를 담당하기로했고, 쇼핑몰중 상품쪽 벡엔드담당, 다른 한분은 유저쪽 벡엔드담당
이렇게 역할분담을 나누었다.
벡엔드 담당은 먼저 DB구축부터 들어갔다.
DB구축은 인터넷에 있는
이미지를 참조하여 DB설계에 들어갔다.
Nodejs 의 Sequelize를 이용하여 벡엔드에서 바로 db로 넘어가게
짜려고 한다.
express-generator를 이용하여 기본 구조를 생성
CMD켜고
npm install express-generator -g
express --ejs team_first_project
CD: team_first_project
npm install
nodemon 설치
npm install nodemon -g
package.json
...
"scripts": {
"start": "node ./bin/www",
"dev": "nodemon ./bin/www"
},
...
설정해주고
eslint style
코드의 통일성을 위해 eslint style을 맞춰주자
npm install -g eslint
slint 초기화 세팅
eslint를 다음 설정값을 참고해서 세팅해 보자
코드 스타일은 Airbnb 스타일로 맞추도록 한다.
eslint --init
cs.son@DESKTOP-JLQT4EH C:\Workspace\nodeproj
$ eslint --init
√ How would you like to use ESLint? · To check syntax, find problems, and enforce code style
√ What type of modules does your project use? · CommonJS (require/exports)
√ Which framework does your project use? · None of these
√ Does your project use TypeScript? · No
√ Where does your code run? · Node
√ How would you like to define a style for your project? · Use a popular style guide
√ Which style guide do you want to follow? . Airbnb: https://github.com/airbnb/javascript
√ What format do you want your config file to be in? · JSON
Checking peerDependencies of eslint-config-airbnb-base@latest
The config that you've selected requires the following dependencies:
/.env 설정
NODE_ENV=development //개발모드
PORT=3000
LOGGER_LEVEL=debug
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=team_first_project
DB_ID=postgres
DB_PASS=postgres
DB_DIALECT=postgres
DB이름도 team_first_project 로 지어줬다. 통일해야 헷갈리지않아서
dotenv
.env파일을 사용하기 위해 dotenv 라이브러리를 설치
dotenv 설치
npm install dotenv --save
dotenv 사용
.env환경을 사용하려면 다음과 같이 사용할 수 있다.
const dotenv = require('dotenv');
dotenv.config();
const NODE_ENV = process.env.NODE_ENV;
bodyparser 설치
npm install body-parser --save
bodyparser 설정
/app.js
...
const logger = require('morgan');
const bodyParser = require('body-parser');
...(중간생략)...
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
...
logger
로그를 잘 관리할 수 도록 winston을 설치해서 로깅처리를 하도록 한다.
로깅처리를 위한 winston 설치
npm install winston --save
로그파일 작성을 위한 winston-daily-rotate-file 설치
매일 날짜에 맞춰 로그를 자동으로 생성해 주는 라이브러리를 설치
npm install winston-daily-rotate-file --save
logger 설정
다음과 같이 로그전용 라이브러리를 생성해서 로깅처리를 하도록 한다.
(콘솔 출력과 로그파일 출력을 설정할 수 있다.)
cors를 처리하기 위해 cors를 설치한다.
cors 설치
npm install cors --save
cors 환경 설정
환경설정 파일을 다음과 같이 생성한다.
/config/corsConfig.json
{
"origin": ["http://localhost:3000"],
"methods": ["OPTIONS", "GET", "POST", "HEAD", "PUT", "DELETE"]
}
/app.js //APP.JS에 COR 적용하자
...
const cors = require('cors');
const corsConfig = require('./config/corsConfig.json');
const logger = require('./lib/logger');
...(중간생략)...
app.use(cors(corsConfig));
app.use(express.json());
DB연동
DB는 다음과 같이 (별도로) 준비한다.
PostgreSQL 11.4
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=team_first_project
DB_ID=postgres
DB_PASS=postgres
npm install pg pg-hstore --save
sequelize 설치
npm install sequelize --save
이제 코드를 넣어주자
/models/connection.js
const Sequelize = require('sequelize');
const dotenv = require('dotenv');
dotenv.config();
const db = {
username: process.env.DB_ID,
password: process.env.DB_PASS,
database: process.env.DB_DATABASE,
host: process.env.DB_HOST,
port: process.env.DB_PORT,
dialect: process.env.DB_DIALECT,
};
// sequelize 생성
const sequelize = new Sequelize(
db.database,
db.username,
db.password,
{
host: db.host,
port: db.port,
dialect: db.dialect,
},
);
exports.sequelize = sequelize;
이제 DB연결은 문제가 없고
먼저 폴더를 생성
models, router, service, dao 파일을 만들고
models 설정된것이 router >타고 넘어가서 >service> dao >> DB 로 가는
설계를 하였다.
본 프로젝트는 자바스프링의 MVC 구조를 모방한다.
프로세스의 흐름은 Controller --> Service --> DAO의 순서를 따르며
각 구조별 파일명은 다음과 같다. (예: Department)
Model (테이블 정의 파일): /models/product.js
Controller (라우터 파일): /routes/product.js
Service (비즈니스 로직 파일): /service/productService.js
DAO (데이터 액세스 파일): /dao/productDao.js
코딩 순서는 Model --> DAO --> Service --> Router 순으로 한다.
Products에서 Sequelize 연결 product.js에 db에 담길 상품 정보및 타입을 적어주고
index.js에서도 적어주고
routes product.js에서도 적어준다
routers index.js 에서도 잘 적어주고
service에서도 적어줘야겟지
dao 도 적어주자, dao는 실질적으로 db와 제일 가까운곳이다. dao>>db로 가니까
자 이렇게 product관련 상품들을 여럿 작업해주자
product
productcategory
productimagefile
productreply
그리고 여기서 끝이아니다!!
pk,fk 설정을 해줘야한다.
이건 다음장으로