JSPM

@log2doc/db

0.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1
  • Score
    100M100P100Q15185F
  • License ISC

Database layer for Log2Doc system

Package Exports

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@log2doc/db) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    @log2doc/db

    Log2Doc 시스템의 데이터 저장 계층. PostgreSQL과 DrizzleORM을 사용하여 수집된 원시 데이터를 저장하고 조회합니다.

    설치

    yarn add @log2doc/db

    데이터베이스 설정 가이드

    PostgreSQL 설정 (Docker 사용)

    프로젝트 디렉토리에 docker-compose.yml 파일을 생성합니다:

    version: '3.8'
    
    services:
      postgres:
        image: postgres:15
        container_name: log2doc-postgres
        restart: unless-stopped
        environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: log2doc
        ports:
          - "5432:5432"
        volumes:
          - postgres_data:/var/lib/postgresql/data
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U postgres"]
          interval: 10s
          timeout: 5s
          retries: 5
    
    volumes:
      postgres_data:
        name: log2doc-postgres-data

    Docker Compose로 PostgreSQL을 시작합니다:

    docker-compose up -d

    컨테이너가 실행 중인지 확인합니다:

    docker-compose ps

    스키마 마이그레이션 실행 (패키지 사용자)

    패키지 사용자는 다음과 같이 스키마를 생성할 수 있습니다:

    1. 프로젝트에 마이그레이션 스크립트를 추가합니다:

    package.json에 다음 스크립트를 추가합니다:

    "scripts": {
      "db:migrate": "npx drizzle-kit push:pg --config=./db-migrate.config.js"
    }
    1. db-migrate.config.js 파일을 생성합니다:
    // db-migrate.config.js
    module.exports = {
      schema: './node_modules/@log2doc/db/dist/schema',
      out: './drizzle',
      driver: 'pg',
      dbCredentials: {
        connectionString: process.env.DATABASE_URL || 'postgresql://postgres:postgres@localhost:5432/log2doc',
      },
    };
    1. 마이그레이션 실행:
    # 환경 변수 설정 (필요한 경우)
    export DATABASE_URL=postgresql://postgres:postgres@localhost:5432/log2doc
    
    # 마이그레이션 실행
    npm run db:migrate

    데이터베이스 연결 확인

    PostgreSQL 클라이언트를 사용하여 연결을 확인합니다:

    psql postgresql://postgres:postgres@localhost:5432/log2doc
    
    # 테이블 목록 확인
    \dt
    
    # raw_data 테이블 구조 확인
    \d raw_data

    문제 해결

    1. 연결 오류

      오류: 연결 실패 - host "localhost", user "postgres", database "log2doc"

      확인:

      • PostgreSQL 컨테이너가 실행 중인지 확인
      • 포트 설정이 올바른지 확인
      • 호스트명이 올바른지 확인 (Docker 내부에서는 localhost 대신 postgres 사용)
    2. 마이그레이션 오류

      오류: 마이그레이션 실패

      확인:

      • DATABASE_URL 환경 변수가 올바르게 설정되었는지 확인
      • 데이터베이스 연결이 가능한지 확인
      • 로그에서 구체적인 오류 메시지 확인
      • 패키지가 최신 버전인지 확인

    기본 사용법

    환경 설정

    # .env 파일 또는 환경변수로 설정
    DATABASE_URL=postgresql://username:password@localhost:5432/db_name

    데이터 저장

    import { insertRawData } from '@log2doc/db';
    import { RawData } from '@log2doc/types';
    
    const rawData: RawData = {
      id: 'unique-id-1',
      source: {
        id: 'slack-1',
        type: 'slack',
        name: 'Slack 채널'
      },
      fetchedAt: new Date().toISOString(),
      payloadType: 'slack.message',
      payload: { /* 메시지 데이터 */ },
    };
    
    await insertRawData([rawData]);

    데이터 조회

    import { getRawData } from '@log2doc/db';
    
    // 모든 데이터 조회 (기본 페이지 크기: 100)
    const allData = await getRawData();
    
    // 필터링 조회
    const slackData = await getRawData({
      sourceType: 'slack',
      payloadType: 'slack.message',
      startDate: '2024-01-01T00:00:00Z',
      endDate: '2024-12-31T23:59:59Z',
      limit: 50,
      offset: 0,
    });

    커스텀 클라이언트 생성

    import { createClient, RawDataRepository } from '@log2doc/db';
    
    const client = createClient({
      connectionString: 'postgresql://username:password@localhost:5432/custom_db',
      maxConnections: 20,
      idleTimeout: 60,
    });
    
    const repository = new RawDataRepository(client);
    const data = await repository.getRawData({ sourceType: 'github' });

    라이센스

    ISC