목록분류 전체보기 (305)
인증 인증이란 유저의 신원을 검증하는 과정으로, 회원가입이나 로그인하는 것이라 보면 편하다. 인증 과정에서 ID, PassWord(암호화)한 DB를 저장하고 일치하는지 확인하고, 일치하게 되면 jwt 이나 쿠키와 같은 토큰을 발급한다. 인가 인가란 인증 이후에 신원을 검증함과 동시에, 인증된 사용자에게 접근 권한을 확인하는 과정이다. 예를 들어, 자신의 게시물에는 자신만 수정이 가능하고 타인의 게시물은 수정이 불가능한 것이라고 보면 쉽다. 인가 과정에서 로그인 시 토큰를 발급하게 되고, 해당 토큰 안에는 사용자의 정보를 포함시킨다. 요청 시 요청헤더에 토큰을 담고, 서버는 이를 복호화하여 사용자의 정보를 읽어, 사용자에게 그에 맞는 권한을 부여할 수 있게 된다. 2023.02.02 - [코딩/알쓸코잡] ..
미래의 나에게 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 를 생성한다. 그리고 그 아래로 콜론 값으로 들어오는 엔티티를 각 타입에 맞추어 작성해준다. 관계 작성 다음은 관계 작성에 대해 다룬다...