1. 오늘 한 것 (What I Did)
- NestJS와 TypeORM을 사용해서 MySQL 데이터베이스 연동
- User Entity 생성 및 기본 CRUD 준비
1-1. 실제 진행한 작업들
1단계: 환경 설정
npm install typeorm @nestjs/typeorm mysql2
npm install typeorm-naming-strategies
2단계: DB 연결 설정 파일 생성
- typeorm.config.ts 파일 생성
- MySQL 연결 정보 설정 (host, port, username, password, database)
3단계: User Entity 생성
- nest g res users 명령어로 기본 구조 자동 생성
- src/users/entities/user.entity.ts에 User Entity 구현
- 데코레이터 사용: @Entity, @PrimaryGeneratedColumn, @Column, @CreateDateColumn, @UpdateDateColumn
4단계: Snake Case 문제 해결
- typeorm-naming-strategies 라이브러리 설치
- Entity에서 camelCase 사용, DB에서는 snake_case로 자동 변환되도록 설정
5단계: 모듈 연동
- app.module.ts에 TypeORM 모듈과 UsersModule 등록
- users.module.ts에 User Entity 등록
2. 새로 이해한 것 (What I Learned)
2-1. NestJS 모듈 시스템의 역할
app.module.ts = 집의 설계도
- imports: 사용할 모듈들 등록 (방들을 집에 배치)
- controllers: API 엔드포인트 처리 (현관문)
- providers: 서비스들 (기본 인프라)
모듈 시스템의 장점:
- 역할 분담으로 코드 관리 용이
- 재사용성과 독립적 테스트 가능
2-2. 데코레이터(Decorator)의 개념
데코레이터 = 클래스나 메서드에 붙이는 "설명서"
@Entity('user') // "이 클래스는 user 테이블이야!"
export class User {
@PrimaryGeneratedColumn() // "자동 증가하는 기본키야!"
id: number;
@Column() // "일반 테이블 컬럼이야!"
email: string;
}
각 데코레이터의 역할:
- @Entity(): 테이블과 클래스 연결
- @PrimaryGeneratedColumn(): AUTO_INCREMENT PRIMARY KEY
- @Column(): 일반 컬럼 매핑
- @CreateDateColumn(): 생성 시간 자동 기록
- @UpdateDateColumn(): 수정 시간 자동 갱신
2-3. TypeOrmModule의 역할
TypeOrmModule = NestJS와 TypeORM 사이의 통역사
// app.module.ts - 전체 앱 DB 설정
TypeOrmModule.forRoot(typeORMConfig)
// users.module.ts - 특정 모듈에서 Entity 사용 설정
TypeOrmModule.forFeature([User])
2-4. Snake Case vs CamelCase 변환
문제: DB는 provider_id, JavaScript는 providerId
해결: SnakeNamingStrategy로 자동 변환
- 코드에서는 camelCase로 편하게 작성
- DB에는 snake_case로 자동 저장
2-5. Entity와 실제 데이터 생성 시점
중요한 깨달음:
const newUser = new User(); // 메모리에만 객체 생성 (id = undefined)
const saved = await repository.save(newUser); // DB 저장 시점에 id 생성!
3. 실수했던 부분들 (What I Struggled With)
3-1. 오타와 실수들
패키지명 오타
# 잘못: tyeorm
npm install typeorm @nestjs/tyeorm mysql2
# 올바름: typeorm
npm install typeorm @nestjs/typeorm mysql2
Entity 작성 시 실수들
- profile_image 필드 중복 작성
- Date 타입을 date로 소문자 작성
- nullable 옵션 누락
4. 여전히 잘 모르겠는 부분
NestJS...넌 뭐냐...?
- 애플리케이션이 시작될 때 모듈들이 어떤 순서로 동작하는지
- 데코레이터들이 언제 실행되는지
- synchronize: true가 언제 동작하는지? - 왜 필요한지는 얼추 이해 했는데......
데코레이터 개념이 생소함
- 처음 보는 @ 문법에 당황
- 각 데코레이터가 실제로 무엇을 하는지 불분명했음
모듈 시스템 복잡함
- 왜 이렇게 많은 파일로 나누는지 이해 어려웠음
- import/export 관계가 복잡하게 느껴짐
파일 위치와 구조
- 어떤 파일을 어디에 만들어야 하는지 헷갈림
- 프로젝트 구조 전체가 낯설음
'TIL' 카테고리의 다른 글
2025-08-11 NestJS API 테스트 및 문제 해결 (3) | 2025.08.11 |
---|---|
2025-08-10 NestJS UsersService CRUD 구현 및 DTO 작성 (2) | 2025.08.11 |
2025-08-06 (6) | 2025.08.10 |
2025-08-03 (10) | 2025.08.03 |
2025-07-31 (5) | 2025.07.31 |