ORM 소개

ORM이란 Object Relation Mapping 의 약자로서 객체를 데이터베이스 로 매핑해주는 것을 말한다. 객체 지향 프로그래밍 언어에서의 클래스가 데이터베이스의 테이블에 매핑된다.

  • 객체와 데이터베이스 매핑 예
    객체 클래스 : 데이터베이스 테이블
    객체 속성 : 데이터베이스 컬럼

xBatis ORM 소개

유독, 우리나라에서 JPA보다 xBatis ORM을 현업에서 많이 사용하고 있다. xBatis는 대부분의 비즈니스 로직을 쿼리에 의존한다. 여기서 비즈니스 로직이란 생성, 수정, 삭제, 읽기를 말하며 이런 CRUD를 쿼리문을 통해서 처리하게 되는데, 쿼리문을 동적으로 만들기 위해서 객체를 사용하여 매핑하게 된다.

JPA ORM 소개

JPA 란 Java Persistence API의 약자로서 Java에서 사용하는 영속적인 API의 약자로 여기서 영속적이라는 의미는 메모리에 데이터를 관리하는게 아니라 파워를 껏다 켜도 데이터가 보존되는 데이터베이스와 같은것을 의미하는것으로 데이터베이스에 접근하는 API라는 뜻의 약간 넓은 의미를 가지고 있다.

xBatis 와 달리 객체지향적으로 데이터를 관리하며, 쿼리를 통해서 CRUD를 수행하는것이 아니라 객체지향적인 방법으로 CRUD를 수행하므로 JPA를 잘 이해한다면 훨씬 쉽게 관리할 수 있으나 JPA에 대한 이해를 하고 있다는 전제에서만 그렇고 그렇지 않으면 어렵고 또한 성능상의 문제가 발생할 수가 있다.

여기서 소개하는 typeorm은 JPA 계열이다. 여기서는 환경설정과 예제만 다뤄보고 실제 설계는 뒤에서 다루도록 한다.

https://typeorm.io   사이트를 참고하여 설정한다.

먼저 필요한 라이브러리를 설치한다.

tsconfig.json에 아래 두 라인을 추가한다.

ormconfig.json 환경화일을 추가한다.

host, port, username, password, database 는 각자 맞게 설정한다. 여기서는 아마존 RDS 정보를 입력하였다.

테스트용으로 entity 샘플을 만들어본다.

객체를 데이터베이스에 매핑하는 관계는 다음과 같다.

  • 객체 클래스 – 데이터베이스 테이블
  • 객체 속성 – 컬럼

아래에 사용된 어노테이션은 다음과 같다.

@Entitiy: 데이터베이스 테이블에 매핑. 클래스 이름이 Photo 이므로 데이터베이스에 Photo라는 이름의 테이블을 생성한다.

@PrimaryGeneratedColumn: 프라이머리 키를 생성하되 자동증가되는 컬럼이다. mysql이라면 자동증가 옵션을 사용할 것이고 오러클이라면 시퀀스를 사용해야 한다. myBatis ORM이라면 데이터베이스가 무엇인지에 따라서 쿼리문을 따로 만들어야 하겠지만 JPA ORM에서는 데이터베이스가 무엇인지는 상관하지 않는다. 오직 객체로만 다루면 된다.

@Column: 테이블의 컬럼을 만든다. 타입은 typescript 에서 정의하고 되고 추가적인 옵션은 length, nullable 등을 지정할 수 있다.

index.ts에 DB 연결을 설정한다.

제 실행을 하면 환경설정에서 synchronize 가 true로 되어있으면 entity를 데이터베이스와 동기화를 수행하게 되는것을 알 수 있다.

youtube