<# 백엔드 ORM 이란? >

강민수·2021년 12월 19일
0

백엔드

목록 보기
17/21

이번 시간에는 백엔드에서 ORM에 대해 공부 해보고자 한다.

백엔드는 갈 수록 공부할 게 많아지는 것 같지만... ㅋㅋㅋㅋ
그래도 꼭 알고 넘어가야 할 것이 이 ORM이다.

ORM = Object Relational Mapping

object라는 말이 나오니 객체가 맞나 싶을 수 있지만, 맞다. 그 객체. 객체가 가진 속성에 데이터를 담아 활용하는 방법이다.

1. 정의

ORM은 Object-relational-mapping의 약어로, 데이터 하나를 하나의 객체로 생각하겠다는 패러다임에서 출발한 개념이다.

즉, 테이블로 표현되어 있는 데이터들을 우리가 사용하는 보통의 클래스 형식으로 변형해서 객체 지향적인 언어로 변환하는 것을 말한다.

예시를 통해 이해해 보자.

드라마

드라마 제목주연 배우방영일
호텔 델루나이지은, 여진구2019.07.13. ~ 2019.09.01.
타인은 지옥이다임시완, 이동욱, 이현욱, 이정은2019.08.31. ~
멜로가 체질천우희, 안재홍, 전여빈, 공명2019.08.09. ~

이런 드라마 방영 테이블 db가 있다고 쳐보자. 이걸 클래스로 바꾸면,

class 드라마 {
	constructor (드라마 제목, 주연 배우, 방영일){
    	this. 드라마 제목 = 드라마 제목;
        this. 주연 배우 = 주연 배우;
        this. 방영일 = 방영일;
        }
    }

이런 식으로 우리는 해당 테이블의 컬럼을 다 정의해서 표현할 수 있다.
또한, 이 데이터 개별적으로는 클래스의 instance 하나로 표현도 가능하다.

const 델루나 = new drama('호텔델루나', '이지은,여진구', 2019.07.13. ~ 2019.09.01.)

console.log(델루나.드라마 제목) // '호텔델루나'
console.log(델루나.주연배우) // '이지은, 여진구'
console.log(델루나.방영일) // 2019.07.13. ~ 2019.09.01.

이런 식으로 델루나 데이터가 클래스의 instance 하나로 표현된다.

다시 정리하자면,

테이블 하나 하나는 클래스로 표현되고, 테이블의 컬럼은 클래스의 속성으로 표현되고, 테이블에 입력되어 있는 데이터 하나하나는 각 클래스의 인스턴스로 관리할 수 있다.

이렇게 테이블과 컬럼, 그리고 데이터를 클래스(객체)의 특성과 연관지어 사고하는 패러다임을 Object-Relational Mapping, ORM 이라고 한다.

02. ORM 예제

class products extends Model {}
User.init({
  productsname: DataTypes.STRING,
  dateofproduction: DataTypes.DATE
}, { sequelize, modelName: 'user' });

...

위의 클래스를 통해 우리가 알 수 있는 점은. 프로덕츠라는 테이블 안에 제품명과 생산일자라는 칼럼이 각각 있고, 각 컬럼은 스트링과 데이트 타입의 데이터가 저장될 것을 알 수 있다.

CREATE TABLE products (
  productsname VARCHAR(50),
  dateofproduction DATE
)

이렇게 결국 위의 orm 표현은 밑에 sql문으로 전환되어 굳이 우리가 mysql에 접속하여 만들지 않아도 된다.

03. migrations

그러면 이렇게 코드만 작성하면 끝일까?

그러면 정말 좋겠지만... 당연히 아니다. 테이블로 변환해 주는 과정이 필요하다. 그것이 바로 마이그레이션이다.

한국말로 하면 이주, 이동 등으로 볼 수 있다. 말 그대로 맞다.

코드로 작성한 클래스를 실제 데이터베이스에 테이블로 옮기는 과정migration 이라고 한다. 모델을 생성하면 ORM이 migration 파일을 생성하고, migration 파일이 데이터베이스에 적용된다. ORM에서는 데이터베이스의 구조를 migration file들을 통해 주로 관리한다.

git으로 코드를 관리하듯, migration file로 데이터베이스의 변경 과정을 관리한다.

이에 대해서는 추후 orm의 대표적인 라이브러리인 프리즈마를 통해 한 번 살펴볼 예정이다.

==================to be continued===================

profile
개발도 예능처럼 재미지게~

0개의 댓글