카테고리 없음

prisma/sql/typescript

ByteGuard 2024. 10. 1. 06:54

1. Prisma

Prisma는 데이터베이스와 상호작용하기 위한 현대적인 ORM(Object-Relational Mapping) 도구입니다. 특히 TypeScript 및 Node.js 환경에서 널리 사용되며, 데이터베이스를 다루는 작업을 더 효율적이고 안전하게 만들어줍니다.

주요 특징:

  • 자동 타입 생성: Prisma는 데이터베이스 스키마를 바탕으로 자동으로 TypeScript 타입을 생성합니다. 덕분에 데이터베이스와 상호작용할 때 타입 안전성을 보장받을 수 있습니다.
  • 직관적인 쿼리 작성: Prisma Client를 통해 SQL을 직접 작성하지 않고도 데이터베이스 쿼리를 매우 직관적으로 작성할 수 있습니다. 예를 들어, findMany, create, update 등의 메서드를 사용해 복잡한 쿼리도 간단하게 구현할 수 있습니다.
  • 다양한 DB 지원: MySQL, PostgreSQL, SQLite, SQL Server 등의 다양한 관계형 데이터베이스를 지원합니다.
  • Migration 관리: Prisma Migrate를 통해 데이터베이스 스키마의 변화를 관리하고, 팀 내에서 일관된 데이터베이스 구조를 유지할 수 있습니다.

사용 흐름:

  1. Prisma Schema 파일 (schema.prisma)에서 데이터베이스 모델을 정의합니다.
  2. Prisma CLI 명령어로 데이터베이스와 연결하여 마이그레이션 및 Prisma Client 생성을 수행합니다.
  3. 생성된 Prisma Client를 사용하여 데이터베이스와 상호작용합니다.

예를 들어, 다음은 간단한 Prisma Client 사용 예시입니다:

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  const users = await prisma.user.findMany();
  console.log(users);
}

main()
  .catch(e => {
    throw e;
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

2. SQL (Structured Query Language)

SQL은 데이터베이스에서 데이터를 관리하고 조작하기 위한 표준 언어입니다. 관계형 데이터베이스 관리 시스템(RDBMS)에서 가장 많이 사용되며, 데이터 검색, 삽입, 업데이트, 삭제 등의 작업을 수행하는 데 사용됩니다.

주요 특징:

  • 데이터 정의 언어(DDL): 데이터베이스의 구조를 정의합니다. 예를 들어, 테이블을 생성(CREATE), 수정(ALTER), 삭제(DROP)하는 명령어를 포함합니다.
  • 데이터 조작 언어(DML): 테이블에 저장된 데이터를 조작하는 데 사용됩니다. 대표적인 명령어로는 SELECT, INSERT, UPDATE, DELETE가 있습니다.
  • 데이터 제어 언어(DCL): 데이터베이스 접근 권한을 관리합니다. 예를 들어, GRANT와 REVOKE를 통해 사용자의 권한을 설정할 수 있습니다.
  • 트랜잭션 제어 언어(TCL): 데이터베이스 트랜잭션을 제어하는 명령어로, COMMIT, ROLLBACK 등이 있습니다.

SQL 예시:

-- 테이블 생성
CREATE TABLE Users (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(100)
);

-- 데이터 삽입
INSERT INTO Users (id, name, email)
VALUES (1, 'John Doe', 'john@example.com');

-- 데이터 조회
SELECT * FROM Users;

-- 데이터 업데이트
UPDATE Users SET name = 'Jane Doe' WHERE id = 1;

-- 데이터 삭제
DELETE FROM Users WHERE id = 1;

3. TypeScript

TypeScript는 Microsoft가 개발한 JavaScript의 상위 집합 언어입니다. JavaScript에 정적 타입을 추가하여 코드의 안전성과 가독성을 높여주는 것이 특징입니다. TypeScript는 JavaScript로 컴파일되므로, 기존의 모든 JavaScript 라이브러리와 호환됩니다.

주요 특징:

  • 정적 타입 시스템: TypeScript의 가장 큰 장점은 코드 작성 시점에 변수, 함수의 인자, 반환값 등에 대해 타입을 지정할 수 있다는 점입니다. 이를 통해 런타임 오류를 줄이고, 코드의 유지보수성을 높일 수 있습니다.
  • ECMAScript 최신 기능 지원: TypeScript는 최신 ECMAScript 표준을 기반으로 하고 있어, 최신 JavaScript 기능을 지원합니다. 예를 들어, 비동기 함수(async/await), 클래스, 모듈 시스템 등을 사용할 수 있습니다.
  • 타입 추론: TypeScript는 코드의 문맥을 바탕으로 타입을 자동으로 추론할 수 있습니다. 덕분에 타입을 명시적으로 지정하지 않아도 높은 타입 안정성을 유지할 수 있습니다.
  • 도구 지원: TypeScript는 강력한 IDE(통합 개발 환경) 지원을 받습니다. 특히 VSCode와 같은 편집기에서 타입 검사와 자동 완성 기능을 제공합니다.

TypeScript 예시:

// 타입 명시
function add(a: number, b: number): number {
  return a + b;
}

// 인터페이스 정의
interface User {
  id: number;
  name: string;
  email: string;
}

// 타입을 이용한 객체 생성
const user: User = {
  id: 1,
  name: 'John Doe',
  email: 'john@example.com',
};

// 클래스와 상속
class Person {
  constructor(public name: string, public age: number) {}
  
  greet() {
    return `Hello, my name is ${this.name}`;
  }
}

class Student extends Person {
  constructor(name: string, age: number, public grade: number) {
    super(name, age);
  }

  study() {
    return `${this.name} is studying`;
  }
}

const student = new Student('Jane', 20, 90);
console.log(student.greet());
console.log(student.study());
 

TypeScript는 특히 대규모 프로젝트에서 코드의 품질과 유지보수성을 크게 향상시킬 수 있는 도구로, JavaScript의 유연성과 함께 정적 타입 시스템의 이점을 제공합니다.


위의 세 가지 기술인 Prisma, SQL, TypeScript는 각각 데이터베이스, 쿼리 작성, 그리고 타입 안전성을 가진 JavaScript 기반의 애플리케이션 개발에서 중요한 역할을 합니다. 이를 조합하면 데이터베이스와 상호작용하는 타입 안전한 애플리케이션을 더욱 쉽게 개발할 수 있습니다.