본격적으로 Spring 최종 팀프로젝트를 시작하면서, 매일 개념을 다시 한 번 다지는 시간을 가져보기로 했다.
NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 들어 설명하라.
- 관계형 데이터베이스 (Relational Database): RDBMS는 데이터를 테이블 형태로 저장하며, 이러한 테이블 간의 관계를 통해 데이터를 구성함.
- Schema (스키마): RDBMS에서는 데이터의 구조가 사전에 정의된 스키마에 따라야 합니다. 이는 데이터베이스 테이블, 열, 데이터 유형 등을 정의하는 데 사용됨.
- Table (테이블): 데이터가 행과 열의 형태로 구성된 테이블에 저장됩니다. 각 행은 레코드를 나타내며, 각 열은 해당 레코드의 속성을 나타냄.
- SQL (Structured Query Language): RDBMS에서 데이터를 조작하기 위한 표준화된 언어로, SQL을 사용하여 데이터 검색, 삽입, 업데이트, 삭제 등의 작업을 수행할 수 있음.
<장점>
- 데이터 일관성: RDBMS는 ACID 속성을 준수하여 데이터 일관성을 보장.
- 복잡한 쿼리 처리: 복잡한 쿼리를 처리하고 다양한 연산을 수행하는 데 효과적.
<단점>
- 확장 어려움: 수평적 확장이 어려워 대규모 데이터 처리에 한계가 있음.
- 고정된 스키마: 스키마가 고정되어 있어 데이터 모델 변경이 어려울 수 있음.
NoSQL (비관계형 데이터베이스):
- 대용량데이터 (Big Data): NoSQL은 대용량 및 분산 데이터를 처리하는 데 특화됨.
- 비규격화 (Schema-less): NoSQL은 유연한 데이터 모델을 제공하며, 스키마가 사전에 정의되지 않아도 데이터를 저장하고 검색할 수 있음.
- Key, Value: NoSQL 데이터베이스는 주로 Key-Value, Document, Column-family, 또는 Graph 형태의 모델을 사용하여 데이터를 저장.
<장점>
- 유연성: 스키마의 자유로움으로 데이터 모델을 쉽게 변경하고 대처할 수 있음.
- 확장성: 수평적 확장이 용이하며, 대규모 데이터 처리에 효과적.
<단점>
- 일관성 보장의 어려움: NoSQL은 일관성, 가용성, 분할 허용성 중에서 선택할 수 있는데, 모든 속성을 동시에 보장하기 어려울 수 있음.
- 표준화 부족: 특정 NoSQL 데이터베이스 간에 표준화가 부족하여 개발자들이 각각의 데이터베이스에 맞게 학습해야 할 필요가 있음.
MVC패턴에 대해서 설명하라.
Spring에서의 MVC 패턴은 Model, View, Controller 세 가지 구성 요소로 이루어져 있음. 이러한 패턴은 소프트웨어를 구조화하고 각 역할을 분리하여 유지보수성을 향상시키는 데 도움이 됨.
Model (모델)
-
역할: 비즈니스 로직과 데이터 처리를 담당.
-
특징
1) 데이터의 상태를 나타내는 객체 또는 클래스로 구성.
2) 데이터베이스와의 상호 작용, 데이터의 가공 및 처리 등을 담당.
3) View나 Controller에 대한 정보를 포함하지 않아야 함.
ex. 예시(Spring) - JPA 엔터티 클래스, 비즈니스 로직을 담당하는 서비스 클래스 등.
View (뷰)
-
역할: 사용자에게 보여지는 화면을 담당.
-
특징
1) 사용자 인터페이스를 나타내는 부분으로, HTML, JSP, Thymeleaf 등을 통해 구현.
2) 사용자에게 정보를 표시하고 사용자의 입력을 받아 Controller에 전달.
3) Model의 데이터를 표시하기 위해 Model과 상호 작용할 수 있습니다.
ex. 예시(Spring) - Thymeleaf, JSP, HTML 등의 템플릿 엔진을 사용하여 구현된 뷰 페이지가 해당.
Controller (컨트롤러)
-
역할: 사용자의 입력을 받아 해당 요청에 대한 처리를 진행하고, 그 결과를 Model 또는 View에 전달합니다.
-
특징:
1) 클라이언트로부터 요청을 받아 그에 따른 비즈니스 로직을 호출하고, Model에 데이터를 전달합니다.
2) 사용자의 입력을 검증하고 필요한 서비스를 호출하여 비즈니스 로직을 수행합니다.
3) 처리 결과를 View에 전달하여 사용자에게 응답합니다.
ex. 예시(Spring) - Controller 어노테이션을 사용한 컨트롤러 클래스가 해당. 사용자의 요청을 처리하고, 비즈니스 로직을 호출하여 결과를 Model에 담아 View에 전달.
이러한 MVC 패턴은 각각의 역할을 분리함으로써 시스템을 모듈화하고 유연성을 높이며, 유지보수 및 확장이 쉽도록 구조화하는데 도움을 줌.