TIL231009(월)_Nest.js 학습 및 ERD 설계 수정

박지은·2023년 10월 9일
0

TIL

목록 보기
33/36

팀 프로젝트 진행 사항을 확인하기 위해서 오전과 오후에 한번 씩 진행사항과 이슈사항을 공유한다.

오전에 스크래핑을 하다가 데이터가 저장되는 값에 대해 기존 Products 테이블과 PriceHistory 테이블의 설계에 대한 이슈가 있어서 정리했다.

ERD 설계 수정

<기존 ERD>

<바뀐 ERD>

이슈 1️⃣ : Products의 currentPrice / PriceHistory의 price

기존 : Products 테이블에 originalPrice만 있고, 현재가격은 PriceHistory에 price로 저장

변경안 : Products 테이블에 currentPrice 컬럼 추가 → PriceHistory 테이블에 price 에 트랜잭션으로 현재가 함께 추가

이슈사항

  • 데이터를 효율적으로 관리하기 위한 데이터 무결성 원칙에 어긋나지 않은가? 동일한 데이터값이 중복으로 저장된다는 점에서 기존과 변경안을 고민

변경 이유

  • 메인페이지에서 상품조회를 할 때, 기존 방식으로 쌓인 PriceHistory 내역을 다 부른다면, 로딩 시간이 많이 걸릴 것으로 예상 → 프론트에서 보여지는 로딩시간을 줄이기 위해서 변경안 방식을 채택
  • PriceHistory는 상세페이지의 ‘가격 트래킹 그래프’에서 사용
  • 데이터 무결성 원칙보다는 우리 서비스에 더 적합한 방식의 데이터 정보 사용 방식을 채택

TypeORM

entity & repository 생성

import {
  Column,
  CreateDateColumn,
  DeleteDateColumn,
  Entity,
  PrimaryGeneratedColumn,
  UpdateDateColumn,
} from "typeorm";

@Entity({ schema: "board", name: "articles" })
export class Article {
  @PrimaryGeneratedColumn({ type: "int", name: "id" })
  id: number;

  @Column("varchar", { length: 10 })
  author: string;

  @Column("varchar", { length: 50 })
  title: string;

  @Column("varchar", { length: 1000 })
  content: string;

  @Column("varchar", { select: false })
  password: string;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;

  @DeleteDateColumn()
  deletedAt: Date | null;
}

{ select: false }
이 옵션은 SELECT 쿼리를 통해 데이터를 불러올 때 password 필드가 기본적으로 제외되어야 함을 나타냅니다. 이는 비밀번호와 같이 민감한 정보를 안전하게 다루기 위한 일반적인 패턴입니다.

profile
성장하는뿅아리

0개의 댓글

관련 채용 정보