TypeORM, 처음 만나본 혁신

Tilto_·2020년 12월 27일
9

💎ORM이란?

ORM을 처음 들어보는 개발자도 분명 있을 것이다.
간단히 설명하면, 코드에 있는 "객체"와 DB에 있는 "데이터"를 편하게 일치시켜주는 도구다.
즉, 우리가 만든 "객체"에 맞춰 SQL을 자동 생성해 데이터와 "동기화"시키는 일을 하는 것이 ORM이다.
나보다 정리 더 잘하는 좋은 글들이 많으니, 더 자세한 것이 궁금하면 아래 글을 읽어봐라.
[Database] ORM이란? - by dnjscksdn98, ORM이란? - by alskt0419

📖TypeORM, 어떻게 만나게 되었나?

나는 지금 몇 개의 개발 스터디에 들어가 있는데, 한 팀에서 Java로 DB를 다루기 위하여 JPA를 사용하는 모습을 보았다.
이 때 느낀 감정은 말로 이루지 못할 만큼의 '놀라움'이였다.
나는 지금까지 아래처럼, 매우 '고전적인'방식으로 DB를 다뤄왔다.
(이게 안 좋다는 것은 아니다만, 오래됐다는 것을 이야기하고 싶은 것이다.)

SELECT * FROM User WHERE name="Jinho"

아마 모든 개발자가, 이와 같은 SQL문을 한 번쯤은 다뤄봤으리라 생각했었지만.... ORM을 본 이후로 마음은 확 달라졌다.
TypeORM의 예제를 잠깐 인용하자면,

이렇게 간단한 클래스가 DB와 동기화되어 작동한다는 것이 SQL문만을 만지던 나에겐 그저 신세계였다...

🔎그래서, TypeORM은 어떻게 쓰는데?

자, 이제 이 글의 본론이다.
시작하기에 앞서, 내 개발환경을 간단히 적고 간다.

Windows 10
IntelliJ IDEA Ultimate 2020.3
Node.JS 15.5.0 (나는 npm만 사용한다)
MySQL 8.0


일단 당연하게도, 패키지 매니저로 TypeORM을 설치해야 한다.
하지만 TypeORM에서 추가로 필요하다고 명시한 모듈들이 있다.
공통적으로 reflect-metadata모듈이 필요하며, MySQL접근을 위해 mysql2모듈을 사용한다.
다른 DB를 포함한 자세한 내용은 TypeORM GitHub를 참고하자.

🔨 app.ts

간단한 DB연결 예제이다.
TypeORM에서는 위처럼 Connection을 만들고, Promise로 받아와서 사용하면 된다.


눈치가 빠른 사람이라면, 위 코드의 문제점을 하나 발견했을 수 있을 것이다.
entities에서 규칙을 정의할 때, 확장자를 .ts로 두면 빌드 후에 오류가 발생한다.
그렇다고 .js로 두면 테스트용으로 쓰는 ts-node로 실행할 때 다음과 같은 오류로 작동이 되지 않았다.

EntityMetadataNotFound: No metadata for "User" was found.

그래서 나는 하나의 꼼수를 찾았다!
ts-node로 타입스크립트를 실행할때는 해당 타입스크립트 폴더가 위치한 곳에 스코프가 두어지기 때문에, __diranme이나 __filename이 해당 타입스크립트 파일에 맞춰지게 된다.
이를 이용해 __filename.ts로 끝나면 규칙에 .ts를 넣고, .js로 끝나면 규칙에 .js를 넣게 만들어놓았다.


이제, 우리에게 필요한 Entity를 만들 차례다.

🔨 entity/User.ts

자세한 내용은 TypeORM GitHub링크를 참고해주기 바란다.
위와 같이 Entity를 만들었다면, 우리는 다음과 같이 Class를 이용하여 DB에 접근할 수 있다.

🔨 app.ts

이제 이를 응용하여, 프로젝트에 DB를 유연하게 적용시킬 수 있다.

✨TypeORM, 처음 만나본 혁신

실제로는 DataMapper니, ActiveRecord니 늘어놓을 말이 있지만, 이 글에서는 이정도로 줄이겠다.
(나중에 시간이 난다면 내용을 더 적어보겠다)

TypeORM을 사용하기 위한 삽질을 하면서, "내가 하나 편하자고 이렇게까지 해야하나"라고 생각했다.
하지만, 한 번 구조를 짜고 나니 크게 변하지 않아 과거의 나에게 감사하는 모습을 볼 수 있었다 (...)
물론 성능이나 최적화까지 생각한다면 ORM이 무조건적으로 좋은 선택지는 아니지만, 설계 상에서 SQL구문을 통한 최적화도 지원해주고 있기 때문에 가벼운 부분에서는 충분히 도입할 메리트가 있는 도구라고 생각한다.

끝으로, 처음 써보는 글임에도 끝까지 읽어준 당신에게 감사의 말을 전한다.


TypeORM, 처음 만나본 혁신 - by Tilto_
E-mail : tilto0822@gmail.com

profile
이것저것 만능틸토

0개의 댓글