TIL/CS

기술면접 1일차 질답

헤르로우워르드 2024. 7. 18. 10:26

 

대략적이 이해 :

RDB는 엄격한 schema로 인해 데이터 중복이 없기 때문에 데이터 update가 많을 때 유리하고, NoSQL은 데이터 중복으로 인해 update 시 모든 컬렉션에서 수정이 필요하기 때문에 update가 적고 조회가 많을 떄 유리하다.

No SQL 과 RDBMS의 차이

 

RDBMS

RDBMS : 관계형 데이터베이스 관리 시스템의 약자

 

RDB : 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터 베이스

 

관계를 나타내기 위한 개념으로 외래 키를 사용

 

테이블 간의 관계에서 외래 키를 이용하여 테이블끼리 Join이 가능하다는 특징이 존재

 

SQL이라는 언어를 통해 정교한 검색 쿼리를 통해 데이터를 다룬다

Transaction 을 통해 작업의 완전성을 보장

반드시 스키마 규격에 맞춰야 한다(제약조건) - 유연한 데이터 저장은 제한됨

수직 확장만 가능하다

 

  • 장점
    • 정해진 스키마에 따른 데이터 저장 제약사항으로 인해 명확한 데이터 구조를 보장한다
    • 데이터 중복 없이 한 번만 저장

 

  • 단점
    • 시스템이 커질수록 Join문이 많은 복잡한 쿼리가 만들어 질수 있다
    • 수평적 확장이 까다로워 비용이 큰 수직적 확장을 사용해야한다 (서버의 성능을 올려야하는 Scale Up 이 사용됨)

수직적 확장(Scale-up) va 수평적 확장(Scale-out)

데이터베이스와 비교하여 NoSQL의 특징은 ACID, Transaction을 지원하지 않는다는 것이다. RDB는 ACID와 Transaction을 보장하기 위해 수평적 확장이 쉽지가 않다. 또한, RDB의 경우 multiple server로 수평적 확장을 하게 되면 join을 하기 위해 상당히 복잡한 과정이 필요하다.

 

RDB도 수평적 확장이 가능하지만 NoSQL에 비해 훨씬 복잡하다. RDB를 수평적 확장하기 위해선 샤딩(sharding)(데이터가 수평적으로 분할되고 기기의 모음 전반에 걸쳐 분산되는 경우)이 필요하다. ACID 준수를 유지하면서 RDB를 샤딩하는 것은 매우 까다로운 작업이다.

 

모범답안 :

 

"RDBMS RDBMS는 스키마 기반의 데이터베이스로, 데이터 구조가 사전에 정의된 스키마에 따라 정해집니다. 관계형 모델을 사용하여 테이블 간의 관계를 통해 데이터를 저장하고 관리하며, 구조화된 쿼리 언어인 SQL을 사용합니다.

장점으로는 첫째 원자성, 일관성, 고립성, 지속성이라는 ACID 속성을 보장하여 데이터의 무결성을 유지합니다. 둘째데이터 구조를 정의할 수있어 복잡한 조인 및 서브쿼리를 지원합니다 셋째 오랜기간 사용되어 안정적이며 여러 도구의 지원을 받을수있습니다

단점으로는 첫째 수직적 확장은 가능하지만, 수평적 확장은 어려움이 있습니다. 또한, 스키마가 고정되어 있어 데이터 구조를 변경하는 것이 어렵습니다 둘째 라이선스 비용과 고성능 하드웨어 요구로 인해 비용이 많이 들 수 있습니다

핵심 키워드 -> ✅ 무결성 , 복잡한 쿼리 지원 , 안정성 및 도구지원 ↑ / ❗️ 유연성 ↓ , 비용 ↑

 

NoSQL NoSQL은 스키마가 없거나 유연하여 데이터 구조를 쉽게 변경할 수 있는 데이터베이스입니다. 다양한 데이터 모델을 지원하며, 문서, 키-값, 열, 그래프 등의 모델을 통해 데이터를 저장할 수 있습니다

장점으로는 첬쩨 유연한 스키마를 들 수 있습니다. 데이터 구조를 유연하게 변경할 수 있어 다양한 데이터 유형을 쉽게 저장할 수 있습니다. 둘째 대규모 트래픽과 빅데이터를 효율적으로 처리할 수 있어 고성능을 자랑합니다 셋째 분산 시스템을 통해 수평적 확장이 용이하여 클러스터를 통해 대규모 데이터를 처리할 수 있습니다.

단점으로는 첫째 데이터 무결성을 유지하기 어려운 단점이 있습니다. 둘째 RDBMS에 비해 복잡한 쿼리를 지원하기 어려운 경우가 많습니다. 셋째 RDBMS에 비해 상대적으로 새로운 기술이기 때문에, 도구와 지원이 제한적일 수 있습니다.

핵심 키워드 ->✅ 유연성, 대규모처리 ↑ / ❗️ 무경성 유지 , 복잡한쿼리 지원 , 도구지원 ↓"

 

MVC패턴에 대해

MVC 패턴은 사용자 인터페이스로부터 비즈니스 로직을 분리하기 위한 소프트웨어 디자인 패턴으로, 애플리케이션의 구성 요소를 Model-View-Controller로 분리하여 개발하는 방법입니다.

따라서 역할 분리로 인해 낮은 결합도로 모듈화할 수 있고, 코드의 재사용성이 높아지며, 변경이 필요한 부분을 쉽게 파악할 수 있기 때문에 서비스를 유지보수 비용을 줄일 수 있습니다.

Model 데이터를 관리하는 역할을 합니다. 컨트롤러가 호출을 하면 DB와 연동하여 데이터 검색, 저장, 삭제 업데이트와 같은 비즈니스 로직을 처리하는 역할을 합니다. 입력 출력 보다는 저장 조회 View view는 사용자 인터페이스로, 컨트롤러가 모델로부터 데이터를 요청하면 뷰는 해당 데이터를 가져와서 사용자에게 화면에 출력합니다.

Controller 컨트롤러는 독립적인 모델과 뷰 사이를 이어주는 인터페이스 역할을 합니다. 뷰에서 전달한 이벤트에 따라 모델이 애플리케이션 상태를 관리할 수 있게 해주며, 모델이 가진 데이터를 뷰에게 전달해서 화면을 만듭니다.

정리하면 모델은 데이터를 처리하고 뷰는 데이터를 사용자에게 제공하며 컨트롤러는 둘 사이의 상호 작용을 관리하여 올바른 데이터를 가져와 적절하게 표시하도록 합니다.

MVC 패턴을 사용하여 관심사 분리로 인해 애플리케이션은 더욱 모듈화되고, 유지 관리 및 확장 가능해집니다.