Skip to content

2023 03 30 개발 일지

Jinho Kim edited this page Mar 29, 2023 · 14 revisions

1. 진행 및 완료 사항

createUser(회원가입) 메서드에서 중복된 아이디일 경우 에러 처리

  • repository에 createQueryBuilder가 있어서 바로 쿼리를 통해 확인할 수 있었다.
    const userId = createUserDto.userId;
    const existUser = await this.userRepository
      .createQueryBuilder('user')
      .where('user.userId = :userId', { userId })
      .select(['user.userId'])
      .getOne();
    console.log(existUser);
    if (existUser) {
      throw new HttpException('User id already exists', HttpStatus.BAD_REQUEST);
    }

2. 알게 된 점

nestjs의 구조(Module, Controller, Providers/Service)

.env 같은 config 파일들을 nest에 적용하는 법

typeorm을 사용해서 db를 연결하는 법

nestjs의 의존성 주입, Entity, DTO, Pipe(Validation, Transform), Repository 패턴 등등

  • 의존성 주입(Defendency Injection): 모듈 간의 결합도를 낮추고 유지보수성이 높음.
    각 모듈이 어떤 역활을 가지는지 쉽게 알 수 있고, 효율적인 코드 작성이 가능함.
  • Entity: 데이터베이스 테이블의 인터페이스 같은 느낌
  • DTO: 데이터 객체
    EX) 회원가입 할 때 userid, password, name 등등이 있는데 이걸 한 번씩 받는 것은 너무 비효율적임
    데이터 객체를 만들어서 한 번에 보내는 것이 당연히 좋음.
  • Validation: DTO를 만들 때, IsString, IsNumber 등등의 데코레이터를 사용해서 들어오는 데이터를 쉽게 검사할 수 있음
  • Transform: 데코레이터 기반의 직렬화/역직렬화 라이브러리로 타입을 맞추는 데 큰 도움을 주는 것 같음
  • Repository 패턴
    db의 캡슐화라고 보면 쉬울 것 같다.
    db에 접근하는 로직만 따로 Repository Layer로 분리함.
    각각의 서비스가 비즈니스 로직에 더 집중할 수 있고, 코드 중복 최소화, 모듈 간의 책임, 분리가 명확해짐.

Repository 패턴

  • EntityRepository가 0.3 버전부터 없어서 CustomRepository를 만들어야 했음...
    참조(https://stackoverflow.com/questions/71557301/how-to-workraound-this-typeorm-error-entityrepository-is-deprecated-use-repo)
  • Custom Repository를 만들고 나서 아 이제 get, post 같은 메서드 만들어야겠다 싶었지만,
    Repository 객체에 내장된 메서드들이 있어서 기본적인 것들은 만들지 않아도 됐었다. 너무 유용하다!
  • 아직 정확하게 이유를 모르겠는데 지정한 데이터의 entity의 이름에 맞게 알아서 Table이 생긴다.
    Repository 생성될 때 알아서 되는 것 같다.

createUser 메서드

  1. user controller에서 Post, Body 데코레이터를 통해 Request Body(type: CreateUserDto)를 받음
  2. 받은 데이터를 user service에 넘겨줌.
  3. user service에서 user repository의 save 메서드를 사용해서 user 데이터를 DB에 추가함
    코드만 봐도 실제로 DB랑 관련된 일을 하는 메서드는 user service에 없음. user repository가 다 해줌!
Clone this wiki locally