-Westagram Backend Project -
1. Express 초기 환경 설정
- Express 설치 / 적용
- nodemon 설치 / 적용
- cors 설치 / 적용
- dotenv 설치 / 환경 변수 적용
- morgan 설치 / 적용
https://www.notion.so/wecode/Node-Express-da9ab2a0a3a64f75aedb1723dcdda544
1. 깃허브에 우리팀(7팀) 저장소에, 각자 만든 코드를 나중에 합치기 위해서,
7팀 폴더에
내 이름으로 된 폴더를 만든다.
2. .json 만들기 (npm init -y)
3. npm i express -- save-dev (각 폴더별 express 다운)
npm = node package manager 개발에 필요한 거 설치
4. 각 패키지 설치 (--save-dev : package.json에 저장하라는 뜻인데, 혹시 안 될까봐 각각 다 --save-dev 한 것)
install node --save-dev
install cors --save-dev
install dotenv --save-dev
install morgan --save-dev
4. npm list 로 잘 설치 됐는지 보기
세부 설명
npm init -y #작업을 의도한 어플리케이션에 package.json 파일을 생성
npm install express #각 프로젝트마다 express 설치해야 함 (이미 설치했어도)
npm install express --no-save #Express를 일시적으로만 사용하고 배포용 dependency list에 저장하고 싶지 않는다면
npm install express --save-dev. #dependencies가 아니라 로컬 개발환경에서 쓰고 싶은 패키지들을 관리하는 devDependencies에 해당 내용을 저장하고 싶다면
네트워크 통신시 개발자의 수고를 덜어주는 다음의 5가지의 기본 패키지
- nodemon 설치 / 적용
- cors 설치 / 적용
- dotenv 설치 / 환경 변수 적용
- morgan 설치 / 적용
Node에서는 코드에서 수정이 일어났을 때, 코드의 수정 사항이 서버에 자동으로 반영되지 않습니다.
즉, 코드를 수정하고나면, 서버를 계속 다시 켜주어야 합니다.
이를 보완하기 위하여 nodemon 이라는 패키지를 이용
npm install nodemon
npm install --save-dev nodemon # local devDependency install (devDependency 로서 해당 내용을 설치)
다시 와서 알아야 할 부분.,, 일단 필요한 것만 학습!!
package.json 내부의 npm script start 명령어 란에
아래와 같이 새롭게 nodemon을 경유하여 app.js를 실행한다는 의미의 명령어(nodemon app.js)를 추가
이제 간단히 npm start 명령어 만으로 언제든지 nodemon이 제공하는 도움을 받을 수
"scripts": { "start": "nodemon app.js" }
별도의 CORS 설정을 통해서 서로 다른 두개의 origin/domain 끼리의 데이터를 주고 받게 하기 위한 설정하여 이루어지며,
만일 해당 과정을 생략한다면 CORS 정책 위반을 이유로 웹 브라우저 차원에서 서버 통신을 막습니다.
npm install cors
Dotenv 환경변수 관리
npm install dotenv
NodeJS 서버로 구성된 웹 환경에서는 기본적으로 제공되어지는 로깅(네트워크 통신기록) 기능이 없기에,
로그(log)를 관리하기 위해서 외부의 서드파티 모듈/라이브러리를 사용할 것을 권장합니다.
그 중 Morgan은 npm 에서 사용되는 로그 관리를 위한 여러 패키지 중 하나이며 많은 개발자들이 사용하고 있습니다.
Morgan을 사용하면 http(s) 통신시 프론트-백엔드간 소통시 필요로 하는 ‘기본 정보’들을 자동으로 포매팅하여 편리하게 주고 받을 수 있게 됩니다.
‘기본 정보’란, http 통신시 request, response 형태로 주고 받는 status code, http version 등의 메타 정보들
node.js-express 선에서 제공하지 않는 이 기능을 외부의 패키지의 힘을 빌려 사용하게 된 것 입니다.
참고사항으로, Morgan을 사용할 때 내가 원하는 요소대로 내부 속성을 커스터마이징 하여 설정 할 수도
npm install morgan
2. 이어지는
TypeORM 설치
npm install typeorm
npm install mysql2 (드라이버 다운)
세부설명
mysql을 brew로 다시 설치했다. Homebrew로 설치했었는데 그건 system에 깔리는거고
brew는 가상에 깔려서 Npm과 비슷하다고,, 다시 설치해주셨다.
TypeORM 개념
간단히 말하면, server와 server를 연결하는 것
DB를 연결하고
node.js와 javascript를 연결
cf. Node와 RDBMS의 ORM 서비스에는 많은 라이브러리들이 있는데, 상위 3개 라이브러리는 sequelize, typeorm, prisma
Javascript 뿐 아니라 Typescript 와의 호환에도 용이한, 보다 확장성에 유리한 TypeORMTypeORM에서 제공하는 다양한 ORM 기능에만 의존하지않고, mysql과 연결하여 직접 작성한 SQL Raw Query 문을 실행할 수 있게 DB 커넥터의 기능만을 활용하여 TypeORM을 사용
TypeORM 설치
npm install typeorm
새로 다운 받은 패키지간 버전 호환 문제로 다양한 에러가 발생할 수 있는데,
그 중 TypeORM - Mysql 사이의 연동을 도와주는 mysql driver가 존재하지 않는다는(missing) 에러가 날 경우에는 npm 을 경유하여 mysql 혹은 mysql2로 관련 드라이버를 재설치
해당 절차를 따랐음에도 계속 문제가 발생한다면, 설치시 내부 node_modules 구조가 설치 과정중 꼬여있을 수도 있음으로,
TypeORM 삭제 → mysql/mysql2 설치 → TypeORM 드라이버 재설치 절차대로 다시 설치 과정을 진행
npm uninstall typeorm
npm install mysql
npm install mysql2
cf. ORM(Object-relational mapping): 객체지향 프로그래밍(Object-Oriented-Programming)과 관계형 데이터베이스(Relational-Database)사이의 호환되지 않는 데이터를 변환하는 기술
즉, ORM은 이렇게 서로 다른 객체와 관계형 데이터 시스템(RDBMS)을 연결해주는 중간 매개체 역할
ORM: 관계형 데이터베이스의 2차원 테이블과 테이블 안에 저장된 행(data)을 애플리케이션의 Class와 인스턴스에 각각 매핑해주는 역할
애플리케이션에서 프로그래밍 언어(e.g. javascript)만을 사용하여 선언한 Class와 Instance등으로
명령을 내리기에는 서로 연관성이 없어보였던 데이터베이스 내부 자료 속성에 접근할 수
cf. ORM을 사용하지 않고 TypeORM에서 제공하는 데이터베이스 연결(풀링) 기능과 Raw Query만 사용하는 이유
- 데이터베이스와 컨넥션만 사용해서 직접 SQL 쿼리문을 작성하게되면, 내가 의도한 데이터 테이블이 어떠한 원리로 기능하는지 그 본연의 작동 원리를 이해하는데 용이합니다.
- 특정 ORM 학습에 오랜 시간을 들여서 익히게되면, 다른 ORM 사용할 때 또 다시 처음부터 익혀야하는 비용이 발생하게 됩니다. 하지만 모든 ORM의 근간인 SQL문을 완벽히 이해가 되면 다른 ORM을 도입할 때 그 진입장벽이 한층 낮아지게 됩니다.
- 복잡한 쿼리를 사용하는 경우 ORM은 비효율적일 수 있고, 고차원의 추상화 과정을 거친 시스템 특성상 성능 저하 이슈가 있을 수 있다.
- ORM은 만능 열쇠가 아닙니다. 우리가 의도하고자 하지만 ORM으로 표현 못 하는 쿼리가 존재합니다.
이어지는 포스트 DB connection
'Wecode - Foundation 1 (부트캠프) > Westagram (Mysql, Node.js, Express)' 카테고리의 다른 글
[Westagram Backend Project] 3. mysql Database로 유저 회원가입 하기 (주황색) (0) | 2023.09.05 |
---|---|
[MySQL로 Database 만들기] 2. DQL 사용 (select, join) (0) | 2023.09.05 |
[Express] .gitignore 생성 (0) | 2023.09.04 |
[Express 초기 환경세팅] 2. database 서버 연결- dbConnection 설정 (0) | 2023.09.04 |
[MySQL로 Database 만들기] 1. DDL, DML 사용 (ERD 연결) (0) | 2023.09.04 |