typeORM 설정React+REST API 게시판 구현/BE - TypeORM2021. 9. 17. 11:18
Table of Contents
참고
https://eastflag.co.kr/fullstack/rest-with-nodejs/node-rest_typeorm/
ORM?
- ORM이란 Object Relation Mapping의 약자로서 객체를 데이터베이스로 매핑해주는 것을 말한다.
객체 클래스 | 데이터베이스 테이블 |
객체 속성 | 데이터베이스 컬럼 |
MyBatis ORM?
- MyBatis ORM은 자바에서 사용되는 ORM이며 비즈니스 로직을 쿼리에 의존한다.
- 비즈니스 로직이란 생성, 수정, 삭제, 읽기를 말하며 객체의 속성을 데이터베이스 테이블의 속성으로 변경하여 insert, update, delete, select 쿼리문으로 변환하게 된다.
- 데이터베이스를 잘 알고 있다면 동적쿼리문만 배우면 되므로 쉽게 접근할 수 있다는 장점이 있지만, 만일 데이터베이스를 2개 이상 지원하도록 개발한다면 데이터베이스마다 고유한 쿼리문을 개별로 개발해야 하는 단점이 존재한다.
typeORM?
- NodeJS로 REST API를 만드는건 좋은 선택이 아니었다. 하지만 자바의 JPA 방식을 도입해서 노드에서 sequlize를 만들었고 typescript 버전인 typeORM이 등장함으로써 NodeJS에서도 DB 연동이 쉬워졌다.
- 가장 중요한 개념은 DB를 직접 다루는게 아니라 객체를 다룬다는 것이다.
- 새로운 객체를 생성하면 typeORM이 insert 구문을 자동으로 생성해준다. 객체의 속성을 변경하고 저장하면 update 구문을 자동으로 생성해준다.
typeORM 설정하기
- docker와 Datagrip 연동과 NodeJS 프로젝트를 만들지 않았다면 아래 두 링크에 들어가서 각각 설정하자.
- https://duckgugong.tistory.com/221
- 우선 아래 명령어로 라이브러리를 설치하자. MariaDB를 사용하므로 mysql2도 설치한다.
npm i -S typeorm reflect-metadata mysql2
npm i -D @types/node
- tsconfig.json에 아래 두 줄을 추가한다.
"emitDecoratorMetadata": true,
"experimentalDecorators": true
- 그리고 ormconfig.json 파일을 추가하자.
- host, port, username, password, database는 각자 설정에 맞게 써주자. 나는 위에서 구축한 docker 기반 MariDB 정보를 적었다.
- synchronize는 엔티티 정보로 DB를 동기화하겠느냐는 옵션이다. 개발시에는 true로 설정하되 운영에서는 false로 해야 한다. 잘못하면 운영 DB 데이터가 통째로 날라갈 수 있다.
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "duckgugong",
"password": "12345678",
"database": "duckDB",
"synchronize": true,
"logging": false,
"entities": [
"src/entity/**/*.ts"
],
"migrations": [
"src/migration/**/*.ts"
],
"subscribers": [
"src/subscriber/**/*.ts"
]
}
- 여기 까지는 기본설정이고, 이 기본설정은 camel case이다.
- typeORM은 기본적으로 컬럼명을 그대로 테이블로 만들기 때문에 camel case가 적용된다.
- 즉, 컬럼명을 createdAt 이라고 했다면 테이블명도 동일하게 만들어진다. 이것을 created_at 이라고 kebab case로 바꿀려면 다음 모듈을 설치한다.
npm i -S typeorm-naming-strategies
- 그리고 ormconfig.json 파일을 ormconfig.js로 수정하고 아래와 같이 적용하자!
const SnakeNamingStrategy = require("typeorm-naming-strategies").SnakeNamingStrategy
module.exports = {
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "duckgugong",
"password": "12345678",
"database": "duckDB",
"synchronize": true,
"logging": false,
"entities": [
"src/entity/**/*.ts"
],
"migrations": [
"src/migration/**/*.ts"
],
"subscribers": [
"src/subscriber/**/*.ts"
],
namingStrategy: new SnakeNamingStrategy()
}
- 마지막으로 index.ts에 DB 연결을 하자!
import express from 'express';
import {createConnection} from "typeorm";
let app = express();
// x-www-form-urlencoded를 파싱
app.use(express.urlencoded({
extended: true
}))
// body-parser는 내장되어있음. json 파싱하기 위해서 설정만 추가
app.use(express.json());
createConnection().then(connection => {
app.listen(8080, () => {
console.log('server is listening 8080');
});
});
- 실행을 하면 DB에 접속하고 웹 서버를 실행한다!
'React+REST API 게시판 구현 > BE - TypeORM' 카테고리의 다른 글
board 추가/보기(페이징)/수정/삭제 API (0) | 2021.09.20 |
---|---|
컨트롤러, 라우팅 모듈화 (0) | 2021.09.19 |
IDEA에서 DataGrip 연결하기 + entity 설계 (1) | 2021.09.17 |
GET & POST + JSON 주고 받기 (0) | 2021.09.17 |
NodeJS 프로젝트 만들기 (0) | 2021.09.16 |
@덕구공 :: Duck9s'
주니어 개발자에욤
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!