19. NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 들어 설명해주세요.
핵심 키워드 : 비정형 데이터, 읽기 쓰기, 성능 비교, 유연성과 안정성
"NoSQL과 RDBMS는 데이터를 저장, 관리, 검색하는 방식에 있어 서로 다른 특성과 장단점을 가집니다.
RDBMS는 관계형 데이터베이스 관리 시스템으로, 엄격한 스키마와 테이블 기반 구조를 가집니다. 이는 데이터의 일관성과 정확성을 보장하는 ACID 속성을 지원합니다. RDBMS는 복잡한 쿼리와 트랜잭션 관리에 강점이 있으며, 정형화된 데이터 처리에 적합합니다. 단점으로는 비정형 데이터 처리에는 유연하지 않고, 대용량 데이터 처리 시 성능이 저하될 수 있다는 점이 있습니다.
NoSQL은 Not Only SQL의 약자로, 비관계형 데이터베이스입니다. 다양한 데이터 모델(문서, 키-값, 그래프 등)을 지원하여 비정형 데이터와 대용량 데이터를 효과적으로 처리할 수 있으며, 유연한 스키마로 인해 빠른 개발과 확장이 가능합니다. 장점은 수평적 확장성이 뛰어나 대용량 데이터 처리와 빠른 읽기/쓰기가 가능하다는 점입니다. 단점으로는 RDBMS에 비해 표준화된 쿼리 언어가 부족하고, 트랜잭션 처리가 제한적일 수 있으며, 데이터 일관성 모델이 약할 수 있습니다.
결론적으로, NoSQL은 유연성과 확장성이 요구되며 대용량의 비정형 데이터를 다룰 때 유리하고, RDBMS는 데이터의 일관성과 안정성이 중요하며 복잡한 관계를 가진 데이터를 처리할 때 강점을 가집니다. 선택은 각 애플리케이션의 요구 사항과 데이터의 특성에 따라 달라질 수 있습니다."
꼬리 질문 > 데이터의 일관성이 중요한 애플리케이션에서 NoSQL을 사용하고자 할 때, 데이터 일관성을 어떻게 보장할 수 있나요?
"NoSQL 데이터베이스에서도 데이터의 일관성을 보장하기 위한 여러 방법이 있습니다. 첫째, 많은 NoSQL 데이터베이스는 '최종 일관성'(Eventual Consistency) 모델을 제공하며, 일부는 더 강력한 일관성 옵션을 선택할 수 있게 합니다. 예를 들어, Amazon DynamoDB는 강력한 일관성 읽기 옵션을 제공합니다. 둘째, 애플리케이션 레벨에서 데이터 일관성을 관리할 수 있습니다. 애플리케이션 로직을 통해 데이터 변경 시 다른 관련 데이터에 대한 업데이트를 적용함으로써 일관성을 유지할 수 있습니다. 셋째, 트랜잭션 지원을 제공하는 NoSQL 데이터베이스를 선택할 수 있습니다. 예를 들어, MongoDB는 멀티 도큐먼트 트랜잭션을 지원하여, RDBMS와 유사한 방식으로 데이터의 일관성을 보장할 수 있습니다. 이러한 접근 방식을 통해, 비록 NoSQL 데이터베이스가 기본적으로 유연성과 확장성에 초점을 맞추고 있지만, 데이터의 일관성이 중요한 애플리케이션에서도 효과적으로 사용될 수 있습니다."
20. RDBMS의 정규화에 대해 설명해주세요.
핵심 키워드 : 연관 관계, 정규형, 중복 제거
"RDBMS에서 정규화는 데이터베이스 구조를 설계할 때 데이터 중복을 최소화하고, 논리적인 데이터 구조를 만들기 위해 데이터를 조직하는 과정입니다. 정규화를 통해 데이터의 무결성을 유지하고, 업데이트 시 발생할 수 있는 오류와 중복을 방지하여 효율적인 데이터 관리가 가능해집니다. 정규화는 여러 단계의 정규형으로 이루어져 있으며, 각 정규형은 특정한 조건을 만족시키는 구조를 가집니다.
1차 정규형(1NF)은 테이블의 모든 컬럼이 원자 값으로만 구성되어야 한다는 것을 의미합니다. 2차 정규형(2NF)은 1NF를 만족하며, 모든 비주요 속성이 기본 키에 완전 함수적 종속을 해야 합니다. 3차 정규형(3NF)은 2NF를 만족하고, 비주요 속성이 기본 키에만 종속되어야 합니다, 즉, 이행적 종속을 제거합니다.
정규화를 통해 데이터의 중복을 제거하고, 업데이트, 삭제, 삽입 시 발생할 수 있는 이상 현상을 방지하여, 데이터베이스의 안정성과 유지 보수성을 높일 수 있습니다."
꼬리 질문 > 정규화 과정에서 데이터베이스 성능에 미치는 영향은 어떤 것이 있으며, 과도한 정규화가 가져올 수 있는 단점은 무엇인가요?
"정규화는 데이터 중복을 최소화하고 데이터의 무결성을 유지하는 데 중요한 역할을 하지만, 성능에 미치는 영향은 상황에 따라 다를 수 있습니다. 정규화를 통해 데이터의 중복을 제거함으로써 저장 공간을 절약하고, 데이터 일관성 유지에 따른 오류 가능성을 줄일 수 있습니다. 하지만, 과도한 정규화는 데이터를 여러 테이블로 분산시키므로, 간단한 쿼리조차도 여러 테이블을 조인해야 할 필요가 생깁니다. 이는 쿼리의 복잡도를 증가시키고, 데이터베이스의 응답 시간을 늦출 수 있습니다. 특히, 대규모 트랜잭션 처리 시스템에서는 이러한 조인 연산이 성능 저하의 주요 원인이 될 수 있습니다.
따라서, 정규화와 성능 최적화 사이에는 균형이 필요합니다. 필요한 경우 비정규화를 통해 자주 사용되는 쿼리의 성능을 향상시키거나, 읽기 성능을 우선시하는 데이터 웨어하우스 환경에서는 정규화 수준을 조절할 수 있습니다. 중요한 것은 애플리케이션의 요구 사항과 데이터 접근 패턴을 충분히 이해하고, 적절한 수준에서 정규화를 적용하는 것입니다."
21. Primary Key, Foreign Key에 대해 설명해주세요.
핵심 키워드 : 고유값, 연관 관계, 참조, Join
"Primary Key(기본 키)는 데이터베이스 테이블 내의 각 행을 고유하게 식별하는 열 또는 열의 조합입니다. 기본 키는 테이블 내에서 중복되지 않는 고유값을 가지며, 테이블의 각 행에 대한 고유한 식별자 역할을 합니다. 이를 통해 데이터를 빠르게 찾거나 참조할 때 사용됩니다.
Foreign Key(외래 키)는 다른 테이블의 기본 키를 참조하는 열 또는 열의 조합입니다. 외래 키는 테이블 간의 연관 관계를 정의하는 데 사용되며, 참조 무결성을 유지하는 데 중요한 역할을 합니다. 이를 통해 관련된 데이터 사이에서 Join 연산을 수행할 수 있으며, 데이터의 일관성과 무결성을 보장합니다.
기본 키와 외래 키는 데이터베이스의 관계형 모델에서 중요한 구성 요소로, 데이터 간의 연결과 참조를 관리하여 효율적인 데이터 검색 및 무결성 유지에 기여합니다."
꼬리 질문 > 외래 키 제약 조건이 데이터베이스 성능에 미치는 영향은 무엇이며, 성능 저하를 최소화하기 위해 어떤 조치를 취할 수 있나요?
"외래 키 제약 조건은 데이터의 무결성을 유지하기 위해 필수적이지만, 삽입, 수정, 삭제 작업 시 참조하는 테이블을 검사해야 하므로 데이터베이스 성능에 부담을 줄 수 있습니다. 특히, 대용량 데이터를 처리하는 시스템에서는 이러한 제약 조건이 응답 시간 지연의 원인이 될 수 있습니다.
성능 저하를 최소화하기 위한 조치로는 다음과 같은 방법이 있습니다:
인덱싱: 외래 키가 참조하는 테이블의 기본 키와 외래 키 열에 인덱스를 생성합니다. 인덱스는 데이터 검색 속도를 향상시켜 외래 키 제약 조건 검사 시간을 단축합니다.
일괄 처리: 데이터 삽입이나 업데이트를 일괄적으로 처리하여, 외래 키 검사를 최소화합니다. 가능하다면, 트랜잭션을 사용하여 여러 작업을 묶어 한 번에 처리함으로써 성능을 향상시킬 수 있습니다.
비정규화: 성능이 매우 중요한 특정 쿼리의 경우, 데이터의 중복을 허용하고 외래 키 제약 조건을 완화함으로써 조회 성능을 향상시킬 수 있습니다. 이는 데이터의 무결성 관리에 추가적인 노력이 필요하지만, 성능 개선을 위해 고려할 수 있는 방법입니다.
외래 키 제약 조건과 관련된 성능 문제는 주의 깊게 관리해야 하며, 데이터의 무결성을 해치지 않으면서 시스템의 성능을 최적화할 수 있는 방법을 찾는 것이 중요합니다."
22. HTTP 메서드에 대해 설명해주세요.
핵심 키워드 : Get / Post / Put / delete / patch, 멱등성, request header, body
"HTTP 메서드는 클라이언트가 서버에게 어떤 동작을 요청할지 나타내는 방식입니다. 대표적인 메서드로는 GET, POST, PUT, DELETE, PATCH가 있습니다.
GET은 리소스를 조회할 때 사용합니다. 데이터를 요청할 때 주로 사용되며, 정보를 가져오는 데 사용되지만 서버의 상태를 변경하지 않습니다. 멱등성을 가집니다.
POST는 새로운 리소스를 생성할 때 사용됩니다. 예를 들어, 새로운 데이터를 서버에 제출할 때 사용되며, 멱등성이 없습니다.
PUT은 기존 리소스를 수정하거나 새 리소스를 생성할 때 사용됩니다. 지정된 URL에 해당하는 데이터를 새 데이터로 전체 교체할 때 사용됩니다. 멱등성을 가집니다.
DELETE는 지정된 리소스를 삭제할 때 사용됩니다. 멱등성을 가지며, 서버의 리소스를 삭제하는 데 사용됩니다.
PATCH는 리소스의 일부를 수정할 때 사용됩니다. PUT과 달리 전체 리소스를 대체하지 않고, 일부만 수정합니다. 멱등성을 가질 수도 있고, 가지지 않을 수도 있습니다.
각 HTTP 메서드는 request header와 body를 통해 서버에 정보를 전달하며, 메서드의 성격에 따라 이 정보를 처리합니다. 멱등성이란 메서드를 여러 번 수행해도 결과가 동일함을 의미하는데, GET, PUT, DELETE는 멱등성을 가지며, POST와 PATCH는 경우에 따라 다릅니다. 이러한 HTTP 메서드는 웹 개발에서 클라이언트와 서버 간의 통신을 위해 필수적으로 사용됩니다."
꼬리 질문 > 멱등성이 있는 HTTP 메서드와 없는 메서드 간의 차이점이 실제 애플리케이션 설계에 어떤 영향을 미칠 수 있나요?
"멱등성이 있는 HTTP 메서드(GET, PUT, DELETE)는 동일한 요청을 여러 번 수행해도 서버 상태에 동일한 결과를 초래한다는 점에서, 애플리케이션 설계 시 중요한 고려 사항이 됩니다. 예를 들어, 네트워크 불안정 등의 이유로 클라이언트가 동일한 수정 요청을 여러 번 보냈을 때, 멱등성이 보장되면 서버의 상태는 첫 번째 요청 이후 변경되지 않습니다. 이는 데이터의 일관성과 무결성을 유지하는 데 핵심적입니다.
반면, 멱등성이 없는 메서드(POST, PATCH)는 같은 요청을 여러 번 수행할 때 매번 다른 결과를 초래할 수 있습니다. 예를 들어, 새 리소스 생성을 위한 POST 요청이 중복으로 처리되면, 원하지 않는 데이터 중복이 발생할 수 있습니다. 이러한 특성은 애플리케이션에서 중복 요청을 관리하거나, 요청의 유일성을 보장하는 로직을 추가로 구현해야 할 필요성을 야기합니다.
따라서, 멱등성의 유무는 API 설계와 네트워크 통신의 안정성, 데이터 무결성 관리 등 애플리케이션의 다양한 측면에 영향을 미칩니다. 멱등성을 고려한 메서드 선택과 설계는, 특히 분산 시스템이나 마이크로서비스 아키텍처에서 중요하며, 애플리케이션의 견고성과 신뢰성을 높이는 데 기여합니다."
23. CORS(Cross Origin Resource Sharing)에 대해 설명해주세요.
핵심 키워드 : 도메인, 리소스, 보안 정책, 출처
"CORS(Cross-Origin Resource Sharing)는 웹 페이지가 다른 도메인의 리소스에 접근할 수 있게 해주는 보안 메커니즘입니다. 기본적으로 웹 브라우저는 같은 출처 정책(Same-Origin Policy)을 따라, 스크립트에서 현재 페이지와 다른 출처(domain, scheme, port)를 가진 리소스의 접근을 제한합니다. 이 정책은 보안상의 이유로 중요하지만, 다른 출처의 API를 호출해야 하는 웹 애플리케이션 개발 시 제약이 될 수 있습니다.
CORS는 HTTP 헤더를 사용하여 브라우저와 서버 간에 어떤 출처가 리소스에 접근할 수 있는지를 명시합니다. 서버는 `Access-Control-Allow-Origin`과 같은 CORS 헤더를 응답에 포함시켜, 특정 출처에서의 요청을 허용하거나 모든 출처에서의 요청을 허용할 수 있습니다. 이를 통해 개발자는 필요에 따라 안전하게 출처 간 리소스 공유를 설정할 수 있으며, 보안을 유지하면서도 다양한 웹 서비스를 제공할 수 있게 됩니다.
CORS 정책은 웹 애플리케이션의 유연성을 높이면서 보안을 강화하는 데 핵심적인 역할을 합니다."
꼬리 질문 > CORS 정책을 설정할 때, 와일드카드(*)를 Access-Control-Allow-Origin에 사용하는 것과 특정 도메인을 명시하는 것 사이에서 어떤 차이점이 있으며, 어떤 상황에서 각각을 선택해야 하나요?
"Access-Control-Allow-Origin 헤더에 와일드카드(*)를 사용하는 것은 모든 도메인에서의 요청을 허용한다는 의미입니다. 이 방식은 개발 초기 단계에서 리소스를 여러 출처에서 자유롭게 접근할 수 있도록 하여 테스트와 디버깅을 용이하게 하지만, 보안 측면에서는 취약점이 될 수 있습니다. 모든 출처에서의 요청을 허용함으로써, 의도치 않은 출처로부터의 악의적인 요청까지도 허용하게 되기 때문입니다.
반면, 특정 도메인을 명시적으로 Access-Control-Allow-Origin 헤더에 설정하는 것은 그 도메인으로부터의 요청만을 허용하겠다는 의미입니다. 이 방식은 보안을 강화하는 효과가 있으며, 특정 출처와의 상호작용만을 허용하고자 할 때 사용됩니다. 실제 운영 환경에서는 이 방식이 선호되며, 민감한 데이터를 다루는 애플리케이션에서는 필수적입니다.
따라서, 와일드카드를 사용하는 것은 개발과 테스트 단계에서 넓은 접근성을 요구할 때 적합하며, 특정 도메인을 명시하는 방식은 보안이 중요한 운영 환경에서의 사용이 적합합니다. 각 애플리케이션의 요구 사항과 보안 정책에 따라 적절한 설정을 선택해야 합니다."
24. 브라우저의 작동 방식에 대해서 설명해주세요.
핵심 키워드 : HTML parsing, CSS parsing, Layout, Painting, Compositing
"브라우저의 작동 방식은 여러 단계로 나뉩니다. 첫 번째는 HTML 파싱 과정으로, 브라우저는 서버로부터 받은 HTML 문서를 읽고 DOM(Document Object Model) 트리를 구축합니다. 이 과정에서 HTML 요소들이 노드로 변환되어 구조화됩니다. 다음으로 CSS 파싱 단계에서는 CSS 코드를 해석하여 CSSOM(CSS Object Model) 트리를 만듭니다. 이 트리는 스타일 정보를 포함하고 있으며, DOM 트리와 결합하여 렌더 트리를 생성합니다.
레이아웃(Layout) 단계에서는 렌더 트리의 각 노드가 화면상에서 차지할 정확한 위치와 크기를 계산합니다. 이어지는 페인팅(Painting) 단계에서는 레이아웃 단계에서 계산된 정보를 바탕으로 각 요소를 화면에 그립니다. 마지막으로, 컴포지팅(Compositing) 단계에서는 여러 레이어를 합쳐 최종적으로 사용자에게 보여지는 화면을 완성합니다.
이 과정들을 통해 브라우저는 HTML 문서를 시각적으로 표현할 수 있는 페이지로 변환합니다. 이러한 단계적 처리는 웹 페이지의 로딩과 렌더링을 최적화하며, 사용자에게 부드럽고 빠른 웹 사용 경험을 제공하는 데 중요한 역할을 합니다."
꼬리 질문 > 브라우저의 렌더링 과정 중 자바스크립트(JS)는 어떻게 처리되며, JS 처리가 렌더링 성능에 미치는 영향은 무엇인가요?
"자바스크립트(JS)는 HTML 파싱 과정 중에 처리되며, 스크립트 태그가 나타날 때마다 HTML 파싱을 일시 중지하고, 해당 스크립트를 실행합니다. JS는 DOM API를 통해 DOM 트리를 조작할 수 있으며, 이는 렌더 트리의 재구축을 필요로 할 수 있습니다. JS 처리는 웹 페이지의 로딩과 렌더링에 중대한 영향을 미칠 수 있으며, 특히 스크립트 로딩과 실행이 오래 걸리는 경우 사용자의 대기 시간이 증가하고, 페이지 응답성이 떨어질 수 있습니다.
자바스크립트의 처리가 렌더링 성능에 미치는 부정적인 영향을 최소화하기 위해, 개발자는 스크립트의 비동기 로딩(async), 스크립트의 지연 실행(defer), 최소한의 DOM 조작, 필요한 경우에만 렌더 트리의 재구축 등의 최적화 방법을 적용할 수 있습니다. 이러한 최적화를 통해 브라우저는 HTML 문서를 효율적으로 파싱하고, 사용자에게 빠른 웹 페이지 로딩 및 향상된 인터랙티브 경험을 제공할 수 있습니다."
'면접 (Java) > 준비' 카테고리의 다른 글
[면접] 기초 면접 (25~30) (0) | 2024.03.29 |
---|---|
[면접] 프로젝트 면접 (13~16) (0) | 2024.03.28 |
[면접] 프로젝트 면접 (9~12) (0) | 2024.03.27 |
[면접] 기초 면접 (13~18) (0) | 2024.03.27 |
[면접] 프로젝트 면접 (5~8) (0) | 2024.03.26 |