[Interview] 면접 준비 6일차

Kim Hyen Su·2024년 5월 28일

면접질문

목록 보기
6/27
post-thumbnail

면접 준비

질문


NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 들어 설명해주세요.

📜 참고 포스팅

RDBMS는 정해진 스키마 형태에 따라 명확한 데이터 구조를 보장하지만, 이로 인해 스키마 변경이 어려워 유연성이 떨어집니다. 하나의 테이블 내 중복된 튜플이 존재하지 않습니다. 하지만, 시스템이 커질 경우 JOIN문이 많아져 복잡한 쿼리가 발생합니다. 또한, 성능 향상을 위해서 Scale-up만 지원합니다.

NoSQL(Not Only SQL)은 테이블 간의 관계를 정의하지 않습니다.
NoSQL은 데이터의 추세가 단순한 형태의 대용량 데이터라는 특징을 띄고, 대용량 트래픽을 감당하기 위해 기존의 RDBMS에서 Scale-up을 통한 성능 개선은 비용이 기하급수적으로 증가될 것으로 예상되었기 때문에 데이터의 일관성을 포기화되 데이터를 여러대에 분산하여 저장하는 Scale-Out을 목표로 NoSQL이 등장했습니다.

NoSQL에서는 스키마가 없기 때문에 유연하며, 자유로운 데이터 구조를 가질 수 있습니다. 또한, 언제든지 저장된 데이터를 조정하고 새로운 필드 추가가 가능합니다.
데이터 분산이 용이하여 성능향상을 위한 Scale-up과 Scale-out이 모두 가능합니다.

하지만, 데이터 중복 문제가 발생하며, 이로인해 데이터 변경 시 해당 데이터를 갖는 모든 곳에 데이터를 수정해줘야 합니다. 데이터 구조가 명확하지 않아 구조를 정하는 것이 어려울 수 있습니다.

===

  • 스키마

    • RDBMS는 명확한 데이터 구조를 보장합니다. 하지만 한번 생성된 스키마의 변경이 어려워 유연성이 떨어집니다.
    • NoSQL은 스키마가 없어 자유로운 데이터 구조를 가집니다. 하지만 정해진 구조가 없어 데이터 구조 결정이 어렵습니다.
  • 확장성

    • RDBMS는 스케일업만 지원합니다.(트레픽이 많아지면, 비용이 기하급수적으로 증가)
    • NoSQL은 스케일업과 스케일아웃 모두 지원합니다.
  • 테이블 간의 관계성

    • RDBMS는 중복없이 한번만 저장이 가능합니다. 하지만, 시스템 규모가 커짐에 따라 JOIN이 많아지는 복잡한 쿼리가 만들어 질 수 있습니다.
    • NoSQL은 중복이 다량 발생하며, 중복 데이터 변경 시 모든 컬렉션에서 수정해줘야 합니다.
  • 데이터 처리

    • 데이터 수정이 RDBMS가 더 빠릅니다.
  • 사용되는 상황

    • RDBMS는 데이터 구조의 변경 여지가 없는 경우 사용하는 것이 좋고, 복잡한 형태의 트랜잭션 처리와 쿼리가 필요한 경우 사용하는 것이 좋습니다. 또한, 데이터의 일관성이나 정확성이 중요한 곳에 사용됩니다.(은행, 일관성)
    • NoSQL은 규모 분산 데이터, 빠른 읽기/쓰기 처리 속도, 유연한 데이터 구조가 필요한 경우 사용하는 것이 좋습니다.(소셜 네트워크, 확장성)

RDBMS의 정규화에 대해 설명해주세요.

데이터베이스의 설계에서 데이터의 중복을 허용하지 않고, 저장 용량을 최소화해줌으로써 데이터베이스를 보다 효율적으로 설계하는 과정을 말합니다.

정규화의 주요 목적은 이상현상(anomalies)을 최소화하고 데이터베이스의 효율을 높이는 것입니다.

정규화는 테이블을 분해하는 방식에 따라 단계가 나뉘어져 있습니다.

  • 제 1정규화 : 테이블의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것을 말합니다.
    • 예를 들어, 항해6조 김현수, 방휘원, 윤태식, 유호빈, 유정현 -> 항해6조라는 5개의 로우가 생성되고 각 항해 6조 로우에 김현수, 방휘원 ... 값이 각각 대입되는 것을 말합니다.
  • 제 2정규화 : 제 1정규화 과정을 거친 테이블에 대해 기본키에 완전 함수 종속을 만족하도록 테이블을 분해하는 것을 말합니다.
    • 완전 함수 종속은 기본키가 다른 속성들을 완전히 결정하는 관계를 의미합니다.
    • 예를 들어, 학번은 학과와 학생명을 결정할 수 있습니다.
  • 제 3정규화 : 제 2정규화를 진행한 테이블에 대해 이해적 종속을 없애도록 테이블을 분해하는 것을 말합니다.
    • 함수의 종속성에서 A -> B, B -> C 일 때, A -> C가 성립하는 것을 말합니다.
    • 예를 들어, 코스명,학생명,수강료가 하나의 테이블에 있는 경우 이해적 종속을 없애기 위해 코스명-학생명, 학생명-수강료로 정규화 해줍니다.
  • BCNF(보이스코드 정규화) : 제 3정규화를 진행한 테이블에 대해서 모든 결정자가 후보키가 되도록 테이블을 분해하는 것을 말합니다.
    • 모든 결정자가 후보키가 되도록 한다는 말의 의미는 다음과 같습니다.
      • 결정자 : 테이블에서 특정 컬럼의 값이 다른 컬럼의 값을 유일하게 결정할 수 있는 속성을 말합니다.
      • 후보키 : 테이블에서 튜플을 유일하게 식별할 수 있는 속성 중에서 최소한의 속성으로 구성된 것을 말합니다.
      • 즉, 테이블에 있는 속성이 모두 후보키에 의해서만 결정되도록 하는 것을 말합니다.

Primary Key, Foreign Key에 대해 설명해주세요.

PK는 기본키를 의미하며, 테이블 내 모든 행을 고유하게 식별할 수 있는 식별자입니다. 이는 중복이 불가하며, null 이어도 안됩니다.

FK는 RDBMS에서 관계를 나타내기 위한 외래키를 의미합니다. 일반적으로 다른 테이블에 있는 기본 키를 참조합니다. 이를 통해 두 테이블 간의 데이터 무결성을 유지할 수 있습니다.

HTTP 메서드에 대해 설명해주세요.

HTTP는 메서드를 정의를 통해 주어진 리소스에 수행하기 원하는 행동을 나타냅니다.

GET은 특정 리소스의 조회를 요청합니다. 이는 데이터를 오로지 받기만 합니다.

HEAD는 GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문(바디)가 없습니다.

  • 리소스의 존재 여부 또는 크기 확인 요청 시 사용.

POST는 특정 리소스에 요청 데이터를 제출 시 사용됩니다.

PUT은 특정 리소스에 데이터를 수정하기 위해 사용됩니다.

DELETE 특정 리소스에 데이터를 삭제하기 위해서 사용됩니다.

CONNECT는 목적 리소스로 식별되는 서버로의 터널을 맺습니다.

OPTIONS는 특정 리소스의 통신을 설정하기 위해 사용됩니다.

PATCH는 특정 리소스의 일부만 수정하기 위해 사용됩니다.

CORS(Cross Origin Resource Sharing)에 대해 설명해주세요.

CORS는 "교차 출처 리소스 공유 정책"을 말합니다.

교차 출처의 의미는 다른 출처를 말합니다.

여기서 출처(Origin)가 의미하는 것은 URL 주소의 Protocol + Host + Port 를 합친 것을 의미합니다.

그 다음으로 출처와 관련된 정책인 Same Origin과 Cross Origin 정책에 대해 자세히 설명하겠습니다.

Same Origin은 동일한 출처에 대한 정책을 의미합니다. 이는 SOP라고도 불리며, 동일한 출처에서만 리소스를 공유할 수 있다라는 정책입니다.

동일 출처 정책이 필요한 이유는 무엇일까요?
출처에 대한 제약이 없이 다른 출처에서도 해당 리소스에 접그닝 가능할 경우,
CSRF(사이트 간 요청 위조는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격을 말한다) 또는 XSS(사이트 간 스크립팅, 크로스 사이트 스크립팅은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다.) 등을 통해서 보안의 위험이 되기 때문입니다.

이를 예방하기 위해 SOP 정책으로 다른 출처의 스크립트가 실행되지 않도록 브라우저에서 예방하기 위한 정책입니다.

즉, 일부 브라우저의 SOP 정책에 따라 다른 출처의 리소스를 차단하면서 발생되는 에러를 일부 허용하기 위해서 CORS 정책에 따르면 다른 출처의 리소스라도 허용할 수 있도록 해줍니다.

CORS의 기본 동작으로는 요청 시 헤더에 Origin이라는 필드의 출처와
응답 시 헤더에 Access-Control-Allow-Origin 필드의 출처를 비교하여 다르면 오류 같으면 리소스를 정상적으로 가져올 수 있습니다.

브라우저의 작동 방식에 대해서 설명해주세요.

  1. 사용자가 웹브라우저에 URL을 입력합니다.

  2. 브라우저는 DNS를 통해서 서버의 실제 주소(IP 주소)를 찾습니다.

  3. HTTP 프로토콜을 통해 HTTP 요청 메시지를 생성합니다.

  4. TCP/IP 연결을 통해서 HTTP 요청이 서버로 전송됩니다.

  5. 서버는 HTTP 프로토콜을 활용하여HTTP 응답 메시지를 생성합니다.

  6. TCP/IP 연결을 통해서 요청한 컴퓨터로 전송합니다.

  7. 도착한 HTTP 응답 메시지는 웹페이지 데이터로 변환되고, 웹 브라우저에 의해 출력되어 사용자가 볼 수 있게됩니다.

profile
백엔드 서버 엔지니어

0개의 댓글