면접준비[프론트,백,데이터,CS]/InterView 준비 [ 백엔드 ]

[ 백엔드 면접 준비 ] 백엔드 면접 준비 _ 02.

안다미로 : Web3 & D.S 2024. 12. 16. 00:00

 

 

 

 

[ 백엔드 면접 준비 ] 백엔드 면접 준비 _ 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)이 필요한 경우.