-
24-07-08 (Entity란 ?)카테고리 없음 2024. 7. 9. 23:56
Typescript , Nest.js를 배우고, 작업을 하면서 Entity와 Dto의 역할은 무엇이며, 또한 각자 역할이 무엇인지 알아야겠다....
Entity는 사용하면서 Database랑 validate와 table를 생성하는 역할에 기여를 하는것 같은데 내 생각이 맞는지 한번 정리를 해봐야 할꺼같다 .
금일은 Entity를 알아보고 다음날에는 Dto 정리를 한번 해봐야겠다.
Entity란 ?
( Entity는 데이터베이스의 테이블과 매핑되는 객체입니다.
간단히 말해, 데이터베이스 테이블의 스키마를 정의하고 해당 스키마에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행하는 데 사용됩니다. )
인터넷에서는 이런식으로 나오지만,
@Controller('auth') export class AuthController { constructor(private readonly authService: AuthService) {} @Post('/sign-up') async signUp(@Body() {email, password, passwordConfirm, name}:SignUpDto){ const data = await this.authService.signUp(email, password, passwordConfirm, name); return {statusCode:HttpStatus.CREATED, message:"회원가입에 정상적으로 완료되었습니다.", data:{...data, password:undefined}} } @UseGuards(AuthGuard('customLocal')) @Post('/sign-in') async signIn(@Request() req, @Body() SignInDto:SignInDto){ return req.user }
이렇게 컨트롤러에서 보면은 data를 가져오는곳은 Dto에서 가져오는것을 볼 수있다 ....
그렇다면 왜 테이블과 스키마를 Entity에서 정의하지만 , Dto에서 가져오는 것일까...? Dto에 대해서 정리하면서 나중에 생각해보면서 알아보자..
또 엔티티는 데이터베이스의 테이블과 일치하는 객체이고, 다음과 같은 특성을 나타낼 수 있다
ID, 속성, 관계를 나타내며
ID: 엔터티를 식별하는 고유한 값입니다.
속성: 엔터티의 데이터를 저장하는 속성입니다.
관계: 다른 엔터티와의 관계입니다.ex)
@Entity('seats') export class Seat { @PrimaryGeneratedColumn({unsigned:true}) id:number @Column({unsigned:true}) scheduleId:number @Column({unsigned:true}) avaliableSeat:number @Column() totalSeat:string @CreateDateColumn() createdAt:Date @UpdateDateColumn() updatedAt:Date @OneToOne((type)=>Schedule, schedule=>schedule.seats) @JoinColumn()// schedule이 외래 키 컬럼임을 나타내며, 관계를 정의하는 데 사용된다 . schedules:Schedule }
@Entity() 데코레이터는 엔티티임을 나타냅니다.
@PrimaryGeneratedColumn() 데코레이터는 ID 속성을 나타냅니다.
@Column() 데코레이터는 속성을 나타냅니다.
@oneToOne() 데코레이터는 다른 엔티티간에 관계를 나타내줍니다.
마무리
Entity는 데이터베이스의 테이블간에 일치하는객체를 나타내며 , 그 컬럼간에 속성과 관계 및 특성을 정의할 수 있다.
어느 정도코드를 만들고 메서드를 사용하면서, 느낀것과 비슷하였지만, Entity를 정리해가면서, 더욱 Dto를 왜 사용하는지 궁금증이 만들어졌다. Dto를 정리하고 공부하면서 Entity를 한번 더 정리하는것도 좋을꺼같다.