본문 바로가기

백엔드/ORM

(3)
[TypeORM] bigint가 string으로 변환될 때 문제 상황  TypeORM 공식 문서에서도 나와있듯이, 엔티티를 만들 때 bigint로 컬럼 타입을 지정하면 엔티티로 변환할 때는 string으로 변환됩니다. (PostgreSQL 기준)하지만 이 값을 사용할 때마다 변환하는 로직을 넣기는 귀찮으니, 엔티티로 변환한 시점에 이미 number 라면 사용하기 편할 것 같습니다.Javascript에서 표현할 수 있는 "안전한" 정수의 범위는 -9,007,199,254,740,991 ~ 9,007,199,254,740,991 입니다.하지만 PostgreSQL bigint의 범위는 -9,223,372,036,854,775,808 to +9,223,372,036,854,775,807로 더 크기 때문에 string으로 변환하는 것으로 보입니다.totalAmount 값..
[TypeORM] 왜 엔티티 클래스 프로퍼티를 private으로 할 수 없을까? 문제 상황 TypeORM 사용 중 Entity 클래스의 프로퍼티를 private으로 변경했더니 이런 에러가 발생했습니다. "Property "id" was not found in "Expense". Make sure your query is correct."처음에는 프로퍼티 이름 앞에 언더스코어를 붙여서 매핑이 안 되는 건가 했는데, 프로퍼티를 public으로 해야만 데이터베이스와 객체가 자동으로 매핑되는 것이었습니다.JPA를 사용할 때는 엔티티의 모든 멤버 변수를 private으로 선언하고 getter & setter를 두어 캡슐화를 하여, 엔티티에 비즈니스 로직을 담은 public 메서드를 두어 서비스에서 호출하는 것이 도메인 주도 설계의 정석(?)이라고 알고 있습니다... TypeORM에서도 이와 ..
[TypeORM] TypeORM에서 트랜잭션 다루는 방법 TypeORM 0.3 이상 버전을 기준으로 트랜잭션을 다루는 방법을 정리했습니다. Transaction트랜잭션은 데이터베이스에서 한꺼번에 수행되어야 하는 작업 단위를 말합니다.트랜잭션의 중요한 특징 중 하나는 트랜잭션이 데이터베이스에 모두 반영되든지, 아니면 전혀 반영되지 않아야 하며 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것입니다. (ACID 중 Atomicity, 원자성) DataSource & EntityManager / QueryRunnerTypeORM에서는 DataSource & EntityManager 또는 QueryRunner를 통해 트랜잭션을 생성하고 사용할 수 있습니다.두 가지 방법을 설명하기에 앞서, TypeORM에서의 DataSource, EntityManager, ..