Skip to content

2023 03 29 개발 일지

Jinho Kim edited this page Mar 29, 2023 · 1 revision

1. 진행 및 완료 사항

.env안의 DB 정보를 사용 -> 코드로 이런 정보들을 직접 치는 것은 보안, 유지보수에 안좋음

  • @nestjs/config의 ConfigModule과, ConfigService를 사용

typeorm과 postgresql 연결함

  • @nestjs/typeorm의 TypeOrmOptionsFactory, TypeOrmModuleOptions를 사용

내 코드상의 Camel case 변수들을 Snake case로 매핑해서 DB에 넘겨줌

  • typeorm-naming-strategies의 SnakeNamingStrategy을 사용

post로 받은 user 데이터를 DB에 저장해주는 createUser 메서드를 구현함

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가 다 해줌!