1. 시간복잡도와 공간복잡도에 대해 설명하시오.
시간 복잡도는 데이터가 입력 되었을 때 어떤 문제를 해결하는데 걸리는 알고리즘의 수행 시간을 의미하며,
공간 복잡도는해당 알고리즘이 수행하는 동안의 메모리 사용량을 의미합니다.
빠른 반응이 필요한 경우엔 시간 복잡도가 중요하고, 용량을 아껴야 하는 경우에는 공간 복잡도가 중요해집니다.
최근에는 과거 메모리 공간이 부족하던 때와 달리 컴퓨터 성능의 발달로 공간 복잡도 보다는
시간 복잡도를 중심으로 프로그래밍을 작성하는 경우가 많다고 합니다.
2. typeORM과 Sequelize의 차이점을 얘기해주세요.
TypeORM과 Sequelize는 Node.js에서 사용하는 객체지향매핑(ORM) 라이브러리입니다.
TypeORM은 주로 TypeScript와 함께 사용되는 반면 Sequelize는 JavaScript와 함께 사용됩니다.
TypeORM은 쿼리빌더가 동적이기에 복잡한 쿼리 작성에 적합하고, Sequelize는 정적 메소드를 사용합니다.
TypeORM은 마이그레이션 지원 기능이 내장되어 스키마를 변경할 때 유용하고,
Sequelize는 migration:undo:all를 통헤 데이터베이스 스키마를 변경하다가 문제가 생겼을 때 유용합니다.
꼬리질문 : 동적쿼리랑 정적쿼리는 무슨 뜻일까?
동적 쿼리란 쿼리를 작성할 때 런타임에 쿼리를 생성하는 것을 의미합니다. 이는 쿼리를 작성할 때 변수를 사용하여 쿼리를 동적으로 생성할 수 있습니다. 반면 정적 쿼리는 런타임에 쿼리를 생성하지 않고 미리 작성된 쿼리를 사용합니다.
TypeORM과 Sequelize는 JavaScript에서 데이터베이스 작업을 수행할 때 사용할 수 있는 라이브러리입니다.
두 도구는 다음과 같은 주요한 차이점을 가지고 있습니다.
언어: TypeORM은 TypeScript를 기반으로 만들어졌으며 TypeScript와 JavaScript 모두에서 사용할 수 있습니다. Sequelize는 JavaScript를 기반으로 만들어졌으며 TypeScript와의 호환성을 위해 별도의 타입 정의 파일을 제공합니다.
데이터베이스 지원: TypeORM은 MySQL, PostgreSQL, Oracle, MongoDB 등 다양한 SQL 및 NoSQL 데이터베이스를 지원합니다. Sequelize는 MySQL, PostgreSQL, SQLite, MariaDB 등 주로 SQL 데이터베이스를 지원합니다.
쿼리: TypeORM은 쿼리 빌더 인터페이스를 제공하여 쿼리를 생성하고 실행할 수 있습니다. 예를 들어 userRepo.createQueryBuilder("user").where("user.name = :name", { name: "John" }).getOne()과 같은 방식으로 쿼리를 작성할 수 있습니다. Sequelize는 정적 메서드를 사용하여 쿼리를 생성하고 실행할 수 있습니다. 예를 들어 User.findOne({ where: { name: "John" } })과 같은 방식으로 쿼리를 작성할 수 있습니다.
연결: TypeORM은 데코레이터를 사용하여 엔터티 간의 관계를 정의하고 연결할 수 있습니다. 예를 들어 @Entity() class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @OneToMany(() => Post, post => post.user) posts: Post[]; }과 같은 방식으로 엔터티를 작성하고 관계를 설정할 수 있습니다. Sequelize는 특정 메서드를 사용하여 모델 간의 관계를 정의하고 연결할 수 있습니다. 예를 들어 class User extends Model {} User.init({ id: { type: DataTypes.INTEGER, primaryKey: true }, name: { type: DataTypes.STRING } }, { sequelize }); class Post extends Model {} Post.init({ id: { type: DataTypes.INTEGER, primaryKey: true }, title: { type: DataTypes.STRING } }, { sequelize }); User.hasMany(Post); Post.belongsTo(User);과 같은 방식으로 모델을 작성하고 관계를 설정할 수 있습니다.
마이그레이션: TypeORM은 마이그레이션 기능을 내장하고 있으며 CLI 명령어나 API를 통해 마이그레이션을 생성하고 실행할 수 있습니다. 예를 들어 typeorm migration:create -n CreateUserTable과 같은 명령어로 마이그레이션 파일을 생성하고 typeorm migration:run과 같은 명령어로 마이그레이션을 실행할 수 있습니다. Sequelize는 마이그레이션 기능을 외부 도구인 sequelize-cli에 위임하고 있으며 CLI 명령어나 API를 통해 마이그레이션을 생성하고 실행할 수 있습니다. 예를 들어 sequelize migration:create --name create-user-table과 같은 명령어로 마이그레이션 파일을 생성하고 sequelize db:migrate과 같은 명령어로 마이그레이션을 실행할 수 있습니다.
'코딩공부 > 개발지식' 카테고리의 다른 글
[16회 - 데일리과제] 이분탐색 / 스토리지 엔진 & DB Lock (0) | 2023.05.05 |
---|---|
[15회 - 데일리과제] 선택 정렬 / Redis (0) | 2023.05.03 |
[13회 - 데일리과제] 정규화 (0) | 2023.05.01 |
[12회 - 데일리과제] 트랜젝션 / 인덱스 (0) | 2023.04.27 |
[11회 - 데일리과제] RDBMS와 NoSQL의 특징 및 차이 (0) | 2023.04.26 |