본문 바로가기

카테고리 없음

면접질문, cs 정리: 인덱스,mvc, 스택 큐, RDBMS, NOSql, KEY,

  1. 인덱스(Index)란 무엇인가??
    1. 결론: 인덱스는 데이터베이스의 검색 성능을 향상시키기 위한 자료 구조입니다. 테이블에서 데이터를 빠르게 조회하면서 효율적인 데이터 관리를 위해 사용됩니다.
    2. 과정:
      • 자세히 알아보면, 인덱스는 테이블의 특정 열 또는 열의 조합에 인덱스를 생성한 뒤 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장해서 수색을 빠르게 합니다. 이때, 데이터는 책, 인덱스는 목차, 그리고 목차는 페이지에 끼워져 있으니 물리적 주소는 책의 페이지로 기억하면 편합니다.  특히 대량의 데이터에서 원하는 정보를 빠르게 찾을 때 유리하며 조회를 많이고 수정을 적게할 상황에 사용하는게 좋습니다. 
        • 인덱스의 단점: 인덱스를 많이 만들면 데이터 삽입, 수정, 삭제 시 오버헤드가 발생할 수 있습니다. 인덱스가 수정될 때마다 업데이트 작업이 추가되기 때문입니다.
    3. 마무리: 정리하면, 인덱스는 데이터 검색 속도를 빠르게 하는 강력한 도구이지만, 잘못 사용할 경우 성능 저하를 유발할 수 있습니다. 따라서 적절한 인덱스를 설정하는 것이 중요합니다.

 

인덱스 cs

인덱스(Index)란?

 


데이터베이스의 테이블에 대한 검색 속도를 향상시켜주는 자료구조이다.
테이블의 특정 컬럼(Column)에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다. 컬럼의 값과 물리적 주소를 (key, value)의 한 쌍으로 저장한다. 해당 키에 대하 물리적주소가 가리키는 원본테이블의 행을 가져온다.
인덱스는 특정 컬럼을 복사하여 정렬한 컬럼의 복사본이다.

인덱스는 책에서의 목차 혹은 색인이라고 생각하면 된다. 책에서 원하는 내용을 찾을 때 목차나 색인을 이용하면 훨씬 빠르게 찾을 수 있는데

이때 ,
책의 내용 = 데이터
책의 목차 = 인덱스
책의 페이지 번호 = 물리적주소

라고 생각 할 수 있다.

원하는 내용(데이터)을 찾기 위해 목차(인덱스)에 보고 해당 목차에 대한 페이지 번호(물리적주소)를 보고 데이터를 찾을 수 있다.

2-2. 인덱스의 자료 구조
2-2-1. 해시 테이블
1. 해시 테이블(Hash Table)

해시 테이블은 key와 value를 한 쌍으로 데이터를 저장하는 자료구조이다. (key, value)로 쌍을 표현하며, key값을 이용해 대응되는 value값을 구하는 방식이다. 해시 충돌이라는 변수가 존재하지만 평균적으로 O(1)의 매우 빠른 시간만에 원하는 데이터를 탐색할 수 있는 구조이다.
해시 테이블을 이용한다면 인덱스는 (key, value) = (컬럼의 값, 데이터의 위치)로 구현하는데, 해시 테이블은 실제로 인덱스에서 잘 사용되지 않는다.

그 이유는, 해시 테이블은 등호(=) 연산에 최적화되어있기 때문이다. 데이터베이스에선 부등호(<, >) 연산이 자주 사용되는데, 해시 테이블 내의 데이터들은 정렬되어 있지 않으므로 특정 기준보다 크거나 작은 값을 빠른 시간 내에 찾을 수가 없다.

 

 

2. MVC(Model-View-Controller)란?:

  1. 결론: MVC는 소프트웨어 개발에서 모델, 뷰, 컨트롤러로 되어 있으며 각 구성 요소가 서로 독립적으로 역할을 수행하여 유지 보수성과 확장성을 높이는 데 기여합니다.
  2. 과정:
    • 모델(Model): 먼저 모델은, 애플리케이션의 데이터와 비즈니스 로직을 관리하는 부분으로, 데이터를 처리하고 저장하는 역할을 합니다.
    • 뷰(View): 뷰는, 사용자에게 보여지는 인터페이스로, 데이터를 시각적으로 표현합니다. 사용자는 뷰를 통해 데이터를 확인하거나 입력합니다.
    • 컨트롤러(Controller): 컨트롤러는, 사용자의 입력을 받아 모델을 업데이트하고, 그 결과에 따라 뷰를 갱신하는 역할을 합니다. 모델과 뷰 간의 중간 역할을 수행합니다.
    1. 마무리: MVC는 관심사의 분리를 통해 각 요소가 독립적으로 동작할 수 있도록 하여, 유지 보수 및 확장성을 크게 향상시킵니다. 예를 들어, 뷰를 변경해도 모델과 컨트롤러에는 영향을 미치지 않아 코드 수정이 최소화됩니다.

 

mvc의 cs

 

MVC는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴으로, 애플리케이션을 세 가지 역할로 구분한 개발 방법론이다. 
사용자가 Controller를 조작하면 → Controller는 Model을 통해서 Data를 가져오고  → 그 정보를 바탕으로 View를 통해 시각적 표현을 제어하여 사용자에게 전달하게 된다.
 
MVC 패턴을 사용하는 이유

비즈니스 로직과 UI 로직을 분리하여 유지보수를 독립적으로 수행가능
Model과 View가 다른 컴포넌트들에 종속되지 않아 애플리케이션의 확장성, 유연성에 유리함
중복 코딩의 문제점 제거

 
WEB에서의 MVC 패턴
① 사용자가 웹사이트에 접속한다.
② Controller 는 사용자가 요청한 웹페이지를 서비스하기위해 모델을 호출한다.
③ 모델은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 리턴한다.
④ Controller는 Model이 리턴한 결과를 View에 반영한다.
⑤ 데이터가 반영된 View는 사용자에게 보여진다.
 
 
컨트롤러 (Controller)
사용자가 접근한 URL에 따라서 사용자의 요청사항을 파악한 후에 그 요청에 맞는 데이터를 Model에 요청하고, 데이터를 View에 반영하여 사용자에게 알려준다.
 
Controller의 규칙
1) 모델이나 뷰에 대해서 알고 있어야 한다.
2) 모델이나 뷰의 변경을 모니터링 해야 한다.
 
 
모델 (Model)
데이터를 가진 객체의 모델이라고 지칭한다. 데이터는 내부의 상태에 대한 정보를 가질 수도 있고, 모델을 표현하는 이름 속성으로 가질 수 있다. 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다. 이와 같은 통보를 통해 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가, 제거, 수정할 수 있다.
 
Model의 규칙
1) 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야만 한다.
2) 뷰(View)나 컨트롤러(Controller)에 대해서 어떤 정보도 알지 말아야한다.
3) 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야 한다.
 
 
뷰 (View)
클라이언트 측 기술인 html/css/javascript들을 모아둔 컨테이너 이다.
 
View의 규칙
1) 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
2) 모델이나 컨트롤러와 같이 다른 구성 요소를 몰라야 된다.
3) 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야 한다.

 

 

3. 스택(Stack)과 큐(Queue)에 대해 설명해주세요:

1. **결론**: 스택과 큐는 데이터를 저장하고 관리하는 대표적인 구조로, 스택은 후입선출, 큐는 선입선출 방식을 사용하여 데이터를 처리합니다.
2. **과정**:
    - **스택(Stack)**: 먼저 스택은 아무렇게 쌓은 책더미 같은 구조로 데이터를 후입선출방식으로 처리하며, 마지막에 삽입된 데이터가 가장 먼저 제거됩니다. 'push'로 데이터를 추가하고 'pop'으로 제거합니다. 대표적인 예로는 뒤로가기가 있습니다.
    - **큐(Queue)**: 큐는 선입선출 방식으로 동작하며, 줄서기처럼 가장 먼저 들어간 데이터가 먼저 나옵니다. 'enqueue'(엔큐)로 데이터를 추가하고 'dequeue'(디큐)로 제거합니다. 일반적인 큐의 예로는 프린터 대기열이 있습니다.
3. **마무리**: 스택과 큐는 각각의 특성에 맞게 다른 상황에서 유용하게 사용되며, 스택은 순차적으로 데이터를 처리할 때, 큐는 데이터의 순서대로 처리해야 할 때 주로 사용됩니다.

 

cs

 

1. 스택(Stack)


후입선출 (LIFO: Last-In-First-Out) 자료구조이다. 마치 바구니에 책을 겹겹이 쌓아올리는 것처럼 한 방향에서만 데이터의 삽입/삭제가 일어난다.

특징
가장 최근에 추가한 데이터가 가장 먼저 나오는 후입선출 자료구조이다. 예를 들어 상단 그림에서는 A-B-C 순으로 데이터가 삽입되었으며, 삭제 시에는 C-B-A 순이 될 것이다.
스택에서의 데이터 삽입/삭제는 push(), pop() 이라 부르는데, 이 연산은 모두 O(1)의 시간 복잡도를 갖는다.


활용 예시: 깊이 우선탐색, 웹 브라우저 방문기록 (뒤로 가기), 괄호 유효성 검사,call stack, 후위 표기법 연산

2. 큐(Queue)


선입선출 (FIFO: First-In-First-Out) 자료구조이다. 한쪽 방향에서는 데이터 삽입이, 다른 쪽에서는 데이터 삭제가 일어나 먼저 들어간 데이터가 먼저 나오게 되는 자료구조이다.

특징
가장 먼저 삽입된 데이터가 가장 먼저 삭제되는 선입선출 자료구조이다. 상단 사진에서는 A-B-C 순으로 데이터가 삽입되었으며, 삭제 시에도 A-B-C 순으로 삭제될 것이다.


큐에서의 데이터 삽입을 enqueue, 데이터 삭제를 dequeue 라고 하는데, 두 연산 모두 O(1) 만큼의 시간이 소요된다.


구현 방식
Array-Based-Queue: 크기가 고정되어있어 데이터 삽입/삭제 과정에서 메모리 낭비가 발생할 수 있다. 이 경우 아래에서 다시 언급할 원형 큐로 이 문제를 예방할 수 있다.
List-Based-Queue: 크기가 가변적이기 때문에 재할당이나 메모리 낭비 걱정을 할 필요가 없어진다.

 

 

4. RDBMS와 NoSQL 차이

결론:
RDBMS와 NoSQL은 서로 다른 방식으로 데이터를 관리하는 데이터베이스 시스템으로, RDBMS는 데이터 무결성을 중시하고, NoSQL은 대규모 데이터 처리에 유리합니다.
  과정:
• RDBMS: 데이터를 행과 열의 테이블 형태로 저장하며, 기본키와 외래키를 사용해 데이터 무결성을 보장합니다. 또한 ACID 트랜잭션을 지원해 안전한 데이터 처리가 가능합니다. 하지만 대량의 데이터 처리 시 성능이 저하될 수 있고, 테이블 구조가 고정되어 있어 유연성이 부족합니다.
• NoSQL: 비정형 데이터를 관리하기에 적합하며, 데이터 구조의 변경이 자유롭고 수평, 수직 확장이 가능합니다. 그러나 ACID 트랜잭션을 완벽히 지원하지 않거나, 데이터 일관성 유지가 어려울 수 있습니다.
• 마무리:
RDBMS는 데이터 무결성과 일관성을 중시하는 경우에 적합하고, NoSQL은 대용량 데이터 처리와 유연한 데이터 구조를 요구하는 환경에서 유리합니다.

 

CS

RDBMS 란 ?
DBMS 앞에 R ( Relational ) 이 추가되어 관계형 데이터베이스 관리 시스템이라고 합니다.


RDBMS는 RDB를 관리하는 시스템이며 RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스로,관계형 데이터베이스를 생성하고 수정, 삭제 관리할 수 있는 소프트웨어라고 정의합니다.


관계형 데이터베이스(RDMBS)에서는 이러한 관계를 나타내기 위해 외래 키(foreign key)라는 것을 사용,
이러한 테이블간의 관계에서 외래 키를 이용한 테이블 간 Join이 가능하다는 게 RDBMS의 가장 큰 특징입니다.

 


RDBMS의 장단점

장점

정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장한다.
또한 관계는 각 데이터를 중복없이 한 번만 저장할 수 있다.


단점

테이블간테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있습니다.
성능 향상을 위해서는 서버의 성능을 향상 시켜야하는 Scale-up만을 지원합니다. 이로 인해 비용이 기하급수적으로 늘어날 수 있습니다.
스키마로 인해 데이터가 유연하지 못합니다. 나중에 스키마가 변경 될 경우 번거롭고 어렵습니다.



 

NoSQL ( Not Only SQL )
NoSQL에서는 RDBMS와는 달리 테이블 간 관계를 정의하지 않습니다.
데이터 테이블은 그냥 하나의 테이블이며 테이블 간의 관계를 정의하지 않아 일반적으로 테이블 간 Join도 불가능합니다.
 
NoSQL은 점점 빅데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가함에 따라
RDBMS에 단점인 성능을 향상시키기 위해서는 장비가 좋아야 하는 Scale-Up의 특징이 비용을 기하급수적으로 증가되기 때문에,
데이터 일관성은 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장하였습니다.
 
NoSQL로 보통 Document 기반의 MongoDB를 많이 알지만, MongoDB는 NoSQL한 종류로 NoSQL은 다양한 형태 ( 4가지 )의 저장 기술을 지원합니다.
이 다양한 형태의 저장기술은 RDBMS 스키마에 맞추어 데이터를 관리해야 된다는 한계를 극복하고 수평적 확장성(Scale-out)을 쉽게 할 수 있다는 장점을 가지고 있습니다.

 

5. Primary Key와 Foreign Key란??


결과: Primary Key는 테이블에서 각 행을 고유하게 식별하고, Foreign Key는 다른 테이블과의 관계를 설정하는 데 사용됩니다.


  과정:
• Primary Key: 한 테이블에서 각 행을 유일하게 식별하는 값으로, 중복될 수 없고 NULL 값을 가질 수 없습니다. 각 테이블에는 하나의 Primary Key만 설정할 수 있으며, 이를 통해 데이터를 확실하게 식별합니다.
• Foreign Key: 한 테이블이 다른 테이블과 관계를 맺을 때 사용되는 키로, 다른 테이블의 Primary Key를 참조합니다. Foreign Key를 통해 테이블 간의 연관성을 유지하고, 참조 무결성을 보장합니다.


마무리:
Primary Key는 데이터를 고유하게 식별하고 Foreign Key는 테이블 간의 관계를 설정해 데이터의 일관성과 무결성을 유지합니다.

 

CS

 

1. Primary Key (기본키)
정의:
Primary Key는 데이터베이스 테이블에서 각 레코드를 고유하게 식별하는 열 또는 열들의 집합입니다. Primary Key는 반드시 유일하고, NULL 값을 가질 수 없습니다.

특징:

유일성(Unique): Primary Key는 각 레코드를 고유하게 식별하므로 중복될 수 없습니다.
NULL 불허: Primary Key는 반드시 값을 가져야 하며, NULL 값이 허용되지 않습니다.
식별성(Identification): 테이블 내에서 레코드를 고유하게 식별할 수 있어야 합니다.
예시:
예를 들어, 학생 테이블에서 학번을 Primary Key로 설정하면, 각 학생의 학번은 중복될 수 없으며 모든 학생의 학번은 고유해야 합니다.

CS 관점:

데이터 무결성: Primary Key는 데이터 무결성을 유지하며, 중복된 데이터를 허용하지 않기 때문에 테이블의 정확한 상태를 유지할 수 있습니다.
인덱싱(성능 최적화): 대부분의 데이터베이스는 Primary Key에 자동으로 인덱스를 생성하여, 검색 성능을 향상시킵니다.

 


2. Foreign Key (외래키)
정의:
Foreign Key는 한 테이블의 필드가 다른 테이블의 Primary Key를 참조하는 키입니다. Foreign Key는 테이블 간의 관계를 정의하고, 참조 무결성을 보장합니다.

특징:

참조(Relationship): Foreign Key는 한 테이블이 다른 테이블과 관계를 맺도록 도와줍니다.
참조 무결성: Foreign Key를 통해 참조된 테이블의 데이터가 유효한지 보장할 수 있습니다. 예를 들어, 외래키가 참조하는 Primary Key 값이 삭제되거나 변경될 때 그에 맞게 외래키도 업데이트됩니다.
예시:
학생 테이블과 수강 테이블이 있을 때, 수강 테이블에서 학번을 Foreign Key로 설정하면, 해당 학생이 수강한 과목들이 학생 테이블의 학번과 연결됩니다.

CS 관점:

데이터 무결성 보장: Foreign Key는 참조 무결성을 보장하며, 참조된 레코드가 삭제되거나 변경될 때 데이터 일관성을 유지할 수 있습니다.
관계형 데이터베이스의 핵심: Foreign Key는 여러 테이블 간의 관계를 설정하는 데 중요한 역할을 하며, 이를 통해 복잡한 데이터 모델링이 가능해집니다.