목록공부 (179)
저장을 습관화
메모... 세션 방식 로그인에서는 서버가 재시작될 때마다 브라우저 혹은 포스트맨 등에서의 로그인이 풀리게 된다. 이유는 사전에 별다른 조치가 없없다면 세션이 서버 메모리에 저장되는데, 서버가 종료되는 순간 메모리는 증발하기 때문이다. 브라우저에서는 쿠키가 남아있지만 서버 메모리에 세션 정보가 없기 때문에 로그인이 풀리는 것이다. 이를 막기 위해서는 세션 정보를 서버 메모리에 저장하는 것이 아닌, DB나 파일과 같은 별도 공간에 저장하는 방법이 있다. 어떤 방법을 사용해도 괜찮지만, 보통 실무에서는 Redis를 사용한다고 한다. 이는 세션을 이용한 로그인에서 발생하는 현상이고, 토큰 방식 로그인에서는 서버가 재시작되더라도 로그인이 유지된다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dcLGxA/btsAaGsfx2v/wK3ytKJsrtYvWUGGpiIGn1/img.png)
사용하는 이유 예를 들어 mysql workbench에서 SQL 명령어를 직접 입력하여 테이블의 컬럼명을 바꾸었다고 해보자. 이 작업은 DB 테이블 내에서만 적용하는 것이 아니라 개발 중인 프로젝트의 entities에서도 적용해주어야한다. DB 테이블에만 적용하고 entitiy를 적용하지 않았거나, 작업 중 실수로 잘못된 값을 입력하여 entities와 DB의 내용이 서로 다를 경우 불일치 에러가 발생할 수 있다. 0. package.json 지난 시간에 작성했던 내용 중 https://ctrs.tistory.com/467 NestJS TypeORM 연습 기록 - DB 생성, 테이블 생성, seeding(초기 데이터 입력) 지난 시간에 app.module과 .env에 사용할 DB 서버의 위치를 지정해 주..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cTncb0/btsAaiSMV82/4oKTAwwYfUHZn32itEfIt1/img.png)
지난 시간에 app.module과 .env에 사용할 DB 서버의 위치를 지정해 주었으므로, DB를 생성, 사용해 보기로 https://ctrs.tistory.com/466 NestJS - TypeORM을 위한 app.module.ts 설정 기록 메모... @nestjs/typeorm, typeorm, mysql2 패키지가 모두 설치되어 있는 상황일때 - app.module.ts // 생략... import { TypeOrmModule } from '@nestjs/typeorm'; import { ChannelChats } from './entities/ChannelChats'; import { ChannelMembers } ctrs.tistory.com 1. DB 생성 1-1. 필요한 라이브러리 설치 $..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bAzUmL/btsAajc5gMf/b29bc2ywzRBvLJCBsSMqi1/img.png)
메모... @nestjs/typeorm, typeorm, mysql2 패키지가 모두 설치되어 있는 상황일때 - app.module.ts // 생략... import { TypeOrmModule } from '@nestjs/typeorm'; import { ChannelChats } from './entities/ChannelChats'; import { ChannelMembers } from './entities/ChannelMembers'; import { Channels } from './entities/Channels'; import { DMs } from './entities/DMs'; import { Mentions } from './entities/Mentions'; import { Users..
- 증상 nestjs에서 typeorm을 사용하기 위해 패키지 설치 중 에러가 발생 $ npm install --save @nestjs/typeorm typeorm mysql2 npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: a-nest@0.0.1 npm ERR! Found: typeorm@0.2.45 npm ERR! node_modules/typeorm npm ERR! typeorm@"^0.2.37" from typeorm-model-generator@0.4.6 npm ERR! node_modules/typeorm-model-generator npm ERR! typeorm-model-..
메모... 정확히는 서비스에서 의존성 주입을 받은 컨트롤러의 생성자(constructor)에 public은 쓰지 않는 이유, private readonly를 쓰는 이유 결론은 클래스를 해당 컨트롤러 내에서만 사용하기 위해서이다. 타 컨트롤러가 Dependency Injection(의존성 주입)된 서비스를 사용한다는 것은 이미 목적을 벗어난 이야기이다. 의존성 주입을 했다는 것은 해당 컨트롤러 안에서만 쓰기 위해서인데, 이 클래스를 public으로 설정해 의존성 주입된 서비스를 바깥에서 쓸 이유는 없다. 바깥에서 쓰고 싶었다면 애초에 바깥에서 쓰지, 의존성 주입한 것을 바깥으로 끄집어 내서 쓰는 것은 무의미하다고 할 수 있다.
메모.. - 인터셉터 컨트롤러 다음에 어떠한 동작을 할때, 컨트롤러 시작 전과 시작 후 양 쪽을 조작할때 사용한다. 미들웨어와 비슷하지만 차이점은 미들웨어는 한번 끝나 컨트롤러로 돌아갔다면 이를 다시 조작하기 어렵다. 예를 들어 res.json으로 내보낸 데이터를 다시 한 번 더 사용하고 싶은 상황이 와도 구현해내기가 복잡하다. 인터셉터는 내가 어떠한 응답을 보냈을때 그 응답을 마지막으로 한 번 더 조작을 할 수 있게 된다 다시 말해 컨트롤러에서 리턴한 데이터를 마지막으로 한 번 더 가공할 수 있다 익스프레스에서는 이러한 인터셉터 기능이 없다. 예시) undefinedToNull.interceptor.ts import { CallHandler, ExecutionContext, Injectable, Nes..
메모.. interface는 타입스크립트에만 존재하고, 타입스크립트 컴파일이 끝나면 사라진다. 반면 class는 컴파일이 끝나고 자바스크립트로 바뀐 후에도 남아있어, 자바스크립트 단에서도 타입 검증, validation을 수행할 수 있다. 다시 말해 interface는 런타임에 없고, class는 런타임에 있다. 런타임에도 타입체크를 수행하길 원한다면 class로 선언하고, 런타임에 없길 원한다면 interface로 선언한다. 이는 Nest 코딩 컨벤션 중 하나이다. 첫째가 위에서 말한 interface가 아닌 class로 선언하여 export할 것 둘째 default가 아닌 class로 선언하여 export할 것 셋째 파일명은 스네이크 케이스나 카멜 케이스가 아닌 단어 사이사이 .을 넣을 것(nest ..
메모... tsconfig.json에 아래와 같이 "esModuleInterop": true 옵션을 추가한다. { "compilerOptions": { "esModuleInterop": true } } 타입스크립트 컴파일러는 기본적으로 CommonJS의 exports, require 형태의 코드를 생성한다. 이 코드를 ES6 코드 베이스로 가져올때 문제가 발생하는데 esModuleInterop : true 옵션을 줌으로써 commonJS 모듈과 ES6 모듈을 서로 호환되게끔 해줄 수 있다. 예를들어.. 분명히 import한 라이브러리가 undefined 등의 에러가 발생하는 것을 방지한다거나 모든 라이브러리(*)를 가져올때 아래와 같이 작성던 것을 import * as react from 'react' ..
express에서 쓰던 nodemon과 같이 어플리케이션 실행 중 파일의 변동 사항이 발생하면 자동으로 어플리케이션을 재실행시켜주는 패키지 [공식문서] https://docs.nestjs.com/recipes/hot-reload Documentation | NestJS - A progressive Node.js framework Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Funct..