반응형

https://docs.nestjs.com/custom-decorators

 

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 (Functional Programming), and FRP (Functional Rea

docs.nestjs.com

nest에서 데코레이터는 여러 클래스에서 반복되어 공통으로 사용되는 부분을 중복된 코드가 아닌 데코레이터로 만들어서 사용하게 권장이 되고 있다.

const user = req.user;

반복되어 사용되는 코드를 데코레이터로 만들면 요구사항에 맞는고이면 어디든 사용

import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const User = createParamDecorator(
  (data: unknown, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    return request.user;
  },
);

 

https://toss.tech/article/nestjs-custom-decorator

 

NestJS 환경에 맞는 Custom Decorator 만들기

NestJS에서 데코레이터를 만들기 위해서는 NestJS의 DI와 메타 프로그래밍 환경 등을 고려해야 합니다. 어떻게 하면 이러한 NestJS 환경에 맞는 데코레이터를 만들 수 있을지 고민해보았습니다.

toss.tech

윗글을 보는데 더 모르겠다.

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

TIL 4/21 인증,인가  (0) 2023.04.21
4/15  (0) 2023.04.15
4/14 TIL  (0) 2023.04.14
로드밸런싱  (0) 2023.04.03
3/29 S3  (0) 2023.03.29
반응형

서류 합격한 곳에서 면접 전 과제를 내주었는데 오래간만에 코드를 치면서 중간중간 막힌 부분들을 정리해보려고 한다.

로그인 인가를 구현하기 위해서 UseGuard에 사용이 될 Strategy를 구현

PassportStrategy를 통해 헤더에 있는 Authorization을 찾아내서 jwt 검증을 하는 Strategy를 구현 만약 jwt가 유효하면 validate함수가 실행되어 req.user로 name, id를 받아오게 설정했다.

Strategy를 통해 인가를 쉽게 할 수 있으며 여러곳에서 사용가능

로그인시도 할 때 token을 header에 setHeader로 넣게 구현을 했는데 

res와 req를 controller단에서 직접 사용하는 것은 nest를 올바르게 사용하는 방법이 아니라는 말을 들었다.(도움을 준 내 배캠 동기에게)

데코레이터로 만들어 사용을 해야 한다는데 이 부분은 더 알아봐야겠다.

setHeader를 데코레이터로 변경 할 수 있게 하자.

UseGuards를 통과한 로그인 정보를 가져오는 데코레이터

header에 있는 JWT에는 유저 검증을 위한 정보가 담겨있다.

이 정보를 꺼내기 위해서는 Strategy에서 validate를 통해 req.user로 넘겨주는 데이터를 사용해야 하는데

이번에는 직접 req.user가 아닌 데코레이터를 만들어서 사용이 됐다.

ExecutionContext를 통해 데코레이터가 작동이 되는데 자세하건 공식 문서를 통해

https://docs.nestjs.com/fundamentals/execution-context

 

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 (Functional Programming), and FRP (Functional Rea

docs.nestjs.com

요약하면 ArgumentsHost(req, res, next 배열 캡슐화)를 상속받아 더 많은 기능을 제공하는데 

인자, Controller의 어떤 메서드에서 실행되고 있는지의 정보를 확인

이건 더 공부가 필요하다.

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

커스텀 데코레이터 만들기 어렵다....  (0) 2023.05.10
4/15  (0) 2023.04.15
4/14 TIL  (0) 2023.04.14
로드밸런싱  (0) 2023.04.03
3/29 S3  (0) 2023.03.29
반응형

https://itchallenger.tistory.com/494

 

[TypeOrm]ORM을 프로젝트에 도입할 때 주의할점

ORM에 대한 찬반양론 JPA와 TypeORM이 꽤 많이 쓰이는 것으로 인식되고 있지만, ORM의 효용성 여부는 아직까지도 실무자들 사이에 큰 논란이 되고 있다. https://martinfowler.com/bliki/OrmHate.html bliki: OrmHate Ob

itchallenger.tistory.com

TypeORM에서 n + 1을 해결하는 방법은 relation과 queryBuilder를 이용해서 해결이 가능하다.

아날로그(사람의 세상) 과 디지털(컴퓨터 세상)을 이어주는 역활을 하는 것이 개발자이다.

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

커스텀 데코레이터 만들기 어렵다....  (0) 2023.05.10
TIL 4/21 인증,인가  (0) 2023.04.21
4/14 TIL  (0) 2023.04.14
로드밸런싱  (0) 2023.04.03
3/29 S3  (0) 2023.03.29
반응형

이벤트 루프 

이벤트루프는 메인스레드 겸 싱글스레드로서, 비즈니스 로직을 수행한다.

수행도중에 블로킹 IO작업을 만나면 커널 비동기 또는 자신의 워커스레드풀에게 넘겨주는 역할까지 한다. 

여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지를 판단.

자바스크립트의 비동기 작업을 가능하게 해주는 역할을 합니다.

콜백함수

다른 함수에 매개변수로 넘겨지는 함수로 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수

->  작업이 완료된 후 호출되는 함수.

콜백지옥

비동기 처리 로직을 위해 콜백 함수를 연속해서 사용 할 때 발생하는 문제. 콜백함수를 이용해서 비동기 처리를 해주다가 코드가 난잡해지는것을 말한다.

해결방법 

1. Promise, 2. asyn / await

동기와 비동기 실행 방식

동기와 비동기는 작업들을 어떠한 '흐름'으로 처리 할 것인가에 대한 관점

작업 완료 여부스스로 계속 확인 하는 동기

함수 A 함수 B를 호출할 때 콜백 함수를 함께 전달해서, 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행한다

함수 A는 함수 B를 호출한 후로 함수 B의 작업 완료 여부에는 신경쓰지 않는다. Asynchronous

동기는 요청과 결과가 동시에 일어나는 실행 방식이고 시간과 상관없이 작업의 결과가 요청과 동시에 나와야 한다.

node에서는 동기는 블로킹 작동으로 동작이 멈추고, 비동기는 논블로킹으로 다음동작이 진행된다.

프로세스와 스레드의 차이점

프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위

스레드 : 프로세스가 할당받은 자원을 이용하는 흐름의 단위 -> 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위

프로그램은 코드 덩어리 -> 프로그램이 돌아가고 있는 상태(코드 덩어리를 실행한 것) : 프로세스

모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해줘야 한다.

프로그램 실행 -> 메모리에 올라감 -> 운영체제로 부터 CPU(시스템자원) 할당

컴파일 언어와 인터프리터 언어 차이

컴파일언어 : 컴파일러를 통해 컴파일 타임에 전체 소스 코드를 한번에 기계어로 변환 후 실행파일을 만든다. 컴파일 단계와 실행단계가 분리

인터프리터 언어 : 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램, 컴파일 하지 않고 소스 코드를 한 줄씩 읽어들여 실행한다.

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

TIL 4/21 인증,인가  (0) 2023.04.21
4/15  (0) 2023.04.15
로드밸런싱  (0) 2023.04.03
3/29 S3  (0) 2023.03.29
3/22  (0) 2023.03.23
반응형

단 한대의 서버로는 모든 트래픽을 감당해내기 어려워졌다. -> 여러대의 서버에 동일한 데이터를 저장해 수많은 트래픽을 효과적으로 분산 처리

로드 : 요청,  밸런싱 : 여러 대의 서버로 나눔

 

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

4/15  (0) 2023.04.15
4/14 TIL  (0) 2023.04.14
3/29 S3  (0) 2023.03.29
3/22  (0) 2023.03.23
3/21  (0) 2023.03.21
반응형

프론트에서 이미지 처리를 할거면 tmp에다 해야한다.

S3를 누가 호출하느냐에 따라 다르다. → 프론트에서 호출하나 백에서 호출하냐에 따라 로직이 달라진다.

결론 : 이미지를 글과 동시에 저장 할지 말지를 정하는 차이…. → 어느 시점에 저장을 할거냐에 따라 다르다.

 

프론트에서 백을 안거치고 S3를 호출 가능하다. -> 이미지를 먼저 S3에 올라가게 된다. 

만약 이미지는 올려보고 글을 안쓴다면? 올라간 사진은 용량만 차지해서 요금만 나온다.

→ 임시 폴더를 만들어서 일단 처음에는 이미지를 올려놓고 글을 올려놓는 타이밍에 실제 S3 사용되는곳에 저장하고 기간이 지나면 임시 폴더를 지우는 로직을 만들어관리

 

백에서도 S3를 호출 가능 -> 이건 어떻게 처리되는지 알아봐야겠다.

 

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

4/14 TIL  (0) 2023.04.14
로드밸런싱  (0) 2023.04.03
3/22  (0) 2023.03.23
3/21  (0) 2023.03.21
3/20  (0) 2023.03.20
반응형

로컬에서는 잘 작동되는데 배포로 aws에 올리면 상품등록 페이지가 망가지는 문제가 발생했다. localhost:3000으로 요청을 보내는 에러가 있었는데..

<script src="/js/auth/logout.js"></script> 가 ejs 파일에 없어서 문제가 발생했었다.

 

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

로드밸런싱  (0) 2023.04.03
3/29 S3  (0) 2023.03.29
3/21  (0) 2023.03.21
3/20  (0) 2023.03.20
3/14  (0) 2023.03.14
반응형

Docker

데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어 -> 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능

컨테이너 : 조립형 작은 창고 -> 용량이 허락하는한 하나의 Docker에 여러개를 만들 수 있다.

이밎 : 컨테이너의 빵틀 -> 소프트웨어를 담는 것EX) MySQL 컨테이너는 MySQL 이미지가 필요하다.

Docker의 제약사항 : 내부적으로 리눅스가 사용된다. -> 컨테이너에서 동작시킬 프로그램도 리눅스용 프로그램

 

격리 시키는 이유

대부분의 프로그램은 단독으로 동작하는것이 아니고 소프트웨어는 여러개의 프로그램으로 구성되었다.

-> 프로그램 하나를 업데이트 하면 다른 프로그램에 영향을 미친다. 서버를 구축 할때 신중하게 따져야 한다.

설계에 문제가 없어도 설치에 오류가 생기면 프로그램간의 공유에 원인이 있다.

-> 한 서버에는 한 버전만 설치 가능 -> 버전 연동 실패 -> 디렉터리 공유 -> 설정 파일 섞임 -> 충돌

컨테이너를 사용하면 각 프로그램은 격리가 되어서 실행가능 -> 충돌 없음

 

서버 : 어떤 서비스를 제공하는것 기능적의미의 서버, 물리적 컴퓨터로서의 서버

무슨무슨 서버 = 무슨무슨 기능을 제공, 물리적 컴퓨터  : 찐 컴퓨터

서버의 기능 = 소프트웨어가 결정

 

도커는 실행 환경을 독립적으로 격리한 컨테이너

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

3/29 S3  (0) 2023.03.29
3/22  (0) 2023.03.23
3/20  (0) 2023.03.20
3/14  (0) 2023.03.14
3/13  (0) 2023.03.13
반응형

ORM을 사용하는 이유 

MySQL은 관계형DB로 데이터를 다루는 DB이고 서버를 만드는 NestJS는 객체지향으로 프로그래밍하고 있다. 서버는 DB와 서로 데이터를 주고 받고 해야 하는데 관계형과 객체지향형간의 데이터를 바라보는 차이점이 생긴다. ORM은 그 차이점으로 인해 생기는 개발자의 부담을 해결해주기 위해 사용을한다. ORM을 통해서 관계 지향의 데이터를 객체형태로 변경해서 자동으로 SQL문을 작성하면서 맵핑을 해준다.

ORM을 쓰면서 생기는 장점은 ORM이 자동으로 맵핑을 해줌으로 DB와의 통신에 쓰이는 만큼의 노력을 비즈니스로직에 집중을 할 수 있다는 장점이 있다. ORM을 사용하기에 필수적인 것은 SQL문을 사용 할 수 있어야 하는 것이다. 프로젝트가 복잡하게 되면 직접 SQL문을 사용해야 속도나 복잡도등 많은 부분이 ORM보다 효율적이게 된다. 또한 ORM이 뱉는 SQL문법에러를 이해하기 위해서도 SQL문을 사용할 수 있는 능력은 반드시 필요하다

 

N+1 문제 ORM을 쓰면 생기는 문제

- 추후 정리 필요

 

Docker를 사용하는 이유

https://leehan098.tistory.com/25 - 3/21 작성

Msa란?

-추후

 

리팩토링의 기준과 적용 대상

-추후

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

3/22  (0) 2023.03.23
3/21  (0) 2023.03.21
3/14  (0) 2023.03.14
3/13  (0) 2023.03.13
3/9 최종#7  (0) 2023.03.09
반응형
  async prDetail(productId: number) {
    const detail = await this.productRepository
      .createQueryBuilder('products')
      .leftJoinAndSelect('products.category', 'category')
      .leftJoinAndSelect('products.images', 'images')
      .where(`products.id = :id`, { id: productId })
      // .andWhere(`status = :status`, { status: 'sale' })
      .getMany();

    return detail;
  }

Join을 하는데 쿼리가 드러운것도 있고 앞으로 쿼리빌더로 바꾸고 싶은 부분도 있어서 새로 제작해야 하는 api에 쿼리 빌더를 써봤는데...

생각보다 좋은것 같다. 조인할 것 붙이고 where로 제한주고 andWhere로 추가 조건 주고 다를 것이 없네!!

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

3/21  (0) 2023.03.21
3/20  (0) 2023.03.20
3/13  (0) 2023.03.13
3/9 최종#7  (0) 2023.03.09
3/8 최종 기억안남  (0) 2023.03.08

+ Recent posts