Jedlik 소개: 개발자에게 더 나은 DynamoDB 제공

AWS DynamoDB는 매우 멋진 기술이다. 고성능, 확장 가능, 완전한 관리, 클라우드 기반 데이터베이스 서비스이다.
그러나 만약 개발자로서 그것을 사용한 적이 있다면, 이러한 체험이 다른 데이터베이스에 비해 얼마나 다른지 좌절감을 느낄 수도 있다.
이것이 바로 내가 지난 몇 년 동안 노드를 위해 Jedlik 대상 문서 맵 (ODM) 을 구축한 이유다.js는 TypeScript로 작성된 것으로 개발자에게 DynamoDB를 더욱 잘 사용할 수 있는 체험을 제공하기 위한 것이다.
그것은 최근에 우리 회사 GitHub에 개원 프로젝트로 발표되었다. available to download from NPM
이 글에서 나는 Jedlik이 무엇인지, 그리고 그 주요 기능이 무엇인지 설명해 보려고 한다.

ODM이란?
ODM(객체 문서 맵) 또는 ORM(객체 관계 맵)은 데이터베이스의 레코드를 JavaScript 객체에 매핑하는 라이브러리로, 일반적으로 데이터베이스를 사용할 때 보다 쉽게 생활할 수 있습니다.
그것들은 사용자가 모델을 정의하고 데이터 모델을 구축할 수 있도록 하고 대상을 대상으로 하는 방식으로 데이터와 상호작용을 할 수 있으며 데이터의 모양을 유지할 수 있도록 검증을 제공합니다.그것들은 데이터베이스에 데이터를 읽고 쓰는 유사하고 직관적인 방식도 제공했다.
Sequelize(SQL 데이터베이스에 사용)나Mongoose(MongodB에 사용)를 사용한 적이 있다면 ODM을 계속 사용하고 있습니다!
Node에서 DynamoDB를 사용하려면 AWS SDK를 사용해야 합니다.SDK는 보통 좋은 도구 패키지이지만 데이터베이스 도구로서 조회를 작성할 때 좀 무겁고 직관적이지 않으며 기능에 대해서도 잘 알고 있다는 것을 항상 발견한다.
Jedlik의 디자인은 DynamoDB를 사용하면서 이 모든 장점을 갖도록 하기 위해서입니다.

특징.

모델, 모델, 검증
Jedlik의 핵심 기능 중 하나는 데이터 모델을 만들 수 있다는 것입니다.모델은 데이터의 모델을 정의하고 DynamoDB 테이블을 읽기 쉽게 하는 기능을 제공합니다.
다음은 TypeScript에서 Jedlik 정의User 모델을 사용하는 방법입니다.Joi 생성 모드를 사용하는 것이 좋습니다.
import * as jedlik from '@peak-ai/jedlik';
import * as Joi from 'joi';

// Using TypeScript gives you awesome autocompletions and other cool things, but it's not necessary to use them!
type MovieProps = {
  title: string;
  year: number;
  genre: string;
  rating: 1 | 2 | 3 | 4 | 5;
};

// Schemas are used to validate your data before saving it!
const schema = Joi.object({
  title: Joi.string().required(),
  year: Joi.number().integer().required(),
  genre: Joi.string().required(),
  rating: Joi.number().integer().min(1).max(5).required(),
});


const Movies = new jedlik.Model<UserProps>({ table: 'movies', schema });
Model를 사용하면 데이터베이스에 데이터를 읽는 것이 훨씬 쉽다.
AWS SDK for DynamoDB를 사용하여 새 영화를 만드는 방법에 대해 살펴보겠습니다.
const dynamoDB = new AWS.DynamoDB.DocumentClient();

await dynamoDB.put({
  TableName: 'movies',
  Item: {
    title: 'The Lion King',
    year: 1994,
    genre: 'Amazing',
    rating: 5,
  },
}).promise();
이것은 결코 나쁘지 않다. 그러나 만약 당신이 잘못된 값을 입력했다면 (예를 들어 10으로 등급 평가), 혹은 한 필드 (예를 들어 유파가 없음) 를 빠뜨렸거나, 새로운 필드 (예를 들어 표어) 를 추가했다면, DynamoDB는 이 점을 알려주지 않을 것이다.
Jedlik을 사용하면 이와 같은 일이 발생합니다.
// Movies is the model we created above
const movie = Movies.create({
  title: 'The Lion King',
  year: 1994,
  genre: 'Amazing',
  rating: 5,
});

await movie.save();
네가 이것이 좀 좋아 보인다는 것에 동의하길 바란다.그러나 만약 당신이 잘못된 형식의 데이터를 저장하려고 한다면, Jedlik도 당신을 이렇게 하지 못하게 할 것이다.텍스트 편집기에서 코드를 컴파일할 수 없는 TypeScript 오류가 발생할 수 있습니다.그렇지 않으면 실행 중 모드에서 검증 오류가 발생하고 데이터가 저장되지 않습니다.

묻다
내가 보기에 DynamoDB의 최악의 부분은 검색 언어이다.검색은 보통 최소한 세 부분으로 나뉜다. 하나 Expression (표기 문자열) 와 두 개의 대상 ExpressionAttributeNamesExpressionAttributeValues, 그것들의 정의 Expression 문자열의 표기이다.
DynamoDB SDK를 어떻게 사용해서 1998년의 공포영화 리스트를 얻었는지 살펴보자. 적어도 4등급을 받았다.
const dynamoDB = new AWS.DynamoDB.DocumentClient();

const { Items } = await dynamoDB.query({
  TableName: 'movies',
  ExpressionAttributeNames: {
    '#year': 'year',
    '#genre': 'genre',
    '#rating': 'rating',
  },
  ExpressionAttributeValues: {
    ':year': 1998,
    ':genre': 'Horror',
    ':rating': 4,
  },
  KeyConditionExpression: '#year = :year',
  FilterExpression: '#genre = :genre AND #rating >= :rating',
}).promise();
나는 그곳에서 무슨 일이 일어났는지 설명하지 않을 것이다.그러나 그것은 읽기가 쉽지 않고 쓰기가 쉽지 않으며, 절대로 시도하고 프로그래밍해서 생성하기가 쉽지 않다.
대신 Jedlik을 사용하여 동일한 질의를 수행하는 방법을 살펴보겠습니다.
const movies = await Movies.query({ year: 1998 }, {
  filters: {
    $and: [
      { key: 'genre', operator: '=', value: 'horror' },
      { key: 'rating', operator: '>=', value: 4 },
    ]
  }
});
마찬가지로, 이것은 다른 라이브러리 (예를 들어 Mongoose나 Sequelize) 를 사용하여 작성한 조회와 유사하다는 것에 동의하시기를 바랍니다.

객체용 DynamoDB
Jedlik을 사용하여 새 영화를 만들 때, 우리가 만든 영화에 대한 호출 save 방법을 사용할 수 있는 것을 본 적이 있다.create,query 등의 방법으로 되돌아오는 대상은 일반적인 자바스크립트 대상이 아니라 Documents--Jedlik 클래스이기 때문에 다음과 같은 추가 기능을 제공합니다.
const movie = Movies.create({
  title: 'The Lion King',
  year: 1994,
  genre: 'Amazing',
  rating: 5,
});

// save the movie to the database
await movie.save();

// print the title
console.log(movie.get('title'));

// set the rating
movie.set({ rating: 4 });

// save it again
await movie.save();

// convert the document into a plain object
console.log(movie.toObject());
내가 추가하고 싶은 다음 기능 중 하나는 모델에 사용자 정의 방법을 추가하는 능력이다.

미래.
Jetlik의 안정적인 성능은 충분한 테스트를 거쳐 언제든지 사용할 수 있습니다!그러니까 한번 해보세요!만약 당신이 그것을 사용하고 그것을 좋아한다면, 여기,GitHub, 트위터에 알려주세요. 나는 당신의 편지를 받아서 매우 기쁩니다.
이것도 하나의 개원 프로젝트이기 때문에 만약 당신이 어떤 개선 건의를 제기하고 심지어는 프로젝트에 대해 어떤 개선을 한다면 당신은 매우 환영을 받을 것이다.
나는 또 많은 기능을 추가하고 싶으니 곧 발표될 새로운 버전과 기능에 주의를 기울여 주십시오.

좋은 웹페이지 즐겨찾기