“ 당신은 소프트웨어 품질을 추구할 수도 있고, 포인터 연산을 할 수도 있다. 그러나 두 개를 동시에 할 수는 없다. ”
1. Express 설치법
express-generator express --force --view pug
npm install express -save 의 명령어로 express가 설치되어있다는 전제로 위의 명령어를 입력하면
express 프로젝트 기본 형식을 만들어줍니다.
(폴더 만들고 셋팅하기 귀찮으니... 위에 명령어로 한 번에 만들어주자)
2. Express 폴더 구조
위에 이미지처럼 폴더 구성하여 진행할 예정입니다.
├─api /*Rest API 관련 폴더*/
│ └─routes /*라우터 폴더*/
│ └─middleware /*미들웨어 폴더*/
├─config /*env 관련 및 설정 폴더*/
├─controller /*DB모델에 대한 컨트롤러 폴더 (ex 회원가입..)*/
├─env /*env파일 폴더*/
├─loaders /*모듈 로더 폴더*/
├─model /*DB 모델 폴더*/
├─public
│ └─images
└─service /*DB 모델 쿼리 서비스 폴더 (sequlize ORM 사용예정)*/
좀 더 상세하게 설명하자면 위에 트리 내용대로 구성할 예정입니다.
( 폴더구조는 각자의 차이가 있으므로 참고만 하시길 바랍니다..)
3. Express 필요 패키지 및 라이브러리 설치
{
"name": "node-express",
"version": "1.0.0",
"type": "module",
"main": "app.js",
"private": true,
"scripts": {
"start": "cross-env NODE_ENV=development nodemon app.js",
"pm2:dev": "pm2 start ecosystem.config.cjs",
"pm2:list": "pm2 list",
"pm2:kill": "pm2 kill"
},
"dependencies": {
"axios": "^0.27.2",
"bcrypt-nodejs": "^0.0.3",
"body-parser": "^1.20.0",
"cookie-parser": "~1.4.4",
"cors": "^2.8.5",
"cross-env": "^7.0.3",
"crypto": "^1.0.1",
"debug": "~2.6.9",
"dotenv": "^16.0.1",
"express": "~4.16.1",
"express-mysql-session": "^2.1.8",
"express-session": "^1.17.3",
"http-errors": "^2.0.0",
"jsonwebtoken": "^8.5.1",
"morgan": "~1.9.1",
"mysql2": "^2.3.3",
"nodemon": "^2.0.19",
"passport": "^0.6.0",
"passport-kakao": "^1.0.1",
"pm2": "^5.2.0",
"qs": "^6.11.0",
"sequelize": "^6.21.3",
"winston": "^3.8.1",
"winston-daily-rotate-file": "^4.7.1"
}
}
프로젝트 진행하기 전에 웬만한 패키지를 설치합니다.
위와 같은 package.json 내용은 express + mysql (sequlize) + jwt 과정에 대한 필요 패키지입니다.
나머지는 진행하면서 설명하겠습니다.
※참고
"type": "module",
위에 package.json 에 type에 대한 설정을 했습니다.
Node.js에서 기존 CommonJS require(."moment")와 같은 방식 대신에
import, export와 같은 ES모듈을 사용하기 위함입니다.
import {now} from "./time.js"와 같이 확장자까지 명시해주면 정상적으로 작동합니다.
4. 마무리
간단하게 express 설치법과 폴더 구성을 해보았습니다.
개인 프로젝트 및 실무를 통해 어느 정도 구조화해가면서 내용입니다.
부족하거나 이상한 부분이 있을 수 있습니다. 어느 정도 참고하되 무조건 따라 하지 마시기 바랍니다.
다음 포스팅부터 위에 폴더구조로 어떤 식으로 express 구조화를 하는지 설명하겠습니다.