목록Node.js (7)
코딩과로그
사유: 인터페이스의 경우 타입스크립트에서 정의한 것이고 자바스크립트에는 없는 문법이다. 클래스의 경우 JavaScript ES6 이후부터 자바스크립트에 있는 문법이므로 트랜스파일링될 때에 보존되며 인터페이스는보존되지 않는다. 따라서 추후에 Pipes를 사용할 때에 인터페이스로 DTO를 정의한다면 참조할 수 없어 문제가 된다. 참고 자료:https://docs.nestjs.com/controllers#request-payloads
TypeError: Cannot read property 'config' of undefined 2 | import dotenv from 'dotenv'; > 3 | dotenv.config({ | ^ 내 프로젝트에 jest를 적용하려 했고 빌드 중 위와 같이 에러가 발생했다. 검색 결과, tsconfig.json의 설정에서 esModuleInterop 를 true로 수정하면 정상적으로 동작했다. 왜 esModuleInterop를 true로 바꿔주면 정상적으로 동작할까? 이는 다음과 같은 모듈과 관련이 있었다. - CommonJS/AMD/UMD modules - ES6 modules 자바스크립트의 import 문법은 모듈마다 서로 상이한 부분이 있었다. 기본적으로 빌드 시 ES6 modules 형식으로 ..

이전 게시물 포트포워딩을 통한 배포 (https://sororiri.tistory.com/14)에 연장선입니다. https 배포를 하게 된 경위: 현재 진행하고 있는 프로젝트에서 사용자의 위치정보를 얻어오는 API가 필요했고 위치정보는 https 프로토콜로 되어있어야만 획득이 가능했었기에 백엔드 서버를 https 로 변경할 필요성이 생겼다. https 배포 방법: 순서 1. 도메인 적용: https 배포를 하기 위해서는 도메인이 필요하다. 기존 서버 URI는 http://118.218.28.209 처럼 직접 IP주소를 입력해서 들어가는 방식이었으므로 도메인을 사용하지 않았기에 도메인을 구매했고, 도메인을 아래의 스크린샷과 같이 http://118.218.28.209 에 연결시켰다. (가비아 링크) 순서 ..

기본적으로 자신의 컴퓨터에 로컬 서버를 실행시켜봤다는 가정하(ex) localhost:5000)에 설명합니다. 집에 있는 라우터를 통해 포트포워딩하여 서버를 배포하였다. 포트포워딩이란 자신이 받은 PORT를 다른 컴퓨터에 전달하는 것이다. 활용하는 측면에서 말하자면, 다른 컴퓨터가 크롬 브라우저를 통해 내 라우터로 접근할 때에, 라우터에게 내가 설정한 컴퓨터에게 해당 요청을 대신 받도록 하는 것이다. 그러면 다른 컴퓨터(브라우저)는 라우터의 IP를 통해 내 컴퓨터의 서버에 접속할 수 있다. 예시를 통해 포트포워딩을 적용해 서버를 배포하는 과정을 봐보자. 우선 내 컴퓨터의 IP를 알아야 한다. 방법은 인터넷을 통해 따로 확인해보자. (우분투의 경우: ifconfig 명령어를 통해 알 수 있음) 내 ip 정..

게시물을 변경하는 API를 호출 시, 아래와 같이 데드락이 발생하였다. = MESSAGE = URL | /posts/4 METHOD | PATCH BODY | content aaabbbbccc | tagNames 뼈,다,귀 STATUS | 200 RESP | 6.153ms DATE | 7:00:41 PM ... ER_LOCK_DEADLOCK: Deadlock found when trying to get lock; try restarting transaction ... 데드락의 원인 분석 테스트는 다음의 블로그를 참고하였다. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=cmw1728&logNo=220942833368 * 데드락이 ..

데이터를 가공 및 검증하기 위한 DTO 클래스를 이전에 생성했었다. https://sororiri.tistory.com/8 [프로젝트 변경사항 기록] DTO 추가를 통한 모듈화 적용 기존에는 클라이언트로부터 받은 정보들에 대한 (데이터 가공 / 검증)을 컨트롤러/서비스에서 처리하고 있었다. 그러나 컨트롤러의 역할은 클라이언트로부터 받은 정보를 응답해주는 역할이므 sororiri.tistory.com 그러나 검증할 내용이 많고 가공할 정보 또한 많아 코드의 가독성이 떨어졌다. 해당 현상을 수정하기 위해 class-validator 와 class-transformer 라이브러리를 사용해 데코레이터를 추가해줌으로써 코드의 가독성을 늘렸다. 변경 전: 각각의 멤버변수에 대해 생성자함수 내에서 데이터 검증을 하였..

기존에는 클라이언트로부터 받은 정보들에 대한 (데이터 가공 / 검증)을 컨트롤러/서비스에서 처리하고 있었다. 그러나 컨트롤러의 역할은 클라이언트로부터 받은 정보를 응답해주는 역할이므로 데이터 가공 및 검증에 대한 처리까지 담당한다면 응집성이 떨어지므로 DTO 클래스를 만들어 데이터 가공/검증 역할을 위임하도록 하였다. 기존 : post.service.ts => 기존에는 데이터에 대한 검증까지 담당하고 있었음. 변경 : posts.dto.ts => DTO class에서 검증하도록 변경 기존: post.controller.ts => 기존에는 데이터에 대한 가공까지 담당하고 있었음. 변경: posts.dto.ts => DTO class 내의 factory 함수에서 검증하도록 변경 관련 커밋: https://g..