2025-08-10 NestJS UsersService CRUD 구현 및 DTO 작성

2025. 8. 11. 00:57·TIL

1. 오늘 한 것 (What I Did)

  • UsersService에 CRUD 기능 만들기
  • DTO 파일 작성하기
  • TypeORM 사용법 배우기

2. 새로 이해한 것 (What I Learned)

2-1. Service vs Repository 차이

Service - 비즈니스 로직

async create(createUserDto: CreateUserDto) {
  // "고객이 성인인지 확인하고, 재고 체크하고, 할인 적용해서 판매해"
  const user = await this.repository.save({ ...createUserDto });
  return user;
}

Repository - 데이터 접근

// "그냥 데이터 가져오고, 저장하고, 삭제만 해"
repository.save()    // 저장
repository.find()    // 전체 조회
repository.findOne() // 하나 조회

 

2-2. DTO 사용법

2-2-1. CreateUserDto

  • id 필드 제외: 데이터베이스가 자동 생성하므로 불필요
  • readonly 사용: 데이터 변경 방지로 안전성 보장
  • 선택적 필드 (?): 필수가 아닌 항목은 ? 사용

2-2-2. PartialType

// CreateUserDto
{
  providerId: string;    // 필수
  email: string;         // 필수
  name: string;          // 필수
}

// PartialType(CreateUserDto) 결과
{
  providerId?: string;   // 선택적으로 변환
  email?: string;        // 선택적으로 변환
  name?: string;         // 선택적으로 변환
}

2-2-3.  스프레드 연산자 (...)

const createUserDto = {
  providerId: "kakao123",
  email: "test@test.com",
  name: "홍길동"
};

// { ...createUserDto } 결과
{
  providerId: "kakao123",  // 박스를 뜯어서 내용물을
  email: "test@test.com",  // 새 박스에 복사
  name: "홍길동"
}
  • 왜 쓰나면? 원본 객체 보호 + TypeORM 호환성

2-3. async/await vs Promise

// async 없음 - 단순 작업
findAll() {
  return this.repository.find();  // Promise 바로 반환
}

// async 있음 - 복잡한 작업
async create(createUserDto: CreateUserDto) {
  const step1 = await this.validateUser();     // 단계별 처리
  const step2 = await this.repository.save();
  return step2;
}
  • 단계가 있는 복잡한 작업에서는 async/await를 써준다. 그 외 경우는 없어도 됨. 

2-4. CRUD 메서드별 매개변수 차이점

findAll()           // 전체 조회 - 조건 불필요
findOne(id)         // 특정 조회 - ID 필요
create(data)        // 생성 - 데이터 필요
update(id, data)    // 수정 - ID + 데이터 필요
remove(id)          // 삭제 - ID 필요
  • 대상이 "전체" vs "특정 하나"인지에 따라 매개변수 결정

3. 실수했던 부분들 (What I Struggled With)

클래스 vs 함수 vs 메서드 vs 변수 구분 어려움

  • 처음에는 모든 게 비슷해 보였음
  • "어디에 있는지"로 구분하는 방법 학습
  • 클래스 안에 있으면 메서드, 밖에 있으면 함수

4. 여전히 잘 모르겠는 부분

  • 데코레이터(@) 문법: 그래도 지난 주보다는 좀 익숙해지는 것 같음. 
  • Repository가 어떻게 자동으로 들어오는지: 마법 같아서 신기한데 원리를 모르겠음. 알아야 하나? 그냥 그런가보다 해야할까? 
  • PartialType : 필드를 선택적으로 만드는 거라고 하는데....?
    • readonly name: string; 와 readonly name?: string; 차이를 직접 실행해봐야겠음 
  • async/await vs Promise: 정확히는 잘 모르겠음. 
  • 스프레드 연산자 (...): 객체를 보호하기 위해 쓴다는데 와 닿지는 않음. 객체 지향 프로그래밍에 대해서 몰라서 그런가?

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)
'TIL' 카테고리의 다른 글
  • 2025-08-12 NestJS 구글 소셜 로그인 & JWT 인증 시스템 구현
  • 2025-08-11 NestJS API 테스트 및 문제 해결
  • 2025-08-09 NestJS + TypeORM DB 연동
  • 2025-08-06
한비(BIBI)
한비(BIBI)
IT 업계에서 오랫동안 일 하고 싶습니다. 가능하다면 죽을 때까지 배우며 살고 싶습니다. 마케팅과 CX 분야에서 커리어를 쌓았습니다. 지금은 IT 업계에 더 깊이 있게 기여하고자 개발 공부를 하고 있습니다. 이 배움의 여정을 글로 남기고 싶어 블로그를 시작했습니다.
  • 한비(BIBI)
    0과 1로된 세상
    한비(BIBI)
  • 전체
    오늘
    어제
    • 분류 전체보기 (33)
      • 크래프톤 정글 (5)
      • Computer Science (10)
      • 읽고 쓰고 생각하기 (1)
      • 일하면서 배웁니다 (1)
      • TIL (15)
  • 링크

    • LinkedIn
    • Threads
    • Twitter
  • 인기 글

  • 태그

    컴퓨터과학입문
    CPU스케줄링
    정글후기
    시스템설계
    데이터시각화
    나만무프로젝트
    gpt인프라
    뉴스피드시스템
    운영체제구조
    크래프톤정글
  • hELLO· Designed By정상우.v4.10.4
한비(BIBI)
2025-08-10 NestJS UsersService CRUD 구현 및 DTO 작성
상단으로

티스토리툴바