- NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 들어 설명해주세요.
"NoSQL과 RDBMS는 데이터를 저장하고 관리하는 데 사용되는 두 가지 주요 기술입니다. 이들 간의 주요 차이점을 이해하는 것은 데이터베이스 시스템을 선택할 때 중요한 고려 사항이 됩니다.
RDBMS(관계형 데이터베이스 관리 시스템)는 잘 정의된 스키마와 테이블, 행, 열을 사용하여 데이터를 저장합니다. SQL(Structured Query Language)을 사용하여 데이터를 쿼리하고 조작할 수 있습니다. 대표적인 예로 MySQL, PostgreSQL, Oracle이 있습니다.
장점으로는 데이터 무결성과 ACID(Atomicity, Consistency, Isolation, Durability) 트랜잭션을 보장합니다. 또한, 강력한 쿼리 언어를 통해 복잡한 데이터 조작과 분석이 가능합니다. 반면에, 단점으로는 수직적 확장(서버의 업그레이드)은 가능하지만, 수평적 확장(서버의 추가)이 제한적입니다. 그리고 미리 정의된 스키마로 인해 데이터 구조 변경이 어렵습니다.
NoSQL(Not Only SQL)은 스키마가 없거나 유연한 스키마를 제공하여, 다양한 데이터 형식을 저장할 수 있습니다. 키-값 저장소, 문서 기반, 그래프 데이터베이스 등 여러 유형이 있으며, MongoDB, Cassandra, Neo4j가 대표적입니다.
장점으로는 수평적 확장이 용이하여, 빅 데이터 처리에 적합합니다. 또한, 스키마가 없거나 유연하여, 빠르게 변화하는 데이터 구조에 대응할 수 있습니다. 반면에, 단점으로는 대부분의 NoSQL 데이터베이스는 ACID 트랜잭션 보다는 최종 일관성(Eventual Consistency)을 제공합니다. 그리고 NoSQL 데이터베이스마다 사용 방법과 쿼리 언어가 다를 수 있어 학습 곡선이 있습니다.
결론적으로, RDBMS는 일관성이 중요하고 복잡한 쿼리가 필요한 전통적인 업무에 적합하며, NoSQL은 빅 데이터 처리와 빠르게 변화하는 데이터 구조를 다루는 환경에 유리합니다. 프로젝트의 요구 사항에 따라 적합한 데이터베이스 기술을 선택하는 것이 중요합니다."
- RDBMS의 정규화에 대해 설명해주세요.
"정규화는 관계형 데이터베이스(RDBMS)의 설계를 최적화하는 과정으로, 데이터 중복을 줄이고, 데이터 무결성을 높이기 위해 사용됩니다. 간단히 말해, 데이터를 구조화하여, 각 데이터가 테이블 내에서 한 번만 나타나도록 하는 것입니다. 이 과정은 여러 단계의 '정규 형태(Normal Forms)'를 거치게 되는데, 각 단계는 특정한 규칙을 충족시키며 데이터베이스를 더욱 체계적으로 만듭니다.
1. 제1정규형(1NF): 모든 컬럼의 값이 원자값을 가지며, 각 컬럼마다 고유한 데이터 타입이 있어야 합니다. 즉, 테이블 내에서 중복된 행이 없어야 하며, 각 행은 유니크한 키로 식별될 수 있어야 합니다.
2. 제2정규형(2NF): 제1정규형을 만족하며, 모든 비주요 컬럼이 주 키에 완전히 함수적으로 의존해야 합니다. 이는 부분적 함수 종속성을 제거하는 과정입니다.
3. 제3정규형(3NF): 제2정규형을 만족하며, 어떤 비주요 컬럼도 주 키가 아닌 다른 컬럼에 의존하지 않아야 합니다. 즉, 이행적 종속성을 제거합니다.
4. 보이스-코드 정규형(BCNF): 제3정규형을 더 엄격하게 적용한 형태로, 모든 결정자가 후보 키가 되어야 합니다.
정규화를 통해 데이터 중복을 최소화하고, 데이터 무결성을 보장할 수 있습니다. 그러나 과도한 정규화는 데이터베이스의 복잡성을 증가시키고, 조회 성능에 부정적인 영향을 줄 수 있어, 실제 애플리케이션의 요구사항과 성능 목표에 맞게 적절한 수준에서 정규화를 결정하는 것이 중요합니다."
- Primary Key, Foreign Key에 대해 설명해주세요.
"Primary Key(기본 키)와 Foreign Key(외래 키)는 관계형 데이터베이스에서 중요한 역할을 합니다.
Primary Key는 테이블 내의 각 행(row)을 고유하게 식별하는 데 사용되는 컬럼(또는 컬럼의 집합)입니다. 기본 키로 설정된 컬럼은 중복된 값을 가질 수 없으며, 빈 값(NULL)을 허용하지 않습니다. 예를 들어, 사용자 테이블에서는 사용자 ID가 기본 키가 될 수 있습니다. 이를 통해 각 사용자를 고유하게 식별할 수 있습니다.
Foreign Key는 다른 테이블의 행을 참조하는 컬럼(또는 컬럼의 집합)입니다. 외래 키는 참조 무결성을 유지하는 데 중요한 역할을 하며, 하나의 테이블에서 다른 테이블의 기본 키를 참조하여 두 테이블 사이의 관계를 정립합니다. 예를 들어, 주문 테이블에는 사용자 ID 컬럼이 외래 키로 사용될 수 있으며, 이는 사용자 테이블의 기본 키를 참조하여 어떤 사용자가 주문을 했는지 식별할 수 있게 해줍니다.
기본 키는 테이블 내의 데이터를 고유하게 식별하는 반면, 외래 키는 다른 테이블의 데이터와 관계를 맺는 데 사용됩니다. 이 두 키는 데이터베이스의 무결성을 유지하고, 데이터 간의 관계를 명확하게 정의하는 데 필수적입니다."
- HTTP 메서드에 대해 설명해주세요.
"HTTP 메서드는 클라이언트가 서버에게 어떤 동작을 요청하고 싶은지를 알려주는 방법입니다. 주로 웹에서 데이터를 조회하거나 전송할 때 사용되며, 각 메서드는 다른 목적을 가지고 있습니다. 가장 흔히 사용되는 HTTP 메서드에는 다음과 같은 것들이 있습니다:
1. GET: 리소스를 조회할 때 사용합니다. GET 요청은 데이터를 가져오는 데 사용되며, 서버의 상태를 변경하지 않습니다.
2. POST: 새로운 리소스를 생성할 때 사용됩니다. 예를 들어, 새 글을 작성하거나 정보를 제출할 때 POST 메서드를 사용합니다.
3. PUT: 리소스를 업데이트할 때 사용됩니다. 주로 기존의 리소스를 새 데이터로 완전히 대체할 때 사용되며, 리소스가 없다면 새로 생성할 수도 있습니다.
4. DELETE: 리소스를 삭제할 때 사용됩니다. DELETE 메서드는 지정된 리소스를 제거합니다.
5. PATCH: 리소스의 일부를 업데이트할 때 사용됩니다. PUT 메서드가 전체 리소스를 대체하는 반면, PATCH는 일부분만 변경합니다.
6. HEAD: GET 메서드와 유사하지만, 리소스의 본문(body) 없이 헤더(header) 정보만을 가져옵니다. 이는 리소스의 메타데이터를 확인할 때 유용합니다.
7. OPTIONS: 서버가 지원하는 메서드의 종류를 조회할 때 사용됩니다. 클라이언트가 서버에 특정 리소스에 대해 어떤 HTTP 메서드를 지원하는지 알아볼 수 있게 해줍니다.
각 HTTP 메서드는 RESTful API 디자인의 중요한 부분을 구성하며, 애플리케이션에서 데이터를 안전하게 전송하고 관리하는 데 필수적입니다."
- CORS(Cross Origin Resource Sharing)에 대해 설명해주세요.
"CORS(Cross-Origin Resource Sharing)는 다른 출처의 리소스에 웹 페이지가 접근할 수 있도록 하는 보안 메커니즘입니다. 기본적으로 웹 브라우저는 동일 출처 정책(Same-Origin Policy)을 따르며, 이는 보안상의 이유로 한 출처에서 불러온 문서나 스크립트가 다른 출처의 리소스와 상호작용하는 것을 제한합니다. 즉, 웹 애플리케이션이 다른 도메인, 프로토콜, 또는 포트에서 호스팅된 리소스에 접근하려면 CORS 정책에 따라야 합니다.
CORS는 추가 HTTP 헤더를 사용하여 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택된 리소스에 접근할 수 있도록 브라우저에 알립니다. 예를 들어, 서버는 ‘Access-Control-Allow-Origin’이라는 HTTP 헤더를 사용하여 특정 출처 또는 모든 출처에서 자신의 리소스에 접근할 수 있도록 허용할 수 있습니다.
CORS는 웹 애플리케이션이 다양한 출처에서 데이터를 안전하게 가져올 수 있도록 하면서도, 악의적인 웹 사이트가 사용자의 데이터에 접근하는 것을 방지하는 데 중요한 역할을 합니다. 이를 통해 개발자는 웹 애플리케이션의 기능성과 보안성 사이에 균형을 맞출 수 있습니다."
- 브라우저의 작동방식에 대해서 설명해주세요.
"브라우저는 웹에서 정보를 검색, 표시, 그리고 사용자와 상호작용하기 위한 소프트웨어입니다. 사용자가 웹사이트를 방문할 때마다, 브라우저는 다음과 같은 일련의 과정을 거칩니다:
1. 주소 입력: 사용자가 URL을 입력하면, 브라우저는 해당 주소의 서버와 연결을 시작합니다.
2. DNS 조회: URL의 도메인 이름을 IP 주소로 변환하기 위해, 브라우저는 DNS(Domain Name System)를 조회합니다.
3. 서버 요청: 브라우저는 변환된 IP 주소를 사용하여 해당 서버에 HTTP 요청을 보냅니다.
4. 서버 응답: 서버는 브라우저의 요청에 따라 HTML, CSS, JavaScript 파일 등을 포함한 응답을 보냅니다.
5. 렌더링: 브라우저는 받은 자원들을 해석하여 사용자에게 웹 페이지를 시각적으로 표시합니다. 이 과정을 렌더링이라고 하며, HTML을 파싱하여 DOM(Document Object Model) 트리를 구성하고, CSS를 파싱하여 스타일을 적용하며, JavaScript를 실행하여 동적인 요소를 추가합니다.
6. 렌더 트리 구축: DOM 트리와 CSSOM(CSS Object Model) 트리를 결합하여 렌더 트리를 생성합니다. 렌더 트리는 화면에 실제로 표시되는 요소들만 포함합니다.
7. 레이아웃: 렌더 트리의 각 요소에 대한 화면상의 정확한 위치와 크기를 계산합니다.
8. 페인팅: 레이아웃 단계에서 계산된 위치에 요소들을 화면에 그립니다.
브라우저는 이 모든 과정을 거쳐 사용자에게 웹 페이지를 보여줍니다. 사용자가 페이지 내에서 상호작용(예: 링크 클릭, 폼 제출)할 때마다, 브라우저는 필요에 따라 새로운 요청을 서버에 보내고, 받은 응답을 바탕으로 페이지를 업데이트합니다. 이러한 동작 방식 덕분에 브라우저는 웹의 다양한 정보를 접근하고, 사용자에게 풍부한 인터넷 경험을 제공할 수 있습니다."
- 쿠키, 세션의 개념과 차이를 설명해보세요
"쿠키와 세션은 웹사이트에서 사용자 정보를 저장하는 데 사용되지만, 저장 위치와 관리 방식에서 차이가 있습니다.
쿠키는 사용자의 브라우저에 데이터 조각을 저장하는 방식으로, 사이트 방문 정보나 사용자 선호도 같은 비교적 덜 민감한 정보를 저장하는 데 적합합니다. 사용자의 컴퓨터에 직접 저장되기 때문에, 사용자가 많은 정보를 직접 관리할 수 있으나, 보안상의 이유로 중요한 데이터를 저장하기에는 적합하지 않습니다.
세션은 서버 측에서 사용자 정보를 유지하는 방법으로, 서버에 저장되므로 보안이 더 강화됩니다. 사용자 각각에게 고유한 세션 ID를 부여하여 이를 통해 사용자를 식별합니다. 세션은 주로 로그인 같은 상태를 유지하는 데 사용되며, 사용자가 브라우저를 닫으면 정보가 사라집니다.
간단히 말해, 쿠키는 클라이언트 측에서 사용자 정보를 저장하는 데 사용되며, 세션은 보안이 더 중요한 정보를 서버 측에서 관리하는 데 사용됩니다. 선택은 애플리케이션의 요구 사항과 보안 고려 사항에 따라 달라집니다."
- TCP/UDP에 대해서 설명해주세요.
"TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 인터넷 상에서 데이터를 전송하는 데 사용되는 두 가지 기본적인 프로토콜입니다. 각각 다른 특징과 용도가 있어, 애플리케이션의 요구사항에 따라 적합한 프로토콜을 선택할 수 있습니다.
TCP는 연결 지향적 프로토콜로, 데이터 전송 전에 통신을 위한 연결을 설정합니다. 이는 데이터의 순서 보장, 에러 없는 데이터 전송, 중복된 데이터 제거 등을 포함한 신뢰성 있는 데이터 전송을 보장합니다. 따라서 이메일, 웹 페이지 로딩 같이 정확한 데이터 전송이 중요한 경우에 주로 사용됩니다.
UDP는 비연결형 프로토콜로, 데이터 전송 전에 사전 연결 설정 없이 바로 데이터를 보낼 수 있습니다. 이는 TCP보다 빠른 데이터 전송을 가능하게 하지만, 신뢰성 있는 전송은 보장하지 않습니다. 순서가 바뀌거나 일부 데이터가 손실될 수도 있습니다. 그러나 실시간 스트리밍, 온라인 게임과 같이 빠른 전송이 중요한 경우에 적합합니다.
간단히 말해, TCP는 신뢰성 있는 데이터 전송이 중요할 때 사용되며, UDP는 빠른 데이터 전송이 우선시될 때 사용됩니다. 사용 사례와 요구사항에 따라 두 프로토콜 중 하나를 선택할 수 있습니다."
- http, https 차이점에 대해 설명해주세요
"HTTP(HyperText Transfer Protocol)와 HTTPS(HyperText Transfer Protocol Secure)는 웹에서 데이터를 전송하는 데 사용되는 두 가지 프로토콜입니다. 둘 다 웹 서버와 클라이언트 간에 정보를 주고받기 위해 사용되지만, 주요 차이점은 보안에 있습니다.
HTTP는 웹 페이지를 서버로부터 클라이언트(브라우저)에 전송하기 위해 사용되는 표준 프로토콜입니다. 하지만, HTTP를 사용할 때 데이터는 암호화되지 않은 상태로 전송되기 때문에, 중간자 공격(man-in-the-middle attacks) 같은 보안 취약점에 노출될 수 있습니다.
HTTPS는 HTTP에 SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security) 보안 기술을 추가한 것입니다. 이는 데이터를 암호화하여 전송하기 때문에, 사용자의 정보가 중간에 도청되거나 변경되는 것을 방지합니다. HTTPS는 특히 온라인 결제나 개인 정보를 다루는 웹사이트에서 필수적으로 사용됩니다.
간단히 말해서, HTTP는 비보안적이며 데이터가 암호화되지 않은 채로 전송되는 반면, HTTPS는 SSL/TLS를 통해 데이터를 암호화하여 보다 안전한 데이터 전송을 보장합니다. 따라서 사용자의 정보 보호가 중요한 웹사이트에서는 HTTPS를 사용하는 것이 좋습니다."
- 객체지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요?
"객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체들의 집합으로 모델링하여 개발하는 프로그래밍 패러다임입니다. 객체는 데이터(속성)와 그 데이터를 처리하는 함수(메서드)를 캡슐화하여, 실제 세계의 사물이나 개념을 프로그램 내에서 표현합니다.
객체지향 프로그래밍의 핵심 개념에는 클래스, 상속, 다형성, 캡슐화가 있습니다:
- 클래스(Class): 객체를 생성하기 위한 템플릿입니다. 클래스는 객체의 기본 형태와 기능을 정의합니다.
- 상속(Inheritance): 한 클래스가 다른 클래스의 속성과 메서드를 이어받을 수 있게 합니다. 코드 재사용성을 높이고, 중복을 줄입니다.
- 다형성(Polymorphism): 같은 이름의 메서드가 여러 객체에서 다른 동작을 할 수 있도록 합니다. 이를 통해 코드의 유연성을 높일 수 있습니다.
- 캡슐화(Encapsulation): 객체의 데이터(속성)와 메서드를 하나로 묶고, 객체의 세부 구현 내용을 외부에 숨기는 것입니다. 객체의 인터페이스만을 사용하여 상호작용하게 함으로써, 코드의 보안성과 간결성을 높입니다.
객체지향 프로그래밍은 복잡한 문제를 단순화하고, 코드의 재사용성 및 유지보수성을 향상시키는 데 유용합니다. 예를 들어, 은행 시스템을 개발할 때 '계좌'를 클래스로 정의하고, 이를 바탕으로 다양한 종류의 계좌 객체(예: 저축 계좌, 검사 계좌)를 생성할 수 있습니다. 상속을 사용하여 공통 기능을 가진 베이스 클래스에서 파생된 클래스를 만들어 코드 중복을 줄일 수 있으며, 다형성을 활용해 각 계좌 유형에 맞는 특화된 기능을 구현할 수 있습니다.
간단히 말해, 객체지향 프로그래밍은 현실 세계의 복잡한 문제를 효과적으로 모델링하고, 소프트웨어 개발의 유연성과 생산성을 높이는 데 도움을 줍니다."
'면접 (Java) > 기술면접' 카테고리의 다른 글
[면접] 기술 면접 - 객체지향 프로그래밍(Object-Oriented Programming, OOP) (0) | 2024.03.12 |
---|---|
[면접] 기술 면접 - JPA(Java Persistence API) (1) | 2024.03.12 |
[면접] 기술 면접 - Java (5) (0) | 2024.03.09 |
[면접] 기술 면접 - Java (4) (0) | 2024.03.09 |
[면접] 기술 면접 - Java (3) (0) | 2024.03.07 |