일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- pm2
- JWT
- manytomanyfield
- bcrypt
- 실행 컨텍스트
- docker
- typescript
- 노드
- CORS
- 장고초기세팅
- on_delete
- crud2
- 트랜잭션
- async/await
- 호이스팅
- status code
- nodeJS
- node
- TypeError: this.boardRepository.createBoard is not a function
- Django
- westagram
- 프로미스
- 자바스크립트
- wecode
- javascript
- 스코프
- Jest
- rebase
- OSI7계층
- django westagram
- Today
- Total
될때까지
((TIL)) 프리온보딩 백엔드 사전스터디 : Node.js 2 본문
🎉 ORM ( Object Relational Mapping)
객체지향 프로그래밍과 관계형 데이터베이스 사이의 호환되지 않는 데이터를 변환해준다. 그래서 우리는 프로그래밍 언어만으로도(자바스크립트, 파이썬) 데이터 베이스 내부의 자료 속성에 접근할 수 있다.
[장점]
- SQL문을 작성하지 않아도 되기 때문에 개발의 생산성이 향상된다.
- 이미 짜여진 SQL문을 ORM이 자동 생성해주기 때문에 관련 쿼리문 작성 버그나 실수가 잦아진다.
[단점]
- raw query에 비해 실행 속도가 느리다.
- ORM이 선언한 SQL쿼리의 미세한 수정이나 디버깅이 어렵다.
- ORM으로 표현 못하는 쿼리가 존재한다.
=> 특정 ORM에 익숙해지면 다른 ORM 사용시 또 처음부터 익혀야하는 비용이 발생한다. 따라서 SQL문을 완벽히 이해하고 ORM을 도입하도록 하는 것이 학습에 좋다.
🎉 TYPEORM
Node와 RDB의 ORM 기술에는 sequelize, typeorm, prisma 등 라이브러리가 있다.
typeorm은 javascript뿐만 아니라 typescript을 지원하고 많이 사용되는 ORM이다.
npm i typeorm // typeorm 설치 (전에 mysql2 먼저 설치해야함!!)
npm un typeorm // typeorm 삭제
🎉 req - 요청 객체 (Request)
request 객체에 존재하는 다양한 메소드들
req.params : /path/:id에서 :id를 req.params.id로 사용할 수 있다. => path 파라미터를 담는다.
req.query : GET방식으로 넘어오는 /path?page=2에서 page부분을 req.query.page로 사용할 수 있다 => query string파라미터를 담는다.
req.body : POST 방식으로 넘어오는 파라미터를 담는다. express.json() 코드가 필요한 이유이며, 해당 코드를 미들웨어로 실행함으로써 자동으로 body에 parsing해준다.
req.headers : HTTP의 header정보를 가지고 있다.
=> console.log로 찍어보면 해당 내용들 확인이 가능하다.
🎉 res - 응답 객체 (Response)
res.status(code) : HTTP 응답 코드
res.send(body) : text형식의 HTTP 응답을 전송한다.
res.json(json) : json형식의 HTTP 응답을 전송한다.
🎉 app.xxx() 미들웨어?
app은 express가 프레임워크로 기본 제공하는 다양한 내부기능을 담아내기 위해 사용하는 객체다.
Application의 앞글자를 본 따 app이라는 명칭으로 부른다.
const express = require('express');
const app = express();
require메소드를 통해 express모듈을 import해서 객체를 생성한다.
express()함수를 호출해서 app이라는 변수에 담는다.
app 객체에는 전체 API서버의 기능을 정의하고 서버를 실행시키는 주 객체로 활용된다.
express가 제공하는 Application의 기능은 대표적으로 아래와 같다.
- HTTP 요청 라우팅 기능
- 미들웨어 상세설정
- HTML 렌더링 기능
- 템플릿 엔진 렌더링 기능
app.use()
app.use()는 미들웨어를 추가하는 함수다. 매개변수의 형태로 들어오는 다양한 함수들을 받아서 app에 미들웨어로 추가해준다.
app.use()내부에는 경로가 첫번째 매개변수로 들어오고, 콜백함수가 두번째로 들어온다.
path에 명시되어있는 경로 중 '/'이후의 경로를 일부분이라고 공유하고 있는 메소드는 무조건 호출이 된다.
app.use()의 기본 디폴트 path경로는 '/'다.
따라서 path에 아무 경로도 적지 않았다면 클라이언트의 어떤 요청이던간에 app.use는 무조건 호출된다.
app.use(express.json());
app.httpMethod()
외부에서 들어오는 HTTP 네트워크 요청을 라우팅해준다.
app.post();
app.get();
app.put();
app.delete();
🎉 dbmate
DB의 변동사항을 관리해주며, migrations 파일들을 생성 및 관리한다.
brew install dbmate
설치하면 db폴더가 생성되고 그 안에 migrations폴더가 생성된다.
dbmate new create_테이블이름_table
위의 명령어를 실행하면 migration 파일이 생성된다.
-- migrate:up 부분에는 적용할 sql문을 기재하고, --migrate:down 부분에는 적용시키지 않을 sql문을 작성한다.
(migrate:down 부분은 아직 제대로 이해 못했음..)
일단 migrate에 써주는 쿼리문의 반대되는 상황(예를 들어 테이블 삭제)을 기재하라고 했다.
dbmate up
위의 명령어를 실행하여 각각의 migration 파일들을 직접 테이블로 옮기는 migrate작업을 진행한다.
그러면 schema.sql이 생성되며 해당 파일은 migration이 정상 작동하고 있고 데이터베이스에 준 모든 변경 사항을 관리하고 있다.
'프로젝트 > 프리온보딩' 카테고리의 다른 글
((TIL)) 프리온보딩 백엔드 사전스터디 : Node.js 4 (0) | 2022.09.26 |
---|---|
((TIL)) 프리온보딩 백엔드 사전스터디 : Node.js 3 (0) | 2022.09.25 |
((TIL)) 프리온보딩 백엔드 사전스터디 : Node.js 1 (1) | 2022.09.20 |
((TIL)) 프리온보딩 백엔드 사전스터디 : Javascript 2 (0) | 2022.09.19 |
((TIL)) 프리온보딩 백엔드 사전스터디 : Javascript 1 (0) | 2022.09.18 |