ERD를 참고하여 DB모델 스키마 변경
사용자 테이블
@Entity('users')
export class UserEntity {
@PrimaryGeneratedColumn('increment')
id!: number;
@Column({ type: 'varchar', length: 100 })
username!: string;
@Column({ type: 'varchar', length: 200, unique: true })
email!: string;
@Column({ type: 'varchar', length: 255 })
password!: string;
@Column({ type: 'varchar', length: 255, nullable: true })
bio!: string;
@Column({ type: 'varchar', length: 255, nullable: true })
profile!: string;
// 권한 ( 0: 일반 사용자, 1: 관리자 )
@Column({ type: 'int2', default: 0 })
role!: number;
@CreateDateColumn()
createdAt!: Date;
@UpdateDateColumn()
updatedAt!: Date;
}
토큰 테이블
@Entity('user_tokens')
export class UserTokenEntity {
@PrimaryGeneratedColumn('increment')
id!: number;
// 사용자 ID를 명시적으로 지정
@Column({ type: 'int' })
userId!: number;
// 사용자 테이블과의 관계 설정
@OneToOne(() => UserEntity, { onDelete: 'CASCADE' })
@JoinColumn({ name: 'userId' })
user!: UserEntity;
@Column({ type: 'varchar', length: 255 })
token!: string;
@Column({ type: 'timestamp' })
expires_at!: Date;
}
- 토큰 테이블에서는 로그인한 사용자 정보를 FK로 참조함 ( 객체 )
- 또한 단순 Find 시에 사용자 객체를 가져오지 않고도 Id만을 사용할 수 있게 명시적으로 userId 컬럼 추가
단순 토큰 객체 조회
UserTokenEntity {
id: 13,
userId: 10,
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEwLCJyb2xlIjowLCJpYXQiOjE3MzQ4MzE3NjMsImV4cCI6MTczNDgzNTM2M30.uJ4G5_h3JDOnazqsEd_6N6sUEZ4xz0taQ5HpsJIMpSE',
expires_at: 2024-12-22T02:42:43.854Z
}
토큰 객체 조회 및 사용자 객체 조회
UserTokenEntity {
id: 14,
userId: 10,
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEwLCJyb2xlIjowLCJpYXQiOjE3MzQ4MzE4MjYsImV4cCI6MTczNDgzNTQyNn0.Kxb7XRRbpRUKa0n5pltdPuE9dLtIk-OGRNKPwBheMf4',
expires_at: 2024-12-22T02:43:46.596Z,
user: UserEntity {
id: 10,
username: 'user1',
email: 'user1@gmail.com',
password: '$2a$10$mq6thYXnI6HsM9hX7.Iu1eHbofEH/idUpGuq9/JeTsk5ULUvZWDVi',
bio: null,
profile: '1734657578942-스크린샷 2024-12-19 10-07-09.png',
role: 0,
createdAt: 2024-12-19T16:19:39.013Z,
updatedAt: 2024-12-19T16:19:39.013Z
}
}
- 단방향 참조 ( 1:1 ) 때문에 사용자 테이블에서는 토큰 테이블의 컬럼을 저장하지 않음
- 또한 토큰 테이블에서는 사용자 ID를 컬럼으로 지정하지만 외래키 조인 필드는 사용자 객체로 지정
- 위 이미지로 볼 수 있듯이 토큰 테이블 단순 조회 시에 사용자 Id 를 가져오는 모습과
- 토큰 테이블 조회 동시에 사용자 객체도 가져와지는 모습
'Nodejs' 카테고리의 다른 글
Postgresql TypeORM으로 마이그레이션 하기 (0) | 2024.12.19 |
---|---|
Nodejs PostgreSQL 연동 (1) | 2024.12.18 |
JWT, Bcrypt 예제 (0) | 2024.12.18 |
Nodejs 개발환경 셋팅 (0) | 2024.12.18 |