# nest new {프로젝트명} $ nest new instagram-server
$ npm i @nestjs/typeorm typeorm mysql2
@Module({ imports: [ TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: 'password', database: 'mydb', autoLoadEntities: true, synchronize: true, }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
@Entity('boards') export class Board { @PrimaryGeneratedColumn() id: number; @Column() title: string; @Column() content: string; @CreateDateColumn() createdAt: Date; }
@Controller() export class BoardController { constructor(private readonly boardService: BoardService) {} @Get('boards') getBoards(@Query('page') page: number = 1, @Query('size') size: number = 10) { return this.boardService.getBoards(page, size); } }
@Injectable() export class BoardService { constructor( @InjectRepository(Board) private boardRepository: Repository<Board>, ) {} async getBoards(page: number, size: number): Promise<Board[]> { const skip = (page - 1) * size; const boards = await this.boardRepository.find({ order: { createdAt: 'DESC' }, skip: skip, take: size, }); return boards; } }
@Module({ imports: [ TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: 'password', database: 'mydb', autoLoadEntities: true, synchronize: true, logging: true, }), TypeOrmModule.forFeature([Board]), ], controllers: [BoardController], providers: [BoardService], }) export class AppModule {}
-- 기존 테이블 데이터 삭제 TRUNCATE TABLE boards; -- 높은 재귀(반복) 횟수를 허용하도록 설정 -- (아래에서 생성할 더미 데이터의 개수와 맞춰서 작성하면 된다.) SET SESSION cte_max_recursion_depth = 1000000; -- boards 테이블에 더미 데이터 삽입 INSERT INTO boards (title, content, createdAt) WITH RECURSIVE cte (n) AS ( SELECT 1 UNION ALL SELECT n + 1 FROM cte WHERE n < 1000000 -- 생성하고 싶은 더미 데이터의 개수 ) SELECT CONCAT('Title', LPAD(n, 7, '0')) AS title, -- 'Title' 다음에 7자리 숫자로 구성된 제목 생성 CONCAT('Content', LPAD(n, 7, '0')) AS content, -- 'Content' 다음에 7자리 숫자로 구성된 내용 생성 TIMESTAMP(DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 3650 + 1) DAY) + INTERVAL FLOOR(RAND() * 86400) SECOND) AS createdAt -- 최근 10년 내의 임의의 날짜와 시간 생성 FROM cte;