오히려 좋아..

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

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

Web Programming 53

[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..

[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"), ) ..

[git] 취소하기 치트 시트

1. Rebase 취소 하기 이전에 어떤 명령어를 작성했는지 그리고 해당 커밋의 해시값이 출력 >>> git reflog a23fve3 HEAD@{1}: ADD: commit 1 bh323gb HEAD@{2}: Delete: commit 2 19dfg4b HEAD@{3}: Modify: commit 3 e324b34 HEAD@{4}: Revert: commit 4 원하는 커밋의 해시값(6자리 숫자와 영어로 이루어져있는 값)을 이용해 아래 명령어를 작성해준다. 참고로 --hard는 기존 작업해놓은 내역이 지워지면서 해당 커밋으로 돌아가는 옵션이므로 잘 고민해서 사용하길 바란다. 이런 결과를 원하지 않는다면 그냥 옵션없이 사용하면 된다. git reset --hard 19dfg4b

Web Programming/Git 2021.11.06

[DRF] Serializer Validation

Serializer는 입력값을 검증하는 역할을 할 수 있다. 이 글에서는 Serializer의 Validation 기능에 대해 알아보도록 하겠다. 가령 request 내부에 포함된 데이터를 이용해 유저를 만드는 경우를 생각해보자. UserCreateSerializer는 아래와 같이 작성 할 수 있다. 물론 ModelSerializer를 이용해 검증하는 방법도 있지만 동작을 확인하기 위해 Serializer를 사용하도록 하자. class UserCreateSerializer(serializers.Serializer): username = serializers.CharField() # ID password = serializers.CharField() # 비밀번호 password2 = serializers...

[Django] Aggregate와 Annotate

아래에서 사용된 코드는 아래 레포지토리에서 받을 수 있다. https://github.com/junha6316/django_ex junha6316/django_ex Contribute to junha6316/django_ex development by creating an account on GitHub. github.com 장고 ORM의 기능 중 Aggregate와 Annotate에 대해 정리한 글이다. 어떤 기능을 하고 있는지는 많이 들어 알고 있지만 실제로 사용해본적은 없다; http://raccoonyy.github.io/django-annotate-and-aggregate-like-as-excel/ (엑셀만큼 쉬운) Django Annotation/Aggregation Django ORM을 강력..