본문 바로가기

항해99_10기/105일의 TIL & WIL

[기술면접 스터디] [230302] 다형성, 관계형 vs NoSQL

Q1. 오버로딩과 오버라이딩의 차이점은 무엇인가요?
오버로딩은 같은 이름을 둔 메서드를 메서드의 타입, 매개변수의 유형, 개수 등으로 여러개를 두는 것을 말합니다. 오버로딩은 컴파일 중 발생하는 정적 다형성입니다.
자바스크립트에는 매개변수의 타입이나 개수, 리턴 값이 유연하기 때문에 없는 개념이지만, 분기처리를 통해 구현할 수 있습니다.
오버라이딩은 상위 클래스로부터 상속받은 메서드를 하위 클래스에서 재정의하는 것을 의미합니다. 오버라이딩은 런타임 중 발생하는 동적 다형성입니다.

 

Q2. RDB와 NoSQL은 무엇인가요? 차이점 또는 장단점 위주로 설명해주세요.
  • RDBMS는 테이블의 형태의 정형화된 데이트를 저장하는데 주로 사용되고, SQL 언어로 조작합니다. 관계형 DB에는 MySQL, PostgreSQL, 오라클 등이 대표적이고, SQL 문법을 기본으로 하지만, 제품에 특화시킨 SQL을 사용하기도 합니다.
    • 장점으로는 ACID 순응적인 트랜잭션이 가능하고, 데이터 무결성이 필요할때 사용할 수 있습니다. 또, 정규화를 통해 데이터 이상현상을 해결하고, 저장공간을 효율적으로 사용할 수 있습니다.
    • 단점으로는 DB를 설계할때 고정된 테이블을 서비스 중간에 변경하기 쉽지 않습니다. 또, DB의 성능이 테이블의 복잡도와 밀접하게 관련있기 때문에, 테이블이 복잡해질수록 성능또한 떨어지게 됩니다. 마지막으로, RDBMS는 하나의 머신에서 돌아도록 설계되었기 때문에 확장성이 떨어집니다. (비용의 문제가 있기는 하지만, 클라우드로 이 문제를 극복할 수 있습니다.)
    • MySQL은 전세계에서 가장 많이 쓰이는 RDBMS의 한 종류입니다. 기본 SQL 문법을 사용하고, C와 C++로 만들어졌으며 MyISAM 인덱스 압축 기술이 적용되었습니다. B-트리 기반의 인덱스를 제공하고, 스레드 기반의 메모리 할당 시스템, 매우 빠른 조인, 최대 64개의 인덱스를 제공합니다. 대용량 데이터 배이스를 위해 설계되어 있고, 롤백과 커밋, 이중 암호 지원 보안 등의 기능을 제공합니다. 또, 쿼리 캐쉬 기능을 제공합니다. 쿼리 캐시 기능을 사용하면, 해당 쿼리문에 대한 전체 결과 집합을 별도의 캐쉬 테이블에 저장하여 가지고 있고, 사용자가 동일한 쿼리를 작성하면 서버는 바로 캐시의 출력만 표시하여 효율적입니다. 제가 수행한 프로젝트에서도 이 쿼리 캐시 기능을 사용하여, 게임의 문제로 출제되는 keyword 데이터 반복 호출 문제를 해결하였습니다.
  • NoSQL은 not only SQL의 약자로, SQL을 사용하지 않는 데이터베이스를 의미합니다. 대표적으로는 mongoDB와 redis가 있습니다. document, key-value, graph, wide-column 데이터베이스 등의 데이터 모델을 지원합니다.
    • 장점으로는 데이터의 형태가 정해져 있지 않아 데이터의 형태가 계속해서 변할 때 사용하기 좋습니다. 빅데이터, 머신러닝 등에 주로 사용됩니다. 또, RDBMS와는 달리 스케일 아웃에 의한 확장이 용이합니다. 비용적인 측면에서 장점이 있습니다. 대용량 데이터를 처리하는데 성능이 뛰어나며, 여러 대의 백업 서버 구성이 가능하여 장애 발생 시에도 무중단 서비스가 가능합니다.
    • 단점으로는 데이터 일관성이 떨어집니다. 데이터가 여러 컬렉션에 걸쳐 중복되어 있는 경우, 수정 발생시에 모든 컬렉션에서 수행해야 해서 번거롭고 느립니다.
    • MongoDB JSON을 통해 데이터에 접근할 수 있고, BinayJSON 형태로 저장됩니다. 키-밸류 데이터 모델에서 확장된 도큐먼트 기반의 DB입니다. 
      • 장점으로는 확장성이 뛰어나며, 빅데이터를 저장할 때 성능이 좋고, 고가용성 샤딩, 리플리카셋을 지원합니다. 또, 스키마를 정해 놓지 않고 데이터를 저장할 수 있기 때문에 다양한 도메인의 데이터베이스를 기반으로 분석하거나 로깅 등을 구현할 때 강점을 보입니다.
      • 특징으로는 도큐먼트를 생성할때, 다른 컬렉션에서 중복된 값을 지니기 힘든 유니크한 값인 ObjectID가 생성됩니다. ObjectID는 기본키로, 유닉스 시간 기반의 타임스탬프(4바이트), 랜덤 값(5바이트), 카운터(3바이트)로 이루어져 있습니다.
    • Redis는 인메모리 데이터베이스이자, 키-밸류 데이터 모델 기반의 DB입니다. 기본 데이터 타입은 문자열이며, 최대 512MB까지 저장할 수 있습니다. 이외에도 해시와 셋 등을 지원합니다.
      • 특징으로는 Pub/Sub 기능을 제공하여 채팅 시스템, 캐시 기능을 구현할 수 있고, 단순 세션 정보 관리나 정렬된 셋 자료 구조를 이용한 실시간 순위표 등에 사용합니다.