목록개발 (312)

미래의 나에게 bcrypt 라이브러리 설치 yarn add bcrypt yarn add --dev @types/bcrypt 이번 포스팅에서는 이전에 포스팅했던 product API 구현과 다른 부분에 대해 다룬다. Create // Hashing & ConflictException // users.service.ts async create({ createUserInput }: IUsersServiceCreate): Promise { const { password, email, ...rest } = createUserInput; const user = await this.findOneByEmail({ email }); if (user) throw new ConflictException('이미 등록된 이메일..

정규표현식에 대해 간단히 다뤄본다. 문제 설명 기존의 풀이 방식 function solution(s) { let a = ['zero','one','two','three','four','five','six','seven','eight', 'nine'] for(let i = 0 ; i < a.length ; i ++){ s = s.replaceAll(a[i],i) } return Number(s) } 배열을 만들어 둔 뒤, replaceAll 을 활용하였다. 정규표현식을 활용한 방식 function solution(s){ let a = ['zero','one','two','three','four','five','six','seven','eight', 'nine'] // s = s.replace(/number..

상당히 어려웠던 부분이다. 내가 구현했던 ERD에는 일 대 일 관계와 일 대 다 관계는 없기에, 다 대 일 / 다 대 다 관계에서 다룬다. 다 대 일 다 대 일로 작업한 내용은 카테고리였다. // dto create-product.input.ts @Field(() => String) productCategory: string; // dto 에 카테고리 추가 // product.service.ts create 함수 내부에 추가 create({ const { productCategory, ...product } = createProductInput; // 구조 분해 할당 } const result = this.productsRepository.save({ ...product, productCategory: ..

미래의 나에게 검증을 하기 위한 두 라이브러리 yarn add class-validator yarn add class-transformer 오늘은 오늘 과제였던 CRU API 구현 / TypeORM 에 대해 리뷰한다. DTO / interface 먼저 본격적인 API 구현에 앞서, 이전과 같이 dto 와 Interface 를 작성한다. ( create 를 위한 dto / update 를 위한 dto) 워낙 불려다니는 곳이 많은 친구들이라 먼저 작성해두는 것이 마음 편하다. // dto/create-product.input.ts import { Field, InputType, Int } from '@nestjs/graphql'; import { Min } from 'class-validator'; @Inp..

간단한 쿼리문 사용법 1. Select / 데이터를 보기 위한 쿼리문 -- 테이블 내 모든 내용 보기 select * from 테이블 명 -- 원하는 열만 보기 select 칼럼1, 칼럼2 from 테이블 명 -- 원하는 조건의 행만 보기 / where select * from 테이블 명 where 원하는 조건 -- 원하는 순서로 정렬하기 / order by select * from 테이블 명 order by 정렬 기준 칼럼 -- 원하는 순서로 정렬하기 / order by / asc / desc select * from 테이블 order by 칼럼1 asc, 칼럼2 desc -- 이때, 칼럼1이 오름차순으로 정렬된 뒤, 칼럼2에 대한 내림차순 정렬 실행 -- 원하는 만큼 데이터 보기 // limit se..

암호화 암호화란, DB 정보를 해독할 수 없도록 정보를 비밀 코드로 변환하는 과정을 의미한다. 기본적으로 알고리즘을 사용하여 데이터를 변환하게 되며, 변환된 데이터는 해독키를 갖지 않으면 정보에 접근할 수 없기에 해킹에 보다 안전한 방법이라고 말할 수 있다. 단방향 양방향 (비대칭형 / 대칭형) 단방향 암호화 단방향 암호화는 복호화할 수 없는 암호화 방법이라고 말할 수 있으며, 이 경우 한번 암호화를 했다면 다시 복호화할 수 없다는 특징을 가진다. (복호화 가능한 것은 양방향 암호화) ** 복호화는 암호화(변환)된 데이터를 이전의 데이터로 되돌려 놓는 것을 말한다. 암호화 방식으로는 Hash 함수를 활용한 Hash 암호화를 주로 사용하는데, Hash 함수는 임의의 길이의 데이터를 고정된 길이의 데이터로 ..

오늘은 저번에 업로드한 ERD를 기준으로 MySQL에 엔티티를 적용해보았다. // 상품 / product.entity.ts @Entity() // 엔티티 임을 선언 export class Product { @PrimaryGeneratedColumn('uuid') // uuid 를 통해 id 생성 id: string; @Column() product_Name: string; // 중략 // } 엔티티 작성은 다음과 같다. 데코레이션을 통해 Entity 를 선언하고, PrimaryGeneratedColumn 을 통해 PK임을 선언함과 동시에 임의의 id 를 만드는 uuid 를 생성한다. 그리고 그 아래로 콜론 값으로 들어오는 엔티티를 각 타입에 맞추어 작성해준다. 관계 작성 다음은 관계 작성에 대해 다룬다...

집계 쿼리 집계 쿼리란 그 이름처럼 산술로써 집계하는 쿼리다. count : 행들의 갯수를 구하기 위해 사용 sum : 행들의 평균을 구하기 위해 사용 avg : 행들의 평균을 구하기 위해 사용 max : 행들의 최댓값을 구하기 위해 사용 -- 예시 집계 쿼리 -- 치킨집에 치킨이 몇 마리있는지 출력 select count as 치킨수 from 치킨집 -- where 을 통해 조건을 둘 수도 있다 -- 서울에 있는 치킨집 치킨이 몇 마리있는지 출력 select count as 치킨수 from 치킨집 where 지역 = 서울 -- 매출액 평균 select avg as 평균 from 매출액 정렬 쿼리 정렬을 위한 쿼리다. select 로 데이터를 조회할 때, order by '기준점' 을 통해 정렬이 가능하..