분류 전체보기 44

[NestJs] Custom Decorator

나만의 데코레이터 만들어보기 export const User = createParamDecorator((data, context: ExecutionContext) => { const req = context.switchToHttp().getRequest(); const user = req.user as UsersModel; return user; }); User는 데코레이터의 이름이 된다. createParamDecorator 함수를 사용한다. 첫 번째 인자 data는 데코레이터의 인자값을 받아올 수 있다. (아래에서 id를 가져올 수 있다.) 4. 두 번째 인자 context는 ExcutionContext 타입이다. 이것을 활용해 요청 객체를 받아올 수 있다.

Node.js 2023.12.28

[NestJs]Guard 사용하기

Guard란?? pipe보다 먼저 실행된다. request 객체를 가지고 여러 가지 처리를 가능하게 한다. 대표적으로 인증 처리를 한다. 공식문서에 따르면 미들웨어보다 나은 방식으로 처리할 수 있다고 한다. 미들웨어는 next()로 어떤 라우터가 실행될지 모르지만 guard는 ExcutionContext를 사용하기 때문에 어떠한 라우터가 실행될지 명확히 알 수 있다. 코드가 명확해지고 DRY 하고 선언적으로 작성할 수 있다. Guard 사용법 1. Guard로 사용할 class를 선언한다. CanActivate 인터페이스를 구현해야 한다. @Injectable() export class BearerTokenGuard implements CanActivate { async canActivate(contex..

Node.js 2023.12.27

[NestJs]Pipe사용하기

Pipe란???? 다음은 NestJs에서 요청과 응답의 흐름을 나타낸다. controller전에 4번을 보면 pipes라고 있는 것을 확인할 수 있다. 파이프(pipe)란?? 엔드포인트에 도달하기 전 요청 데이터에 대해 유효성 검증을 할 수 있다. 요청 데이터에 대해 변환 작업을 할 수 있다. @Get(':id') getPost(@Param('id') id: string) { return this.postsService.getPostById(+id); } 다음과 같이 id를 통해 게시글을 조회하는 로직이 있다. 현재는 url에서 string으로 id를 받기 때문에 +를 이용하여 number타입으로 형변환을 해주었다. 우리는 서버에서 id는 항상 number를 사용할 것이기 때문에 넘어올 때부터 numbe..

Node.js 2023.12.26

[NestJs]Model간 Relationship 설정 + Relation Options

OneToOne 테이블 간 1:1 관계일 때 사용한다. 이 예시에선 유저와 유저 프로필에 대한 예제를 이용하겠다. // User Entity @OneToOne(() => ProfileModel, (profile) => profile.user) profile: ProfileModel // ProfileEntity @OneToOne(() => UserModel, (user) => user.profile) @JoinColumn() author: UserModel UserModel에서 ProfileModel 타입의 profile을 만든다. @OneToOne() 어노테이션을 적어준다. 첫 번째 인자는 콜백함수 형태로 ProfileModel을 받아준다. 두 번째 인자는 콜백함수 형태로 해당 profile의 user..

Node.js 2023.12.22

[JavaScript]Property Attribute

자바스크립트에서 객체의 프로퍼티를 크게 두 종류로 볼 수 있다. 데이터 프로퍼티 - 키와 값이 있는 실질적인 데이터 액세스 프로퍼티 - 자체적으로 값을 가지고 있지는 않으나 호출 시 값을 불러오거나 설정할 수 있다. const person = { name: "홍길동" ,year: 2000 get age() { return new Date().getFullYear() - year; } set age(age) { this.year = new Date().getFullYear() - age; } } 여기서 데이터 프로퍼티는 name, year를 이야기하고 액세스 프로퍼티는 getter, setter를 의미한다. 우리가 변수처럼 사용하는 프로퍼티는 내부적으로 또 다른 속성들이 존재한다. 마치 프로퍼티도 객체처럼..

JavaScript 2023.12.21

[NestJs] NestJs에서 typeorm 세팅하기(Docker-compose사용)

1.Nest 프로젝트 생성 // nest cli가 설치가 안되어있다면 설치해주어야 한다. npm i -g @nestjs/cli // 프로젝트 생성 nest new "프로젝트 이름" 2. 필요한 패키지 다운로드 (typeorm, postgres) yarn add @nestjs/typeorm typeorm pg 3.docker-compose 파일을 생성 후 파일 작성 데이터베이스 환경을 설치하기 위해서(여기서는 postgres를 사용한다.) yaml파일로 생성한다 // 사용할 서비스의 목록 services: //서비스 이름 postgres: // 이미지 이름 (docker hub) image: postgres:15 restart: always // 동기화 volumes: - ./postgres-data:/v..

Node.js 2023.12.18

[NestJs]의존성 주입과 제어의 역전

nest프레임워크를 공부하다가 보니 의존성 주입과 제어의 역전에 대하여 알게 되었다. 스프링을 공부할 때도 같은 개념이 사용되어 비교적 수월하게 이해하였다. nest의 핵심 이론인 만큼 한 번 더 정리해두려고 한다. 의존성 주입이란???? class A { } const a = new A(); 우리가 일반적으로 class를 생성하고 그 클래스를 바탕으로 인스턴스를 생성하는 과정이다.하지만 다음 코드를 보자. nest의 controller이다. @Controller('posts') export class PostsController { constructor(private readonly postsService: PostsService) {} } 컨트롤러에서 우리는 postsService를 자유자재로 사용할..

Node.js 2023.12.11

[Git]Github로 branch만들어서 팀원들과 협업하기

1. 프로젝트 폴더에서 터미널로 git을 초기화해준다. 그리고 add, commit까지 진행한다. git init // 현재 변경사항 모두를 스테이징에 올린다. git add . // 스테이징에 올라와 있는 파일들을 commit 한다. git commit -m "커밋 메시지" 2.github에서 원격 저장소를 생성한다.아래 명령어로 로컬과 연결시킨다. 3. 업로드가 잘되었는지 확인한다. 4.dev 브랜치를 생성 후 원격저장소에 push 한다. main에다가 바로 작업하지 않고 dev에 하는 이유는 main은 배포용 브랜치이고 그전에 실질적으로 기능 개발하는 곳이 dev이다. // 브랜치를 생성후 바로 이동시킨다. git switch -c dev // 원격저장소 dev에 push한다. (github에 de..

개발이야기 2023.12.08

[JavaScript]화살표 함수를 왜? 사용할까

자바스크립트에서 함수를 사용하는 여러가지 방법이 있다.그중 모던 자바스크립트 함수에서 가장 핵심적인 화살표 함수에 대해서 알아보자. 일반 함수와 무엇이 다른가 1.가독성 향상 // 기존 함수선언 function add(a, b) { return a + b; } // 화살표 함수선언 const add = (a, b) => a + b; const pritn = msg => console.log(msg); 기존 함수 선언보다 훨씬 간결한것을 확인할수있다. 코드가 한줄이면 return 문까지 생략할수있고 매개변수가 한개라면 매개변수 괄호도 생략 가능하다. 2.this가 존재하지 않는다. 일반함수에서 this는 코드가 실행시점 컨텍스트에 의해 결정되지만 화살표 함수는 선언시점 컨텍스트에 따라 결정된다. 화살표 함..

JavaScript 2023.12.07

[TIL]32.타입스크립트 제네릭

제네릭이란??? 많은 프로그래밍 언어에서 제네릭이란 것을 채택하고 있다. 타입스크립트에서도 제네릭을 채택하고 있다. 타입을 고정적으로 선언하는 것이 아니라 유연하게 타입을 사용할 수 있게 한다. 이것은 엄청난 장점으로 작용한다. 타입이 유연하게 바뀐다는것은 컴포넌트를 재활용할 수도 있기 때문에 좋은 사용성을 가지게 된다. // 기존사용법 파라미터의 타입이 정해져있다. function whatValue(value: any) { return value; } const value = whatValue("test"); // 제너릭사용 파라미터의 타입이 정해지지 않고 실행시점에 정해진다. function genericWhatValue(value: T) { return value; } const genericRes..

개발이야기 2023.12.05
728x90