본문 바로가기
javascript

ORM: 보다 직관적인 데이터베이스 관리 방법

by it-square 2022. 1. 11.

 

반응형

지난 달에 인기 있는 오픈 소스 소프트웨어 Postgre를 사용하여 데이터베이스 디자인을 배웠습니다.SQL, 관계형 데이터베이스가 장난이 아니라는 걸 직접 깨달았어! 쿼리에 세미콜론을 추가하는 것을 잊을 때마다 움찔했고, 잘못된 종류의 조인을 사용할 때마다 움찔했습니다. 중첩된 SELECT 문장으로 쿼리를 마칠 때마다 축하했고, 마지막 관계보다 긴 GROUP BY 문을 사용해야 할 때마다 울었습니다. 그럼에도 불구하고, 저는 데이터베이스 설계를 이해하기 위한 연구를 계속했습니다. 왜냐하면 어떤 종류의 풀 스택 개발자가 데이터베이스를 어떻게 다루는지 모르기 때문입니다.

이번 주 초로 돌아가면, 저는 Ruby on Rails 프로젝트에 기능을 추가하는 일을 맡았었습니다. 일부 컨텍스트를 제공하자면, 레일즈 프로젝트는 루비 언어에 대한 이해를 돕기 위해 사용되는 작은 eCommerce 웹사이트이다. 이 프로젝트를 통해 저는 새로운 친구를 소개받았습니다. 액티브 레코드. ActiveRecord는 익숙하지 않은 사람들을 위해 레일즈 팀에 의해 ORM(Object Relational Mapping) 시스템으로 개발되었습니다. 내 마지막 문장은 확실히 똑똑하게 들리게 만들었어!

간단히 말해 ActiveRecord 및 기타 ORM은 코드와 데이터베이스 사이의 계층 역할을 합니다. 프레임워크 내에서 선언된 메소드를 사용하여 데이터베이스와의 통신을 용이하게 합니다. 이들은 코드 객체를 가져다가 관계형 데이터베이스 테이블에 매핑합니다. 예를 들어 보겠습니다.

사용자 테이블이 있고 ID가 1인 사용자를 보려고 합니다. 다음과 같은 쿼리를 작성할 수 있습니다.

 

ActiveRecord에서는 find(찾기)라는 메서드를 사용할 수 있습니다.

백그라운드에서 ActiveRecord는 사용자 테이블에 ID가 1인 사용자를 반환하도록 요청하는 쿼리를 데이터베이스로 보냅니다. .find 메서드가 첨부되고 있는 사용자 클래스는 ActiveRecord의 이름 지정 규칙입니다. 명명 규칙에 대해 자세히 설명하지는 않겠지만, 사용자 테이블을 가리키기만 하면 됩니다.

액티브레코드를 사용하는 것은 피콜로가 무게감 있는 트레이닝 장비를 벗고 스피드를 10배 높이는 드래곤볼즈의 장면과 같았다.

 

더 이상 긴 데이터베이스 쿼리에 얽매일 필요가 없습니다. 피콜로처럼, 제 코딩 속도는 10배 증가했습니다. 확실히 하자면 액티브레코드는 훨씬 더 많은 것을 할 수 있지만, 이 게시물은 액티브레코드만의 것이 아니다.

주로 자바스크립트 개발자인 저는 제가 가장 많이 사용하는 언어로 비슷한 솔루션이 있는지 궁금했습니다. 뉴스 속보, 엄청 많아요. 제가 사전 조사를 좀 해서 흥미로워 보이는 것들의 최종 리스트를 만들었습니다. 그곳에서 저는 어떤 것이 가장 현대적이고 사용하기 쉬운지 보기 위해 문서를 스캔했습니다. 마침내, 저는 매우 인기 있는 현대판 타입스크립트/자바스크립트 ORM인 프리즘에 뛰어들기로 결심했습니다. 이건 내 이야기야 - cue law

프리즘은 오픈 소스 ORM이며 총 세 부분으로 구성된다.

  • 프리즘 클라이언트: 데이터베이스에 연결하는 데 필요한 메서드와 몇 가지 유용한 CLI 명령이 포함된 쿼리 작성기입니다.
  • 프리즘 마이그레이션: 회사 또는 제품이 성장함에 따라 데이터베이스에 점진적으로 추가할 수 있는 도구입니다. 버전 컨트롤과 비슷하지만 데이터베이스(액티브 레코드는 호기심 많은 고양이들을 위해 비슷한 것을 가지고 있다.)
  • 프리즘아 스튜디오: 브라우저에서 열려 데이터베이스의 데이터를 보고 편집할 수 있는 GUI입니다. CLI 테이블은 절대 볼 수 있습니다.

ActiveRecord와 마찬가지로, Prisma는 데이터베이스 시스템과 함께 사용할 때 사용자를 대신하여 작동하는 ORM 시스템입니다. Prisma는 Postgre를 지원합니다.SQL, MySQL, SQLite, SQL Server 및 MongoDB 데이터베이스. 프리즘을 사용하여 새 데이터베이스를 시작하거나 프리즘이 연결할 수 있는 기존 데이터베이스를 가질 수 있습니다. 후자가 어떻게 작동하는지 먼저 살펴보겠습니다.

 

시작하려면 다른 노드 패키지와 마찬가지로 Prisma CLI를 설치합니다.

패키지가 설치되면 접두사 npx를 사용하여 Prisma CLI에 액세스할 수 있습니다. 변환을 계속 진행하려면 다음과 같이 Prisma를 호출하고 Prisma Schema 파일 템플릿을 작성합니다.

prisma를 사용한 init 명령은 schema.prisma와 .env 파일을 포함하는 프리즘a 디렉토리를 생성합니다. 스키마 파일에는 다음과 같은 데이터 소스에 대한 생성기와 포인터가 있습니다.

 

여기서부터 흥미로운 일이 벌어지죠. 일부 문맥을 위해 이 게시물에 사용하는 데이터베이스는 Prisma 문서에 의해 제공되었으며, 투명성을 위해 제공된 SQL 스키마는 다음과 같습니다.

하나의 명령으로 프리즘은 기존의 데이터베이스 스키마를 풀링하여 자동으로 schema.prisma 파일로 복사하고 리팩터링할 수 있다.

다음 명령 실행 중...

 

…schema.schema 파일에 다음을 추가합니다.

이제 데이터베이스의 각 테이블이 schema.prisma 파일의 각 모델로 표시됩니다!

처음부터 다시 시작할 경우 TypeScript 프로젝트를 초기화한 다음 tsconfig.json을 동일한 프로젝트 디렉터리에 추가하면 됩니다.

 

위의 예와 같이 유사한 데이터 모델을 추가할 수 있는 유사한 schema.prisma 파일에 액세스할 수 있습니다.

액티브레코드처럼 프리즘은 내장 메소드를 사용하여 데이터베이스를 쿼리한다. 언뜻 보기에 프리즈마 방법은 더 복잡해 보입니다. 예를 들어, 이것은 단일 레코드를 id별로 반환하기 위해 작성된 쿼리입니다.

 

자바스크립트에서 쿼리의 특성은 데이터베이스가 데이터를 반환할 때까지 기다려야 하기 때문에 비동기 함수를 만든다. 비동기 언어는 장단점이 있다. pro: 여러 작업을 동시에 수행할 수 있다. con: 비동기 함수를 사용할 때 더 가파른 학습 곡선은 매우 구체적인 구문을 필요로 한다. 자바스크립트에서 비동기 함수를 파악하면 프리즘아가 본격적으로 근육을 펴기 시작한다.

"스튜, 그런 바보 같은 SQL 쿼리를 배운 걸 후회하나? " — 전혀 그렇지 않습니다. 프리즈마나 액티브레코드처럼 훌륭하고 유용한 도구가 될 수 있듯이, 이면에서 어떤 일이 일어나고 있는지에 대한 전반적인 이해도 중요하다고 굳게 믿고 있습니다. 이렇게 하면 문제를 더 쉽게 해결하고 문서를 더 빠르게 탐색할 수 있으며 레일즈 팀과 프리즘아 팀이 제품을 통해 이룬 성과에 대해 더 잘 이해할 수 있습니다. 난 프리즈마의 표면만 긁었을 뿐이고 고객에게만 손을 댔어. 조금이라도 관심이 있다면, 그들의 Migrate와 Studio 제품도 확인해보는 것을 강력히 추천합니다!

댓글