728x90
반응형

1. 이분탐색에 대해 설명해보세요.

이분탐색은 정렬된 배열에서 데이터를 찾는 알고리즘입니다.
찾고자 하는 값과 배열의 중간값을 비교하여 탐색 범위를 절반씩 줄여나갑니다.
중간값이 찾는 값보다 크면 왼쪽 부분을, 작으면 오른쪽 부분을 탐색합니다.
이 과정을 반복하여 원하는 값을 찾을 때까지 수행합니다.
이분탐색은 O(log N)의 시간복잡도를 가지며 데이터가 많아질수록 유리합니다.
단, 정렬된 배열에서만 적용할 수 있다는 제약이 있습니다.

따라서 정렬된 데이터는 이분탐색, 정렬되지 않은 데이터에서는 선형탐색이 더 적합합니다.

 

2. 스토리지 엔진과 DB Lock에 대해 설명해보세요.

스토리지 엔진은 데이터베이스에서 데이터를 저장, 구성 및 액세스하는 방법을 관리하는 소프트웨어입니다. 
디스크 또는 메모리에서 데이터를 읽고 쓰고 검색하기 위한 규칙과 알고리즘을 정의합니다.

DB Lock은 데이터베이스에서 여러 사용자가 동시에 데이터에 접근 및 수정할 때 발생할 수 있는 문제를 해결하기 위해 사용되는 기술입니다. DB Lock 동시 접근 및 수정하려고 할때 충돌을 방지하고 일관성을 유지할 수 있습니다.

728x90
반응형
728x90
반응형

1. 선택정렬 알고리즘에 대해 설명해주세요.

선택 정렬(Selection Sort)은 배열에서 가장 작은 값을 찾아서 배열의 맨 앞에 위치시키고, 그 다음 작은 값을 찾아서 두 번째 위치에 위치시키는 방식으로 정렬하는 알고리즘입니다. 선택 정렬은 비교 정렬이며, 제자리 정렬이라고도 합니다.

선택 정렬의 장점으로는 구현이 쉽고 코드가 직관적이라는 점이 있습니다. 또한, 정렬을 위한 비교 횟수는 많지만 실제로 교환하는 횟수는 적기 때문에 많은 교환이 일어나야 하는 자료 상태에서 효율적으로 사용될 수 있습니다.
선택 정렬의 단점으로는 속도가 느리다는 점이 있습니다. 선택 정렬은 항상 O(n^2)의 시간 복잡도를 갖기 때문에 시간이 오래 걸리는 정렬 방식입니다.

 

선택 정렬의 과정은 다음과 같습니다:
1. 주어진 리스트 중에 최소값을 찾는다.
2. 그 값을 맨 앞에 위치한 값과 교체한다 (패스 (pass)).
3. 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다.
4. 하나의 원소만 남을 때까지 위의 1~3 과정을 반복한다.

 

2. Redis에 대해 설명해주세요.

Redis는 오픈소스 메모리 데이터 구조 저장소입니다. 키와 값으로 데이터를 저장하며, 데이터를 메모리에 저장하고 조회하기 때문에 속도가 빠릅니다. 주요 사용 사례는 캐싱, 세션관리, 순위표 등이 있습니다. Redis의 장점으로는 다양한 데이터 구조를 지원한다는 점이 있습니다. 또한, 메모리와 디스크를 활용하여 영구 데이터 보존이 가능합니다.
Redis의 단점으로는 메모리 사용량이 많다는 점이 있습니다. 또한, 대규모 트래픽에 대한 응답속도가 불안정할 수 있습니다.

 

요약하면 Redis는 캐싱, 메시징 및 고급 데이터 구조와 같은 기능을 갖춘 다목적 고성능 인 메모리 데이터 저장소입니다. 짧은 대기 시간, 높은 처리량 및 실시간 데이터 처리가 필요한 시나리오에서 탁월합니다. 그러나 메모리 용량, 복잡성, 쿼리 언어 부족 및 단일 스레드 특성과 관련된 제한 사항이 있습니다.


ChatGPT 답변

더보기

Redis(원격 사전 서버)는 데이터베이스, 캐시 및 메시지 브로커로 사용할 수 있는 오픈 소스 메모리 내 데이터 구조 저장소입니다. 데이터를 메모리에 보관하여 데이터를 저장하고 검색하는 빠르고 효율적인 방법을 제공합니다. Redis는 문자열, 목록, 세트, ​​해시 및 정렬된 세트와 같은 다양한 데이터 구조를 지원하고 이러한 데이터 유형에 대한 원자적 연산을 제공합니다.

Redis 사용의 장점은 다음과 같습니다.

  1. 고성능: Redis는 데이터를 메모리에 저장하므로 매우 빠른 읽기 및 쓰기 작업이 가능합니다. 초당 많은 양의 요청을 처리할 수 있고 대기 시간이 짧아 실시간 데이터 처리가 필요한 애플리케이션에 적합합니다.
  2. 다양성: Redis는 다양한 사용 사례에 사용할 수 있습니다. 자주 액세스하는 데이터를 메모리에 저장하여 애플리케이션 성능을 향상시키는 캐싱 계층 역할을 할 수 있습니다. 또한 게시-구독 메시징 패턴을 지원하는 분산 시스템 구축을 위한 메시지 브로커 역할을 할 수 있습니다. 또한 Redis는 복잡한 데이터 조작을 가능하게 하는 고급 데이터 구조 및 명령을 제공합니다.
  3. 지속성: Redis는 지속성 옵션을 지원하여 데이터를 디스크에 저장할 수 있습니다. 이렇게 하면 시스템 오류 또는 재시작 시 데이터가 손실되지 않습니다. Redis는 스냅샷 및 추가 전용 로그를 비롯한 다양한 지속성 메커니즘을 제공하여 특정 요구 사항에 따라 유연성을 제공합니다.
  4. 확장성: Redis는 데이터 샤딩 및 복제를 지원하여 수평 확장이 가능합니다. 샤딩을 사용하면 여러 Redis 인스턴스에 데이터를 분산하여 스토리지 및 처리 용량을 늘릴 수 있습니다. 복제는 향상된 성능과 고가용성을 위해 데이터의 복제본을 생성할 수 있도록 합니다.

많은 장점에도 불구하고 Redis에는 몇 가지 제한 사항도 있습니다.

  1. 메모리 제약: Redis는 데이터를 메모리에 저장하므로 저장할 수 있는 데이터의 양은 사용 가능한 메모리 용량에 따라 제한됩니다. 데이터 세트가 메모리 용량보다 커지면 성능 문제가 발생하거나 외부 스토리지 메커니즘을 사용해야 할 수 있습니다.
  2. 복잡성: Redis는 간단한 키-값 저장을 위해 설정하고 사용하기가 상대적으로 쉽지만 고급 기능과 데이터 구조를 활용하는 것은 더 복잡할 수 있습니다. Redis 명령 및 데이터 구조의 적절한 설계와 이해는 Redis의 잠재력을 최대한 활용하는 데 필요합니다.
  3. 쿼리 언어 없음: Redis는 SQL과 같은 쿼리 언어를 제공하지 않으므로 복잡한 쿼리 및 필터링 작업이 더 어려워집니다. 복잡한 기준에 따라 데이터를 검색하려면 추가 애플리케이션 로직이 필요할 수 있습니다.
  4. 단일 스레드: Redis는 단일 스레드 모델을 사용합니다. 즉, 단일 CPU 코어만 사용할 수 있습니다. 이 제한은 동시 읽기 및 쓰기 작업으로 매우 높은 로드를 처리할 때 성능에 영향을 미칠 수 있습니다.

요약하면 Redis는 캐싱, 메시징 및 고급 데이터 구조와 같은 기능을 갖춘 다목적 고성능 인 메모리 데이터 저장소입니다. 짧은 대기 시간, 높은 처리량 및 실시간 데이터 처리가 필요한 시나리오에서 탁월합니다. 그러나 메모리 용량, 복잡성, 쿼리 언어 부족 및 단일 스레드 특성과 관련된 제한 사항이 있습니다.

728x90
반응형
728x90
반응형

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과 같은 명령어로 마이그레이션을 실행할 수 있습니다.

728x90
반응형
728x90
반응형

1. 정규화에 대해 설명해주세요.

정규화데이터베이스에서 중복을 최소화하고 데이터 무결성을 향상시키는 프로세스를 말합니다.

정규화는 여러 단계로 이루어져 있으며, 각 단계마다 테이블을 분해하는 방법이 다릅니다.

정규화를 진행하면 데이터베이스의 설계가 개선되고, 데이터의 중복과 무결성 문제를 해결할 수 있습니다.

그러나 과도한 정규화는 데이터베이스의 복잡성이 증가하여 성능에 영향을 미칠 수 있으니 적절하게 사용해야 합니다.


제1정규형릴레이션의 모든 도메인이 원자값(Atomic Value)만을 포함하도록 분해하는 것입니다. 

즉, 하나의 속성에 여러 개의 값이 들어가 있으면 안됩니다.

제2정규형제1정규형을 만족하면서 부분 함수적 종속을 제거하는 것입니다. 

즉, 기본키가 아닌 다른 속성들이 기본키의 일부분에만 종속되어 있으면 안됩니다.

제 3 정규형제2정규형을 만족하면서 이행적 함수 종속을 제거하는 것입니다. 

즉, A -> B, B -> C와 같은 종속 관계에서 A -> C와 같은 종속 관계가 있으면 안됩니다.

정규화의 장점

- 최소의 데이터로 최적의 데이터베이스 구축 및 데이터 중복성 제거
- 종속성 삭제로 데이터의 일관성과 무결성 보장
- 릴레이션에서 발생 가능한 이상현상 제거
- 중복의 최소화로 저장공간의 효율화 달성

 

정규화의 단점
- 릴레이션을 분해하면서 조인 연산이 많아져 처리 성능이 저하될 수 있습니다.
- 릴레이션을 분해하면서 불필요한 릴레이션이 생성될 수 있습니다.

 


릴레이션이란 데이터베이스에서 데이터를 저장하는 테이블을 말합니다. 

릴레이션은 행과 열로 구성되며, 각 행은 레코드(record)라고 하며, 각 열은 속성(attribute)이라고 합니다. 

릴레이션은 관계형 데이터베이스에서 가장 기본적인 데이터 저장 단위입니다.

 

출처: 상세한 내용 https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Database#%EC%A0%95%EA%B7%9C%ED%99%94%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C

더보기

1. 정규화는 어떤 배경에서 생겨났는가?

한 릴레이션에 여러 엔티티의 애트리뷰트들을 혼합하게 되면 정보가 중복 저장되며, 저장 공간을 낭비하게 된다. 또 중복된 정보로 인해 갱신 이상이 발생하게 된다. 동일한 정보를 한 릴레이션에는 변경하고, 나머지 릴레이션에서는 변경하지 않은 경우 어느 것이 정확한지 알 수 없게 되는 것이다. 이러한 문제를 해결하기 위해 정규화 과정을 거치는 것이다.

1-1. 갱신 이상에는 어떠한 것들이 있는가?

  • 삽입 이상(insertion anomalies) 원하지 않는 자료가 삽입된다든지, 삽입하는데 자료가 부족해 삽입이 되지 않아 발생하는 문제점을 말한다.
  • 삭제 이상(deletion anomalies) 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 문제점을 말한다.
  • 수정(갱신)이상(modification anomalies) 정확하지 않거나 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보 파악이 되지 않는 문제점을 말한다.

 

2. 그래서 정규화란 무엇인가?

관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업이다. 좀 더 구체적으로는 불만족스러운 나쁜 릴레이션의 애트리뷰트들을 나누어서 좋은 작은 릴레이션으로 분해하는 작업을 말한다. 정규화 과정을 거치게 되면 정규형을 만족하게 된다. 정규형이란 특정 조건을 만족하는 릴레이션의 스키마의 형태를 말하며 제 1 정규형, 제 2 정규형, 제 3 정규형, … 등이 존재한다.

2-1. ‘나쁜' 릴레이션은 어떻게 파악하는가?

엔티티를 구성하고 있는 애트리뷰트 간에 함수적 종속성(Functional Dependency)을 판단한다. 판단된 함수적 종속성은 좋은 릴레이션 설계의 정형적 기준으로 사용된다. 즉, 각각의 정규형마다 어떠한 함수적 종속성을 만족하는지에 따라 정규형이 정의되고, 그 정규형을 만족하지 못하는 정규형을 나쁜 릴레이션으로 파악한다.

2-2. 함수적 종속성이란 무엇인가?

함수적 종속성이란 애트리뷰트 데이터들의 의미와 애트리뷰트들 간의 상호 관계로부터 유도되는 제약조건의 일종이다. X 와 Y 를 임의의 애트리뷰트 집합이라고 할 때, X 의 값이 Y 의 값을 유일하게(unique) 결정한다면 "X 는 Y 를 함수적으로 결정한다"라고 한다. 함수적 종속성은 실세계에서 존재하는 애트리뷰트들 사이의 제약조건으로부터 유도된다. 또한 각종 추론 규칙에 따라서 애트리뷰트들간의 함수적 종속성을 판단할 수 있다. cf> 애트리뷰트들의 관계로부터 추론된 함수적 종속성들을 기반으로 추론 가능한 모든 함수적 종속성들의 집합을 폐포라고 한다.

2-3. 각각의 정규형은 어떠한 조건을 만족해야 하는가?

  1. 분해의 대상인 분해 집합 D 는 무손실 조인 을 보장해야 한다.
  2. 분해 집합 D 는 함수적 종속성을 보존해야 한다.

 

제 1 정규형

애트리뷰트의 도메인이 오직 원자값만을 포함하고, 튜플의 모든 애트리뷰트가 도메인에 속하는 하나의 값을 가져야 한다. 즉, 복합 애트리뷰트, 다중값 애트리뷰트, 중첩 릴레이션 등 비 원자적인 애트리뷰트들을 허용하지 않는 릴레이션 형태를 말한다.

제 2 정규형

모든 비주요 애트리뷰트들이 주요 애트리뷰트에 대해서 완전 함수적 종속이면 제 2 정규형을 만족한다고 볼 수 있다. 완전 함수적 종속이란 X -> Y 라고 가정했을 때, X 의 어떠한 애트리뷰트라도 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우를 말한다. 즉, 키가 아닌 열들이 각각 후보키에 대해 결정되는 릴레이션 형태를 말한다.

제 3 정규형

어떠한 비주요 애트리뷰트도 기본키에 대해서 이행적으로 종속되지 않으면 제 3 정규형을 만족한다고 볼 수 있다. 이행 함수적 종속이란 X - >Y, Y -> Z의 경우에 의해서 추론될 수 있는 X -> Z의 종속관계를 말한다. 즉, 비주요 애트리뷰트가 비주요 애트리뷰트에 의해 종속되는 경우가 없는 릴레이션 형태를 말한다.

BCNF(Boyce-Codd) 정규형

여러 후보 키가 존재하는 릴레이션에 해당하는 정규화 내용이다. 복잡한 식별자 관계에 의해 발생하는 문제를 해결하기 위해 제 3 정규형을 보완하는데 의미가 있다. 비주요 애트리뷰트가 후보키의 일부를 결정하는 분해하는 과정을 말한다.

각 정규형은 그의 선행 정규형보다 더 엄격한 조건을 갖는다.

  • 모든 제 2 정규형 릴레이션은 제 1 정규형을 갖는다.
  • 모든 제 3 정규형 릴레이션은 제 2 정규형을 갖는다.
  • 모든 BCNF 정규형 릴레이션은 제 3 정규형을 갖는다.

수많은 정규형이 있지만 관계 데이터베이스 설계의 목표는 각 릴레이션이 3NF(or BCNF)를 갖게 하는 것이다.

 

3. 정규화에는 어떠한 장점이 있는가?

  1. 데이터베이스 변경 시 이상 현상(Anomaly) 제거 위에서 언급했던 각종 이상 현상들이 발생하는 문제점을 해결할 수 있다.
  2. 데이터베이스 구조 확장 시 재 디자인 최소화 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다. 이는 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되며 응용프로그램의 생명을 연장시킨다.
  3. 사용자에게 데이터 모델을 더욱 의미있게 제공 정규화된 테이블들과 정규화된 테이블들간의 관계들은 현실 세계에서의 개념들과 그들간의 관계들을 반영한다.

 

4. 단점은 없는가?

릴레이션의 분해로 인해 릴레이션 간의 연산(JOIN 연산)이 많아진다. 이로 인해 질의에 대한 응답 시간이 느려질 수 있다. 조금 덧붙이자면, 정규화를 수행한다는 것은 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것이다. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다. 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있다.

 

5. 단점에서 미루어보았을 때 어떠한 상황에서 정규화를 진행해야 하는가? 단점에 대한 대응책은?

조회를 하는 SQL 문장에서 조인이 많이 발생하여 이로 인한 성능저하가 나타나는 경우에 반정규화를 적용하는 전략이 필요하다.

반정규화(De-normalization, 비정규화)

반정규화는 정규화된 엔티티, 속성, 관계를 시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 데이터 모델링 기법 중 하나이다. 디스크 I/O 량이 많아서 조회 시 성능이 저하되거나, 테이블끼리의 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되거나, 칼럼을 계산하여 조회할 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다. 일반적으로 조회에 대한 처리 성능이 중요하다고 판단될 때 부분적으로 반정규화를 고려하게 된다.

5-1. 무엇이 반정규화의 대상이 되는가?

  1. 자주 사용되는 테이블에 액세스하는 프로세스의 수가 가장 많고, 항상 일정한 범위만을 조회하는 경우
  2. 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우, 성능 상 이슈가 있을 경우
  3. 테이블에 지나치게 조인을 많이 사용하게 되어 데이터를 조회하는 것이 기술적으로 어려울 경우

5-2. 반정규화 과정에서 주의할 점은?

반정규화를 과도하게 적용하다 보면 데이터의 무결성이 깨질 수 있다. 또한 입력, 수정, 삭제의 질의문에 대한 응답 시간이 늦어질 수 있다.

728x90
반응형
728x90
반응형

1. 트랜젝션에 대해 설명해주세요.

트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미합니다.

트랜잭션의 주요 목적은 데이터의 무결성과 일관성을 보장하는 것입니다. 여러 작업을 단일 트랜잭션으로 그룹화하여 트랜잭션 내의 모든 작업이 성공적으로 실행되거나 아무 것도 실행되지 않도록 할 수 있습니다.

트랜잭션은 신뢰할 수 있고 일관된 데이터 처리를 보장하는 ACID속성을 따릅니다.

 

트랜잭션은 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)의 4가지 특징을 가집니다.

원자성은 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것을 의미합니다.

일관성은 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것을 의미합니다.

독립성은 둘 이상 트랜잭션이 동시 실행시 어떤 트랜젝션이라도 다른 트랜잭션 연산에 끼어들 수 없다는 점을 의미합니다.

지속성은 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다는 점입니다.

 

2. 인덱스란 무엇인가요?

인덱스이터베이스에서 검색 속도를 높이기 위해 사용되는 자료구조입니다. 인덱스를 생성하면 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장됩니다.

인덱스의 장점은 검색 속도를 향상시키는 것입니다. 하지만 인덱스 생성에 따른 추가적인 저장 공간이 필요하며, 삽입, 삭제, 수정 작업 시에도 인덱스를 업데이트해야 하므로 성능 저하가 발생할 수 있습니다. 

728x90
반응형
728x90
반응형

1. RDBMS와 NoSQL의 특징 및 차이

RDBMS와 NoSQL은 데이터 저장 방식이 다릅니다.

RDBMS는 관계형 데이터베이스로 데이터를 저장하고, 스키마가 정적입니다.

반면에 NoSQL유연한 스키마 구조를 갖습니다.

RDBMS수직 확장이 용이하고, NoSQL수평 확장이 용이합니다.

 


RDBMS의 장점으로는 데이터의 분류, 정렬, 탐색 속도가 비교적 빠르며,

SQL이라는 구조화된 질의를 통해 데이터를 다룰 수 있습니다. 작업의 완전성을 보장하며, 데이터의 UPDATE가 빠릅니다.

단점으로는 반드시 스키마 규격에 맞춰서 데이터를 다뤄야 하며데이터 처리에 대한 부하 발생시 처리가 어렵습니다.

NoSQL의 장점으로는 데이터간의 관계를 정의하지 않아 테이블간의 관계 (join)가 불필요하며, RDBMS보다 복잡도가 떨어져 대용량의 데이터를 저장·관리 할 수 있습니다. 테이블에 스키마가 정해져 있지 않아 데이터 저장이 비교적 자유롭습니다. 단점으로는 key값에 대한 입·출력만 지원되며, 스키마가 정해져 있지 않아 데이터에 대한 규격화가 되어있지 않습니다. DATA를 UPDATE하는데 비교적 느립니다.

 

<수직확장 vs 수평확장>

더보기

수직 확장(Scale-up)은 하드웨어의 성능을 향상시키는 것을 의미합니다. 예를 들어, CPU나 메모리를 추가하는 것이 수직 확장에 해당합니다. 이 방법은 간단하지만 하드웨어의 물리적 한계가 존재하며, 서버의 자원을 확장하는 것에 비용이 많이 들 수 있습니다.(RDBMS 장점 - 단일서버 성능 향상, 스케일업)

수평 확장(Scale-out)은 서버의 수를 늘리고 동작하는 애플리케이션의 복제본을 실행해 이중화, 삼중화를 하는 방식으로 부하를 분산시켜주는 방식입니다. 이 방법은 이론상으로 무한한 확장이 가능하며, 쿠버네티스와 같은 오케스트레이션 툴을 사용해 간단하게 수평 확장할 수 있습니다. 하지만 일반적으로 네트워크로 연결되므로 네트워크 환경이 좋지 않으면 확장이 불가능하거나, 원하는 성능을 얻지 못할 수 있습니다. (NoSQL 장점 - 여러개의 서버를 사용, 스케일아웃)

 

728x90
반응형
728x90
반응형

1. 웹 서버 (Web Server)와 웹 어플리케이션 서버 (Web Application Server)의 차이점은 무엇인가요? 

웹 서버는 정적 데이터를 처리하고, 웹 어플리케이션 서버는 동적 데이터를 처리합니다. 이 특징으로, 실무에서는 이 둘을 연동하여 사용하는데, WAS는 동적 처리에 최적화 되어 있는 서비스이기 때문에 처리 속도를 위해, 정적처리는 웹서버에서 처리를 하고, 동적 컨텐츠는 WAS에서 처리합니다

 

2. 프로그래밍 언어 (Programming Language)와 스크립트 언어 (Scripting Language)의 차이점은 무엇인가요?

스크립트 언어는 일반적으로 스크립트를 지원하는 프로그래밍 언어 유형입니다. 스크립트는 다른 프로그램을 제어하기 위해 작성된 프로그램입니다. 스크립트 언어는 주로 웹 개발, 네트워크 자동화, 데이터 처리 등 간단한 작업을 수행하는 데 사용됩니다. 반면 프로그래밍 언어는 보다 복잡한 소프트웨어 시스템을 구축하는 데 사용됩니다.

728x90
반응형
728x90
반응형

1. 정규 표현식에 대해 설명해보세요.

정규 표현식(Regular Expression)은 문자열에서 특정한 패턴을 찾거나 대체하는데 사용되는 문자열 처리 기법입니다. 

정규 표현식은 특수한 문자와 규칙을 사용하여 문자열의 패턴을 정의하고, 이 패턴을 사용하여 문자열에서 원하는 부분을 찾거나 대체할 수 있습니다.

 

2. 자바스크립트의 호이스팅이란 무엇인가요?

호이스팅(Hoisting)은 자바스크립트에서 변수와 함수 선언이 코드의 최상단으로 이동하는 것처럼 동작하는 현상입니다. 

이 현상은 자바스크립트 엔진이 코드를 실행하기 전에 코드를 스캔하면서 변수와 함수 선언을 찾아내고 이들을 메모리에 저장하는 과정에서 발생합니다.

728x90
반응형

+ Recent posts