본문 바로가기

백엔드6

[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 값.. 2024. 10. 25.
[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에서도 이와 .. 2024. 9. 9.
무중단 배포 전략 무중단 배포란?무중단 배포(Zero-Downtime Deployment)는 애플리케이션을 배포할 때 서비스 중단 없이 새로운 버전을 배포하는 방식입니다.사용자에게는 지속적인 서비스를 제공하면서, 새로운 버전의 안정성을 점진적으로 확인할 수 있는 방법입니다. 무중단 배포 주요 전략 3가지1. 블루-그린 배포 (Blue-Green Deployment)과정두 개의 동등한 환경(블루/그린)을 환경을 이용합니다. 블루는 현재 운영 중인 프로덕션 환경이고, 그린은 새로운 버전을 배포할 환경입니다. 블루 환경이 실행되고 있는 상황에서, 그린 환경에 새로운 버전의 애플리케이션을 배포합니다.배포가 완료되고 나면, 로드 밸런서나 웹서버를 통해 트래픽을 블루 환경에서 그린 환경으로 전환합니다.이후 블루 환경은 필요에 따라 .. 2024. 8. 13.
[TypeORM] TypeORM에서 트랜잭션 다루는 방법 TypeORM 0.3 이상 버전을 기준으로 트랜잭션을 다루는 방법을 정리했습니다. Transaction트랜잭션은 데이터베이스에서 한꺼번에 수행되어야 하는 작업 단위를 말합니다.트랜잭션의 중요한 특징 중 하나는 트랜잭션이 데이터베이스에 모두 반영되든지, 아니면 전혀 반영되지 않아야 하며 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것입니다. (ACID 중 Atomicity, 원자성) DataSource & EntityManager / QueryRunnerTypeORM에서는 DataSource & EntityManager 또는 QueryRunner를 통해 트랜잭션을 생성하고 사용할 수 있습니다.두 가지 방법을 설명하기에 앞서, TypeORM에서의 DataSource, EntityManager, .. 2024. 8. 5.
REST 원칙과 REST API 설계 방법 "그런 REST API로 괜찮은가"를 참고하여 정리한 내용입니다.   REST란?REpresentational State Transfer의 약자입니다.웹 서비스 아키텍처의 스타일 중 하나로, 네트워크를 통해 클라이언트와 서버가 상호작용하는 방식을 정의하는 방법입니다.인터넷에서 어떻게 정보를 공유할 것인지에 대한 해답으로 1991년 웹(Web)이 등장했습니다. 웹은 HTML이라는 형식으로 정보를 표현하고, 정보들에 대한 식별자로 URI를 선택하고, HTTP라는 프로토콜로 정보를 전송합니다.2000년 Roy T. Fielding은 기존의 웹을 망가트리지 않고 HTTP를 개선할 수 있을지에 대한 논문을 발표했고, 이것이 REST 였습니다.REST API란?REST API는 REST 아키텍처를 따르는 API로,.. 2024. 8. 3.
에러코드 설계 벤치마킹 & NestJS에서 에러 응답 커스텀 방법 문제상황 Nest.js에서 기본 에러 응답 형식은 위와 같습니다. 이렇게 응답을 주면 협업에 어려움이 있을 것 같습니다.일단 에러가 어느 API에서 발생했는지, 언제 발생했는지 알기 어렵습니다.하나의 상태 코드에 대해서도 세부적으로 분류하기 위한 에러 코드도 필요해보입니다. 벤치마킹다른 기업들에서는 어떤 에러 코드 체계를 가지고 운영 중인지 살펴보겠습니다. 1. NAVER WORKS Developers링크 : https://developers.worksmobile.com/kr/docs/error-codesHTTP 상태 코드와 별도의 에러 코드 체계를 가지고, 해당 코드를 응답 본문에 포함시켜주고 있습니다.동일한 상태 코드에 대해서 여러 종류의 에러 코드를 지정해놓았다는 점에서 어떤 에러인지 파악하기 쉬워.. 2024. 8. 1.