본문 바로가기
반응형

nestjs12

다른 언어로 성장하기 썸네일 이미지는 데브경수님의 인스타툰에서 가져왔습니다. 작년 4월까지 JVM 언어 / Spring 을 사용하면서 커리어를 쌓다가, 최근 이직을 하면서 Node.js (JS / TS) 에서 개발경험을 쌓고 있다. 처음 Node.js를 만났을때는 2016년이였는데, 당시엔 "Node.js와 Express를 활용한 블로그 API 2시간 만에 만들기" 같은 류의 컨텐츠가 유행이였다. Express가 주력으로 선택될때의 Node.js 코드 스타일과 아키텍처, 컨벤션등은 기존의 프레임워크와는 꽤나 많이 달랐다. 그래서 당시 스프링 프레임워크가 주력이였던 내 입장에서는 여기에서 추구하는 아키텍처나 패턴은 무엇일까? 궁금하기도 했다. 그리고 이후에 어떤 방향성으로 발전할까도 궁금했다. 시간이 흘러 최근에 Node.js.. 2022. 12. 16.
데이터 변환 계층 (Data Transform Layer) Express와 JS/TS만을 가지고 프로젝트를 진행하다보면 데이터 변환 계층의 기준이 정해져있지 않은 경우를 많이 본다. 사람마다 다르기도 하고, 혹은 같은 사람이 작성한 코드에도 천차만별이다. 이에 대해서는 팀에서 확실하게 컨벤션을 잡지 않으면 서로 데이터 변환 계층을 다르게 두어 프로젝트 전체가 일관성이 떨어지고 코드 가독성과 리팩토링 내성도 떨어지게 된다. 그렇다면 데이터 변환 계층의 기준을 어떻게 세우면 좋을까? 문제 예를 들어 다음과 같은 상황이 있다고 해보자. 프로젝트에서는 js-joda (혹은 Dayjs 등) 날짜 타입을 쓰고 있는 상황에서 Database SQL에서 사용하기 위해서는 Date 로 치환해야하는 경우 API 로 외부에 데이터를 전송 (혹은 요청) 하기 위해 String 으로 .. 2022. 11. 28.
jest.mock 보다 ts-mockito 사용하기 (feat. Node.js) NodeJS 기반의 백엔드에서는 NestJS, RoutingControllers 등 최근 대세가 되는 MVC 프레임워크들이 모두 Class를 기반으로 한 DI (Dependency Injection) 방식을 사용하고 있다. 그러다보니 Jest의 Mocking 방식은 백엔드 NodeJS 환경에서 적합한 도구는 아닐 수 있다. 특히, Mock/Stub 객체 생성에 불편한 점이 많다. 그래서 Test Runner로서 Jest는 사용하더라도, Mock 라이브러리는 다른 것을 사용하는 것을 추천하는데, 그 중 대표적인 것들은 다음과 같다. ts-mockito sinonjs jest-mock-extended 이번 글에서는 그 중 ts-mockito 를 통한 테스트 더블 (Mock, Stub 등) 활용법을 알아본다... 2022. 2. 21.
Mustache.js 로 이메일 템플릿 구성하기 (TypeScript) 이메일 기능 구현을 위해서 많은 고민을 하는 부분이 이메일 본문을 위한 템플릿 구성입니다. AWS SES 등 이메일 발송 자체는 이제 예전처럼 SMTP 서버 구축 등을 할 필요가 없어서 훨씬 난이도가 줄었습니다. 일반적으로 이메일의 본문은 HTML + Inner CSS로된 마크업코드를 작성합니다. 이메일 안에서는 CSS나 JS 파일 로드가 안되기 때문에 HTML 코드만으로 해결이 되어야 하는데요. 위에서 언급한 HTML 코드를 단순 문자열로만 진행할 경우 다음의 문제점들이 있습니다. html 코드에서 오타가 발생하는걸 찾을수가 없다. html 코드가 결국 문자열이기 때문에 태그가 1개 부족해도, 혹은 attribute 가 오타가 나도 IDE에선 전혀 감지할수가 없다. 렌더링 해야할 코드가 늘어나면 늘어날.. 2021. 11. 29.
TypeScript 환경에서 class-transformer 적극적으로 사용하기 요즘 같이 분산 환경이 적극적으로 도입 되고 있는 시기에는 꼭 프론트엔드가 아니더라도 백엔드 환경에서도 외부의 HTTP API를 호출하는 일은 당연한 일입니다. 그래서 HTTP API (저는 Rest API라는 단어는 선호하진 않습니다. 어차피 규약 지키고 있는 경우가 거의 없거든요) 를 통해 원격 서버에서 JSON 객체를 읽어오는 작업을 자주 하게 되는데요. 응답으로 넘어온 JSON 객체는 리터럴 객체이지 클래스의 인스턴스가 아닙니다. Axios를 비롯해서 Got 등 NodeJS & TypeScript 환경에서 자주 사용하는 HTTP API 중 어느 것도 클래스의 인스턴스를 응답으로 넘겨주진 않습니다. Spring이나 닷넷등의 다른 백엔드 프레임워크를 사용해본 분들이라면 여기서 이상한 괴리감을 느낄 수.. 2021. 11. 24.
NestJS에서 응답/요청 객체 직렬화 (Serialization) 하기 저 같은 경우에 최대한 Dto를 불변으로 만들기 위해 setter나 public 필드는 배제하는데요. 어쩔수 없이 public 필드 (혹은 public setter)를 써야하는 경우 (TypeORM의 Entity 등)를 제외하고는 무조건이다 싶을 정도로 딱 필요한 정도로만 외부 제공용 메소드를 만들어서 사용합니다. 이를 위해서는 Controller에서 사용하는 응답/요청 Dto 객체의 직렬화는 필수로 진행하게 됩니다. 이번 시간에는 이런 상황등을 대비해서 응답/요청 객체의 직렬화 하는 방법을 진행해보겠습니다. 1. 응답 객체 직렬화하기 흔히 소프트웨어 설계에서 이야기하는 응집도(cohesion)와 결합도(coupling)가 있습니다. 좋은 코드 디자인이라 하면, 높은 응집도 / 낮은 결합도로 설계해야 하.. 2021. 10. 24.

728x90
반응형