23.10.20 항해 99 16기 기술면접 대비
1. NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 들어 설명해주세요.
1) RDBMS 란?
관계형 데이터베이스 관리 시스템이다 RDB 를 관리하는 시스템이고 RDB 는 관계형 데이터 모델을 기초로 두고
모든 데이터를 2차원 테이블 형태로 표현하는 DB 이다
따라서, RDBMS 는 다른 테이블들과 관계를 맺고 모여있는 집합체라고 할 수 있다 이런 관계를 나타내기 위해
외래 키 (foreign key) 라는 것을 사용한 테이블 간 Join이 가능하다는게 가장 큰 특징이다
(1) 장점
a) 정해진 스키마에 따라 데이터를 저장해야 하므로 명확한 데이터 구조를 보장
b) 각 데이터를 중복없이 한 번만 저장 할 수 있다
(2) 단점
a) 테이블간 관계를 맺고 있어 시스템이 커질 경우 join 문이 많은 복잡한 쿼리가 만들어 질 수 있다
b) 성능 향상을 위해서는 Scale-up 만을 지원하기 때문에 비용이 기하급수적으로 늘어날 수 있다
c) 스키마로 인해 데이터가 유연하지 못하다 변경될 경우 번거롭고 어렵다
2) NoSQL 란?
테이블 간 관계를 정의하지 않는다 데이터 테이블은 하나의 테이블이며 따라서 일반적으로 테이블 간 Join 도 불가능
빅데이터의 등장으로 데이터와 트래픽이 기하급수적으로 증가함에 따라 데이터 일관성은 포기하되 비용을 고려하여
여러대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장했다
가장 유명한 것은 MongoDB 이지만 NoSQL의 한종류 이며 NoSQL 은 다양한 형태의 저장 기술을 지원한다.
(1) 종류
a) Key-Calue Database
(a) 데이터가 Key 와 Value의 쌍으로 저장됨
(b) Key 는 Value 에 접근하기 위한 용도이며 어떠한 데이터라도 담을 수 있다 이미지나 비디오도 가능
(c) 간단한 API 를 제공하는 만큼 질의의 속도가 굉장히 빠른편
(d) Redis, Riak, Amazon Dynamo DB 등이 있다
b) Document Database
(a) Key 와 Document 의 형태로 저장
(b) Key-Value 모델과 다른 점이라면 Value 가 계층적인 형테인 Document 로 저장됨
객체지향에서의 객체와 유사하며 하나의 단위로 취급되어 저장된다 다시말해 하나의 객체를 여러 테이블에
나눠 저장 할 필요가 없어진다
(c) 객체-관계 매핑이 불필요하다 객체를 바로 Document 의 형태로 저장가능
(d) 검색에 최적화되어 있는데 이는 Key-Value 모델의 특징과 통일
(e) 사용이 번거롭고 쿼리가 SQL과는 다른 단점이 있다
(f) MongoDB, CouthDB 등이 있다
c) Wide Column Database
(a) Column-family Model 기반
(b) Key 에서 필드를 결정함
Key 는 Row (키 값) 와 Column-family, Column-name 을 가진다 연관된 데이터들은 같은 Column-family
안에 속하며 각자의 Column-name 을 가진다 관계형 모델로 설명하자면 어트리뷰트가 계층적인 구조를
가지고 있는 셈이다 이렇게 저장된 데이터는 하나의 커다란 테이블로 표현이 가능하며 질의는
Row, Column-family, Column-name 을 통해 수행된다
(c) HBase, Hypertable 등이 있다
d) Graph Database
(a) 데이터를 Node 와 Edge, Property 와 함께 그래프 구조를 사용하여 표현하고 저장함
(b) 개체와 관계를 그래프 형태로 표현한 것이므로 관계형 모뎅리라고 할 수 있고 데이터 간의 관계가 탐색의
키일 경우 적합
(c) 페이스북이나 트위터 같은 소셜 네트워크에서 (내 친구의 친구를 찾는 질의 등) 적합하고, 연관된 데이터를
추천해주는 추천 엔진이나 패턴 인식 등의 데이터베이스로도 적합
(d) Neo4J 가 있다
(2) 장점
a) 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있다
b) 언제든 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다
c) 데이터 분산이 용이하며 성능 향상을 위한 Scale-up과 Scale-out 모두 가능
(3) 단점
a) 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경 될 경우 수정을 모든 컬렉션에서 수행해야 함
b) 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않으며 데이터 구조를 결정하기가 어려울 수 있다.
* 기본키 (Primary Key)
1) 데이터 테이블에 있는 유일하게 구분되는 데이터 키이다
2) 유일한 값이기 때문에 중복 값을 가질 수 없다
3) 공백을 가질 수 없다
* 외래키 (Foreign Key)
1) 한 테이블과 참조되는 다른 테이블 간의 연결되는 기본키 Column
2) 다른 기본키를 참조하는 속성 또는 속성들의 집합
3) 참조관계의 기본키와 같은 속성
* 스키마
개체의 특성을 나타내느 속성(Attribuet), 속성들의 집합으로 이루어진 개체(Entity), 개체 사이에 존재하는
관계(Relation)에 대한 정의와 이들이 유지해야 할 제약 조건들을 기술한 것
2. mvc 패턴에 대해서 설명해주세요.
1) MVC 패턴이란?
소프트웨어를 구성하는 요소들을 분리함으로써 코드의 재사용성과 유지보수성을 높이고 협업을 용이하게 하는
소프트웨이 디자인 패턴중 하나이다
2) 구성요소
(1) Model
데이터와 비즈니스 로직 담당 데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행
(a) 규칙
a) 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다
b) View 나 Controller에 대해서 어떠한 정보도 알지 말아야 한다
c) 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야 한다
(2) View
사용자 인터페이스를 담당 사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현
(a) 규칙
a) Model이 가지고 있는 정보를 따로 저장해서는 안된다
b) Model 이나 Controller 와 같이 다른 구성 요소를 몰라야 한다
c) 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야 한다
(3) Controller
Model과 View 사이의 상호작용을 조정하고 제어 사용자의 입력을 받아 Model에 전달하고 결과를 바탕으로
View를 업데이트
(a) 규칙
a) Model 이나 View에 대해서 알고 있어야 한다
b) Model 이나 View의 변경을 모니터링 해야 한다