일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 와글와글
- network
- 타입 챌린지
- node.js
- type challenge omit
- 백엔드
- Array.prototype.push
- TypeScript 타입챌린지
- nestjs
- Conditional Types
- 노드 교과서 개정2판
- 스터디 회고
- 맵필로그
- 해커톤
- 와글와글 해커톤
- npm
- 189-Awaited
- Mappilogue
- 타입 챌린지 Deep Readonly
- Type Challenge
- 이펙티브 타입스크립트
- typeorm
- 타입챌린지
- 월간cs
- 타입스크립트
- TypeScript
- HTTP
- 타입챌린지 Readonly2
- 타입 챌린지 IndexOf
- 코딩테스트
- Today
- Total
목록백엔드 (26)
iamkanguk.dev
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/t3Boi/btsAO5kvKtg/eFmVttmBVpJgZNDj2CdkKk/img.png)
최근에 Hard-Delete에서 Soft-Delete로 변경하면서 repository method와 entity 쪽에 전반적으로 변경이 일어났는데.. 오늘 개발한 API들을 점검하면서 글 제목과 같이 에러가 발생했다. JoinColumns는 FK를 연결할 때 쓰는건데 아무리 봐도 잘못된 부분이 없는데 어디가 문제인지 도저히 모르겠는 것이다. 위의 에러는 Soft-Delete를 하는 과정에서 발생한 이슈이다. 필자가 참여하고 있는 프로젝트에서는 Schedule과 ScheduleArea 엔티티가 각각 있다. 기존 고드를 제공해보겠다. // ScheduleEntity @OneToMany( () => ScheduleAreaEntity, (scheduleArea) => scheduleArea.scheduleId,..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uUhnJ/btsAmyaKd1x/AvoQyLCocGXGGpIdi7JIIK/img.png)
오늘은 약 3일 동안 개-고생을 한 것에 대해서 블로그를 써보려고 한다. 고생을 한 내용은....? 필자는 Nest에서 특별한 경우가 아니고서는 Response DTO를 만들어서 반환한다. 이때 Expose와 Exclude 메서드를 사용한다. 그리고 최근에는 Get 메서드에 대해서 캐싱을 시도해보고 있는데 이 부분에 있어서 있었던 이슈를 공유해보고자 한다. Response DTO에 Class-transformer의 Expose와 Exclude 사용 import { Exclude, Expose } from 'class-transformer'; import { MarkCategoryDto } from './mark-category.dto'; export class GetMarkCategoriesRespons..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c5aSxm/btsAmqQjIq8/4kvbyjRiXVlav0odR9QBH0/img.png)
필자는 Nest를 개발할 때 Service와 Repository를 거쳐온 결괏값을 Client로 반환할 때 Response DTO 객체로 만들어서 Controller 계층으로 넘기고 Controller에서 클라이언트로 결괏값을 반환할 때 ResponseEntity 객체에 넣어서 반환한다. ResponseEntity를 사용한 이유는 무엇인가요? ResponseEntity는 뭐 특별한 라이브러리나 그런것이 아니다. 원래 초기에는 개발할 때 그냥 return { age: 10, name: '' } 이런 식으로 했었는데 가시성 측면으로도 좋지 않아 보였고, 추후 유지보수적으로도 좋지 않다고 생각했다. Response DTO를 도입한 것도 그 이유다. 그래서 뭔가 객체를 하나 만들어서 반환해준다면 코드적으로 더욱..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cC05a8/btsAbm2yeay/7qw71HNEPCu8DhcduKBcvK/img.png)
지금 NestJS 커뮤니티에 들어와 있는데 samchon 님이 개발하신(?) Nestia 라이브러리를 다들 많이 사용하시는 것 같아서 나도 프로젝트 하면서 부담가지지 않으면서 생각날때마다 조금씩 해보려고 한다. 개인적으로 문서를 보는 능력이 많이 부족하다고 생각되어서 문서를 보면서 직접 공부겸 프로젝트를 해보는 경험도 해보려고 한다. Nestia란? Nestia는 NestJS를 위한 helper library 라고 할 수 있다. Nestia를 사용하게 되면 다음과 같은 도움을 받을 수 있다고 한다. - class-validator에서 런타임 유효성 검사기는 기존보다 20,000배 빠르다. - class-transformer에서 JSON Serialization은 기존보다 200배 빠르다. - Swagge..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/VKgfa/btsAaFGvZ1p/2pjJCbDYI4d0H2Wg7KWa00/img.png)
지금 하는 맵필로그 프로젝트 이전에는 모두의 여행, 트리퍼라는 프로젝트를 했는데, 그 프로젝트는 express와 javascript로 개발을 했었다. 단순히 express로 개발을 할 때는 DTO와 Entity 그리고 OOP에 대해서는 진짜 아예 사용하지도 않았고 무지했던 것 같다. 하지만, Nest를 시작해 보면서 자연스럽게 DTO와 Entity를 알아야 했고, 프레임워크 특성상 OOP의 개념도 가지고 있어야 개발에 차질이 없을 것 같아서 이렇게 공부를 시작하게 되었다. 그래서 이번 포스팅에서는 DTO와 Entity 개념이 간단하게 무엇인지, 그리고 Nest에서 그 둘의 상관관계에 대해서 알아보도록 하자. Entity Entity는 실제 DB 테이블과 매핑되는 핵심 클래스이고, 데이터베이스 테이블에 있..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/emAq5c/btsAaG6rEHF/KjsCGY2h3HPl8kAXA7LUEk/img.png)
async findMarkOnSpecificId( mark: MarkDto, ): Promise { const queryRunner = this.dataSource.createQueryRunner(); await queryRunner.connect(); await queryRunner.startTransaction(); try { const markCategoryName = await this.markCategoryRepository.findOne({ select: { title: true, }, where: { id: mark.getMarkCategoryId, status: StatusColumnEnum.ACTIVE, }, }); // metadata 부분 조회하기 const markMetadatas ..