[ 백엔드 면접 준비 ] 백엔드 면접 준비 _ 02.
Ⅰ. 데이터 베이스 정규화.
▣ 정규화의 중요성 및 목표.
∇ '데이터베이스 설계' 에서 "정규화"는
중복 데이터를 최소화하고 데이터 무결성을 유지하기 위한 핵심 기술입니다.
∇ 정규화의 주된 목표는 테이블 간에 중복된 데이터가 존재하지 않도록 하는 것!!
-> 데이터의 일관성을 높이고, 데이터베이스의 유지보수성을 향상시킬 수 있습니다.
{ 실무에서는 일반적으로 제1, 제2, 제3 정규화까지만 다루는 경우가 많습니다. }
▣ 정규화 단계.
1. 제1정규화 ( 1NF )
▶ 테이블의 모든 컬럼은 원자값을 가져야만 합니다.
▶ 칼럼은 더 이상 분해할 수 없는 단일 값을 가져야 하며,
반복 그룹이나 다중 값이 포함되어서는 안됩니다.
==>> 데이터의 구조를 단순화하고, 각 데이터의 항목을 명확하게 정의 가능 !!
2. 제2정규화 ( 2NF )
▶ 테이블의 모든 컬럼은 기본키에 대해 '완전 함수적 종속'을 만족해야 합니다.
▶ 기본키의 일부에만 의존하는 컬럼이 없어야 하며,
모든 비기본키 컬럼은 기본키 전체에 의존해야 합니다.
==>> 데이터의 중복을 줄이고, 데이터의 무결성을 강화 가능
3. 제3정규화 ( 3NF )
▶ 테이블의 모든 컬럼은 기본키에 대해 이행적 종속을 만족하지 않아야 합니다.
ex) 이행적 종속이란 :: A->B, B->C 성립할 때, A -> C가 성립하는 것.
▶ 비기본키 컬럼이 다른 비기본키 컬럼에 의존하지 않도록 하여서,
데이터의 중복을 더욱 줄이고 데이터의 무결성을 유지합니다.
★ 결론.
: '정규화'는 데이터베이스 설계에서 필수적인 과정으로,
데이터의 중복을 줄이고 무결성을 유지하는데 중요한 역할을 합니다.
이러한 정규화 과정을 통해 데이터베이스의 효율성과 안전성을 높일 수 있습니다.
Ⅱ. 데이터 베이스 비정규화.
◇ 비정규화는 '데이터의 중복'을 허용해서, 데이터의 조회 성능을 향상시키기 위해 사용됩니다.
=> 비정규화는 중복을 허용하여서 데이터의 조회 성을 향상시키기 위해 사용됩니다.
일반적으로 '정규화' 과정에서는 데이터의 중복을 최소화하고 무결성을 유지하기 위해
테이블을 여러 개로 나누게 되는데, 이로 인해 조인 연산이 빈번하게 발생합니다.
-> 조인 연산은 데이터베이스의 성능에 영향을 미칠 수 있으며,
특히 대량의 데이터가 있을 경우 성능 저하를 초래할 수 있습니다.
★ 조회 성능이 중요한 기능이 들어간 앱의 경우에는 비정규화를 고려하는 것이 필요합니다.
★ 비정규화의 장점.
1. 조회 성능 향상
: 데이터 중복을 허용하여 조인 연산을 줄이므로, 조회 속도가 빨라질 수 있습니다.
2. 단순한 쿼리문.
: 데이터가 하나의 테이블에 모여 있어서 쿼리가 간단해지며,
복잡한 조인 없이 데이터를 쉽게 조인 가능합니다.
3. 데이터 접근 최적화
: 자주 조회되는 데이터를 한 곳에 모아두면 캐시 효율성이 증가하고,
I/O 작업이 줄어들어서 성능이 개선됩니다.
★ 비정규화의 단점.
1. 데이터 중복
: 비정규화는 데이터 중복을 초래할 수 있으며,
이는 저장 공간을 낭비하고 데이터 일관성을 해칠 수 있습니다.
2. 유지보수 어려움.
: 중복된 데이터가 여러 곳에 존재하는 경우,
데이터 업데이트 시 모든 위치에서 변경해야 하므로 유지보수가 복잡.
3. 무결성 문제
: 데이터 중복으로 인해 무결성 제약 조건을 유지하기 어려워질 수 있으며
이는 데이터의 신뢰성에 영향을 미칠 수 있습니다.
★ 결론.
: '비정규화'는 성능 최적화를 위한 유용한 전략이지만,
데이터 무결성 * 유지보수의 복잡성을 고려해야만 합니다.
비정규화를 사용할 때는 데이터베이스의 사용 목적과 요구사항을 신중하게 평가하는 것이 중요!
Ⅲ. 데이터 베이스의 인젝션 ( Database Injection )
※ 데이터베이스 인젝션은 웹 페이지의 입력을 통해 SQL문에 악의적인 코드를 삽입하는 기법.
- 이는 DB를 파괴할 수 있으며, SQL 인젝션은 가장 일반적인 웹 해킹 기법입니다.
- 공격자는 SQL 인젝션을 통해 일반적으로 검색할 수 없는 데이터를 검색할 수 있습니다.
-> 다른 사용자의 데이터 또는 앱이 접근할 수 있는 다른 데이터를 포함할 수 있습니다.
Ⅳ. ORM이 편하고 좋은데, SQL이 필요한 이유.
☆ ORM (Object-Relational Mapping ) 은 데이터베이스와 객체 지향 프로그래밍 언어 간의 매핑을 쉽게 해주어서
개발자가 SQL 쿼리를 직접 작성하지 않고도 데이터베이스 작업을 수행 가능하도록 해줍니다.
★ 다만 ! 그럼에도 불구하고 SQL을 알아야 하는 중요한 이유가 있습니다.
1. 성능 최적화 측면의 유연성
- ORM은 편리하지만, 복잡한 쿼리나 대량의 데이터를 처리할 때 성능이 저하될 수 있습니다.
SQL문을 이해하고 있으면 필요한 경우 직접 최적화된 쿼리를 작성하여 성능을 개선 가능합니다.
2. 디버깅 측면.
- ORM을 사용할 때 발생하는 문제를 해결하기 위해 SQL 쿼리를 이해하는 것이 중요합니다.
SQL문을 알면 ORM이 생성하는 쿼리를 분석하고, 문제의 원인을 파악하는데 도움이 됩니다.
3. ORM의 한계 극복[복잡한 쿼리 처리].
- ORM은 기본적인 CRUD 작업에는 유용하지만,
복잡한 조인문이나 서브쿼리와 같은 고급 SQL기능을 사용할 때는 한계가 있습니다.
SQL문을 알면 이러한 복잡한 쿼리를 직접 작성할 수 있습니다.
-> 고도로 최적화된 복잡한 쿼리 작성
-> 성능 튜닝이 필요한 상황
-> 특정 DB의 고유한 기능 활용.
4. DB 설계 이해.
- SQL을 배우면 DB의 작동 원리와 데이터 모델링에 대해서 더 깊이 이해할 수 있습니다.
-> 데이터 구조 설계 능력 향상
-> 효율적인 데이터 저장 및 검색 방법 학습
-> 관계형 DB의 근본적인 작동 방식 이해.
5. 기술적 유연성[다양한 데이터베이스 활용]
- ORM은 특정 데이터베이스에 종속적일 수 있습니다.
SQL을 알면 다양한 데이터베이스 시스템에서 작업할 수 있는 유연성을 가질 수 있습니다.
이는 ORM에 과도하게 의존하지 않고 다양한 데이터베이스 환경에 대응할 수 있는 능력을 키울 수 있습니다.
Ⅴ. RDBMS와 NoSQL은 언제 사용하는 것이 좋을까?
◇ RDBMS 사용이 적합한 경우.
● 데이터 구조가 명확하고 변경될 여지가 없는 경우.
● 복잡한 관계를 가진 데이터를 다룰 때
● 데이터 무결성과 일관성이 매우 중요한 시스템일 때
● 트랜잭션 처리가 빈번한 시스템.
● 정확한 데이터 업데이트가 자주 필요한 경우.
◇ NoSQL 사용이 적합한 경우.
● 데이터 구조가 유동적이고 확장 가능성이 높은 경우.
● 대규모 분산 시스템 환경.
● 빅데이터 처리와 실시간 웹 애플리케이션
● 데이터 업데이트가 적고 조회가 많은 시스템.
● 수평적 확장(Scale-out)이 필요한 경우.
'면접준비[프론트,백,데이터,CS] > InterView 준비 [ 백엔드 ]' 카테고리의 다른 글
[ 백엔드 면접준비 : Java&Kotlin + SpringBoot ] Java 면접 질문 정리_02 (2) | 2024.12.20 |
---|---|
[ 백엔드 면접준비 : Java&Kotlin + SpringBoot ] Java 면접 질문 정리_01 (0) | 2024.12.20 |
[ 백엔드 면접 준비 ] 백엔드 면접 준비 _ 01. (2) | 2024.12.13 |
[ 백엔드 면접 준비 ] 블로킹 vs 논블로킹 // 동기 vs 비동기 (0) | 2024.12.09 |
[ 백엔드 면접 준비 ] REST & REST API & RESTfull API 란?? (2) | 2024.12.09 |