오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

분류 전체보기 245

[NestJS] mongoose 다른 이름으로 populate하기

mongoose 네이밍 컨벤션중에 다른 collection을 참조하는 필드의 경우 id를 붙여주는 컨벤션이 있다. 의미상 당연히 ObjectId가 들어가기 때문에 적절한 컨벤션이라고 생각한다. 하지만 문제는 populate할 때 발생한다. populate는 일종의 RDBMS의 join과 같은 것으로 참조하는 collection에서 document를 묶어서 가져오는 메서드이다. 저장되는건 userId인데 실제로 populate한 이후에는 UserDocument가 되기 때문이다. 그래서 아래와 같은 상황이 매번 벌어진다 const order = this.orderRepository.getById(orderId).populate('userId') console.log(order.userId.name) cons..

[NestJS] 아직도 dotenv 사용함?

미안하다 ConfigModule 보여주려고 어그로 좀 끌었다. 일반적으로 데이터베이스의 호스트 및 유저, 비밀번호와 같은 정보는 앱내에 하드코딩해서 보관하지 않는다. 이런 정보들은 실수로라도 노출되면 서비스에 치명적인 공격으로 이어질 수 있기 떄문이다. 이런 상황을 막기 위해 일반적으로 따로 변수를 파일로 보관 후 런타임에서 가져다 사용하는 방식으로 구현한다. 이를 도와주는 대표적인 패키지가 바로 dotenv이다. dotenv가 지원하는 프레임워크가 많다. NestJS에서도 당연히 dotenv로 구현하려고 했지만 구글신에게 여쭤보니 NestJS에서 내부 패키지로 dotenv와 같은 기능을 지원하는게 있다고 한다. @nest/config 이다. 먼저 해당 패키지를 다운로드 해주자! yarn add @nes..

[NestJS] Mongoose pre, post hook 설정

import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { Order, OrderSchema, OrderDocument, } from './schemas/order.schma'; @Module({ imports: [ // 훅 없이 사용하고 싶다면 아래처럼 적어준다. /* MongooseModule.forFeature([{name:Order.name, schema: OrderSchema}]) */ MongooseModule.forFeatureAsync([ { name: Order.name, imports: [AnyModule], // pre, post 훅을 수행하기 위해 필요한 모듈를 ..

[NestJS] DTO(Data Transfer Object)를 이용한 Validation

npm install --save class-validator class-transformer 파이프 라인 설정 // main.ts import { ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { AppModule } from 'app.module'; async function bootstrap() { console.log(process.env.NODE_ENV); const app = await NestFactory.create(AppModule, { logger: ['log'], }); // 글로벌 파이프 설정 app.useGlobalPipes(new ValidationPipe()); ..

[NestJS] NestJS에서 MongoDB 연결하기

2020.12.12 - [Language/Javascript] - [Node.js] MongoDB Mac에서 brew로 다운받고 Node.js로 연결하기 [Node.js] MongoDB Mac에서 brew로 다운받고 Node.js로 연결하기 Node.js + Mongodb 조합을 많이 사용한다고 하지만 python 만큼 자료는 많지 않은 듯하다. 이번 글에서는 Mac에서 brew를 통해 mongodb를 다운받고 node.js를 이용해서 연동하는 방법에 대해 알아보겠다. 일단 cocook.tistory.com MongoDB 다운로드 방법은 위 포스트에서 확인하길 바란다. 이 글은 NestJS에서 어떤식으로 Mongo DB를 사용하는지 정리한 글이다. NestJS에서 mongoose를 활용한 세팅과 Sche..

[🐕🐾일기] 프로그래밍을 잘한다라는 것에 대하여.. 라는 말이 있듯이..

요즘은 프로그램을 잘하는 것은 무엇일까에 대한 고민을 많이한다. 주니어로서 좋은 지향점이 될 수 있기 때문이다. 나름대로 내린/ 결론을 짧게 적어보자면 "가독성과 유지보수성을 유지하는 복잡한 구현을 할 줄 아는 프로그래머" 정도가 될 것이다. 물론 여기에는 커뮤니케이션 스킬과 아키텍쳐나 다른 기술들이 전제가 되어야하지만 이 이야기는 좀더 더 넓은 범주에서 다루고 싶다. 여기서 이야기 할 것은 프로그래밍 오직 그 자체이다. 위에서 적은 문장을 두 부분으로 나눌 수 있다. "가독성과 유지보수성" 그리고 "'복잡한 구현" 이다. "가독성과 유지보수성" 어디서 많이 들어보지 않았는가? 바로 클린한 코드를 작성하는 능력을 말한다. 코드를 클린하게 작성하는 것을 축구 선수의 역량에 비유하자면 선수의 개인기가 좋은 ..

글/🐕🐾 일기 2021.11.25

[Django] Django MySQL Fulltext Index 설정

오늘은 Django-mysql로 구성되어 있는 어플리케이션에서 Full text index를 설정하는 방법에 대해 알아보겠다. 먼저 현재 장고에서는 Fulltext 인덱스를 ORM으로 지원하지 않기 때문에 실제 쿼리를 데이터 베이스에 날려 동작해줘야한다. 아래 명령어를 통해 FullText를 설정하는 쿼리를 마이그레이션 파일로 만들어주자. app_name에 마이그레이션 파일을 생성하고자하는 app 이름을 작성해주면 된다. python manage.py makemigrations app_name --empty --settings=app.settings.local 생성된 마이그레이션 파일은 아래와 같다. 이제 operations안에 Fulltext를 생성하는 쿼리를 작성해주자. from django.db i..

[pytest] Trouble Shooting

1. 여러개의 데이터베이스를 사용할 때 프로덕트에서 부하 부담의 이유로 replica 데이터베이스를 사용하고 있고 테스트 데이터 베이스를 따로 사용하고 있다면 제대로 테스트가 돌아가지 않을 수 있다. 데이터가 작성되는 곳은 마스터 데이터베이스이고 읽어올때는 replica 데이터 베이스에서 읽어오기 때문이다. 물론 테스트 데이터베이스도 동일하게 구성 할 수 있지만 온갖 설정을 피하고 싶을때 아래처럼 사용하면 된다. @pytest.fixture(autouse=True) def mock_BaseManager(mocker): mocker.patch( "companies.models.Company.objects.using", return_value=Company.objects.using("default"), ) ..

[node] nvm 사용하기

로컬에 있는 노드 버전과 프로젝트 노드 버전이 달라 고생할 때가 있다. 이를 해결하면서 찾은 정보들을 정리해둔다. 이 문제는 nvm으로 해결할 수 있다. 1. NVM 설치 맥에서는 아래 명령어로 다운받을 수 있다. brew install nvm 다운로드 받은 후 환경변수를 설정해줘야한다. vi ~/.bash_profile 위 명령어를 작성하면 아래와 같은 창이 나온다. 맨 아래줄에 다음과 같이 적어준다. export NVM_DIR="$HOME/.nvm" [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh" [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt..