기술면접 문제 - 답변 형식으로 정리
Primary Key, Foreign Key에 대해 설명해주세요.
Primary Key (기본 키)
Primary Key는 데이터베이스의 각 행(레코드)을 유일하게 식별하는 데 사용되는 컬럼(필드) 또는 컬럼의 집합입니다. 기본 키의 주요 특징은 다음과 같습니다:
- 유일성: 기본 키로 설정된 값은 데이터베이스 테이블 내에서 반드시 고유해야 합니다. 즉, 동일한 값을 두 번 이상 사용할 수 없습니다.
- 무결성: 기본 키는 NULL 값을 허용하지 않습니다. 모든 행에는 기본 키 컬럼에 유효한 값이 있어야 합니다.
- 불변성: 일단 설정되면, 기본 키의 값은 변경되어서는 안 됩니다. 기본 키 값의 변경은 데이터의 일관성을 해칠 수 있습니다.
기본 키는 데이터베이스의 레퍼런스 인티그리티를 유지하는 데 중요한 역할을 하며, 관계형 데이터베이스에서 다른 테이블과의 관계를 정의할 때 사용됩니다.
Foreign Key (외래 키)
Foreign Key는 한 테이블의 컬럼이나 컬럼 집합으로서, 다른 테이블의 기본 키를 참조합니다. 외래 키의 주요 목적은 테이블 간의 관계를 설정하고, 레퍼런스 인티그리티를 유지하는 것입니다. 외래 키의 특징은 다음과 같습니다:
- 참조성: 외래 키는 다른 테이블의 기본 키를 참조합니다. 이 참조 관계를 통해 데이터 간 연결성이 보장됩니다.
- 무결성 제약 조건: 외래 키에 설정된 값은 반드시 참조하고 있는 테이블의 기본 키에 존재하는 값이어야 합니다. 이를 통해 데이터베이스의 무결성이 유지됩니다.
- NULL 허용: 외래 키는 NULL 값을 허용할 수 있습니다. 이는 참조하는 테이블과의 관계가 선택적일 수 있음을 의미합니다.
외래 키를 사용하는 주된 이유는 데이터의 일관성과 무결성을 유지하고, 데이터베이스 내의 관계형 데이터를 쉽게 조회하고 관리하기 위함입니다. 예를 들어, Orders 테이블의 CustomerID 외래 키가 Customers 테이블의 CustomerID 기본 키를 참조하면, 각 주문이 어떤 고객에 속하는지를 쉽게 파악할 수 있습니다.
요약
기본 키와 외래 키는 데이터베이스 설계의 핵심 요소로서, 데이터의 유일성, 무결성, 그리고 테이블 간의 관계를 정의하는 데 필수적입니다. 이러한 키들을 통해 데이터베이스는 효과적으로 데이터를 조직하고, 안정적으로 데이터를 관리할 수 있습니다.
HTTP 메서드에 대해 설명해주세요.
HTTP(Hypertext Transfer Protocol) 메서드는 클라이언트가 서버에 요청을 보낼 때 사용하는 명령어입니다. 각 HTTP 메서드는 서버에 대해 수행하고자 하는 특정한 동작을 나타냅니다. 주요 HTTP 메서드들은 다음과 같습니다.
1. GET
- 용도: 서버로부터 정보를 조회하기 위해 사용됩니다. GET 요청은 데이터를 변경하지 않으며, 데이터를 검색하는 데 사용됩니다.
- 특징: 멱등성을 가지며, 캐싱할 수 있습니다.
2. POST
- 용도: 서버에 데이터를 제출하여 리소스를 생성하거나 업데이트할 때 사용됩니다. 예를 들어, 사용자가 폼을 작성할 때 입력 데이터를 서버로 보내는 데 사용됩니다.
- 특징: 멱등성이 없습니다. 같은 POST 요청을 여러 번 보내면 동일한 요청이 여러 번 처리될 수 있습니다.
3. PUT
- 용도: 서버에 존재하는 리소스를 대체하는 데 사용됩니다. 특정 리소스의 상태를 업데이트하거나, 지정된 URI에 아직 리소스가 없다면 새로 만들 수 있습니다.
- 특징: 멱등성을 가집니다. 여러 번 수행해도 동일한 결과를 보장합니다.
4. DELETE
- 용도: 지정된 URI의 리소스를 삭제할 때 사용됩니다.
- 특징: 멱등성을 가집니다. 요청을 여러 번 수행해도 최초 한 번의 삭제 효과와 같습니다.
5. PATCH
- 용도: 리소스의 부분적인 업데이트를 수행합니다. PUT과 비교했을 때, PATCH는 리소스의 일부만 수정할 수 있습니다.
- 특징: 멱등성이 없을 수 있습니다. PATCH 요청은 어떻게 적용되었는지에 따라 멱등성이 결정됩니다.
6. HEAD
- 용도: GET 메서드와 동일하지만, 메시지 본문을 제외하고 HTTP 헤더만 반환합니다. 서버의 헤더 정보나, 리소스가 존재하는지 확인하기 위해 사용됩니다.
- 특징: 멱등성을 가지며, 캐싱할 수 있습니다.
7. OPTIONS
- 용도: 웹 서버에서 지원하는 메서드를 확인할 때 사용합니다. 주로 크로스 오리진 리소스 공유(CORS)에서 사전 요청 체크로 사용됩니다.
- 특징: 서버가 어떤 HTTP 메서드를 지원하는지 알려주는 데 사용됩니다.
이러한 HTTP 메서드들은 RESTful API 디자인에 중요한 역할을 하며, 각 메서드는 자신만의 고유한 역할을 가지고 있어, 적절하게 사용될 때 웹 애플리케이션의 명확성과 효율성을 높일 수 있습니다. 이들을 올바르게 사용하면 서버의 상태를 효과적으로 제어할 수 있으며, 애플리케이션의 안정성과 유지보수성을 향상시킬 수 있습니다.
CORS(Cross Origin Resource Sharing)에 대해 설명해주세요.
CORS(Cross-Origin Resource Sharing)는 웹 페이지가 다른 도메인의 리소스에 액세스할 수 있게 허용하는 보안 메커니즘입니다.
원래 브라우저는 동일 출처 정책(Same-Origin Policy)을 따라서 다른 도메인의 리소스에 대한 접근을 제한합니다.
이 정책은 웹 보안을 강화하기 위해 고안되었지만, 현대의 웹 애플리케이션에서는 다양한 출처의 리소스를 통합해야 할 필요성이 있습니다. CORS는 이러한 필요성을 충족시키기 위해 도입되었습니다.
CORS는 HTTP 헤더를 사용하여 서버가 특정 도메인, 방식(method), 헤더 등에서 오는 요청을 허용할 수 있는지를 브라우저에 알려줍니다.
예를 들어, 웹 애플리케이션 A(http://domain-a.com)가 다른 도메인 B(http://domain-b.com)의 API를 호출하고자 할 때, B 서버는 응답에 'Access-Control-Allow-Origin' 헤더를 포함시켜 요청을 허용하는 출처를 지정할 수 있습니다. 이 헤더가 요청 출처와 일치하지 않으면 브라우저는 리소스 접근을 차단합니다.
CORS 구현에는 몇 가지 중요한 요소가 있습니다.
- 단순 요청(Simple Requests): GET, POST, HEAD와 같은 일반적인 메소드와 헤더를 사용하는 요청입니다. 이러한 요청은 별도의 사전 요청 없이 바로 서버에 전송됩니다.
- 사전 요청(Preflight Requests): PUT, DELETE 또는 사용자 정의 헤더를 포함하는 요청은 사전에 'OPTIONS' 메소드를 사용하여 서버의 허용을 확인하는 사전 요청을 보냅니다.
- 응답 헤더: 서버는 'Access-Control-Allow-Origin', 'Access-Control-Allow-Methods', 'Access-Control-Allow-Headers' 등의 헤더를 통해 어떤 종류의 CORS 요청을 허용할 것인지 명시할 수 있습니다.
CORS 설정은 보안과 접근성 사이의 균형을 맞추는 중요한 과정이며, 잘못 구성된 CORS 정책은 보안 취약점으로 이어질 수 있습니다. 따라서 웹 애플리케이션 개발 시 CORS 설정에 주의를 기울여야 합니다.
브라우저의 작동방식에 대해서 설명해주세요.
브라우저는 사용자가 웹 서핑을 할 수 있게 해주는 소프트웨어 애플리케이션입니다. 웹 페이지를 불러오고 표시하는 과정은 크게 다음과 같은 단계로 나눌 수 있습니다:
- URL 입력 및 해석: 사용자가 브라우저의 주소 창에 URL을 입력하면, 브라우저는 이 URL을 해석하여 해당 서버의 IP 주소를 찾기 위해 DNS 조회를 실시합니다.
- 서버와의 연결: IP 주소가 확인되면, 브라우저는 해당 서버와 TCP 연결을 시작합니다. HTTPS를 사용하는 경우, 이 단계에서 SSL/TLS 핸드셰이크가 이루어져 암호화된 연결이 설정됩니다.
- HTTP 요청: 연결이 성립되면, 브라우저는 HTTP 프로토콜을 사용하여 웹 페이지를 요청하는 HTTP 요청 메시지를 서버에 보냅니다.
- 서버 응답: 서버는 요청받은 자원을 찾아 HTTP 응답 메시지로 브라우저에 반환합니다. 이 응답에는 요청한 웹 페이지의 데이터가 포함되어 있습니다.
- 콘텐츠 렌더링: 브라우저는 서버로부터 받은 HTML, CSS, JavaScript 파일을 해석하여 사용자에게 시각적으로 표시합니다. 이 과정에서 DOM 트리 구축, CSSOM 트리 구축, 레이아웃 계산, 그리고 최종적으로 화면에 픽셀을 그리는 렌더링 단계가 포함됩니다.
- 동적 상호작용: JavaScript를 통해 사용자와의 동적인 상호작용이 처리됩니다. JavaScript는 DOM을 조작할 수 있어 페이지의 동적인 변경을 가능하게 합니다.
이러한 과정을 통해 브라우저는 웹 서버로부터 데이터를 받아 사용자의 화면에 정보를 표시하고, 사용자 입력에 반응하여 동적인 웹 경험을 제공합니다. 면접에서는 각 단계의 기술적 세부사항에 대해 더 깊이 있는 설명이 요구될 수 있으며, 보안, 최적화, 크로스 브라우저 호환성 등 추가적인 주제에 대해서도 논의할 수 있습니다.
쿠키, 세션의 개념과 차이를 설명해보세요
쿠키와 세션은 웹 개발에서 사용자의 상태 정보를 저장하고 관리하는 데 사용되는 두 가지 주요 기술입니다. 이들은 사용자가 웹 사이트를 이용할 때 일관된 상태를 유지하는 데 필수적이며, 각각 특징과 용도가 다릅니다.
쿠키(Cookies)
쿠키는 클라이언트 측에 저장되는 작은 텍스트 파일로서, 사용자의 브라우저를 통해 웹 서버에 의해 생성됩니다. 쿠키는 주로 사용자의 선호, 로그인 상태, 쇼핑 카트 정보 등을 저장하는 데 사용됩니다. 서버는 HTTP 응답 헤더에 Set-Cookie를 포함시켜 클라이언트에 쿠키를 설정하며, 이후 클라이언트는 모든 HTTP 요청 헤더에 쿠키를 포함시켜 서버로 전송합니다.
특징:
- 지속성: 사용자가 브라우저를 닫아도 지정된 만료 기간까지 데이터를 유지할 수 있습니다.
- 클라이언트 측 저장: 데이터가 사용자의 브라우저에 저장되기 때문에, 서버의 부하를 줄일 수 있습니다.
- 보안 취약성: 클라이언트 측에 저장되기 때문에 XSS(크로스 사이트 스크립팅)나 CSRF(크로스 사이트 요청 위조) 같은 보안 위협에 취약할 수 있습니다.
세션(Sessions)
세션은 서버 측에서 사용자 정보를 저장하는 방법으로, 서버의 메모리나 데이터베이스에 저장됩니다. 세션 ID가 생성되며, 이 ID는 쿠키(세션 쿠키)를 통해 클라이언트에 저장되어 서버와 클라이언트 간의 매 요청마다 이 ID를 사용하여 사용자를 식별합니다.
특징:
- 서버 측 저장: 모든 사용자 정보는 서버에 저장되므로 보안성이 더 높습니다.
- 일시적: 세션은 사용자가 브라우저를 닫거나 세션 타임아웃이 발생하면 종료됩니다.
- 리소스 사용: 사용자 정보를 서버에 저장하므로, 서버 리소스를 많이 사용할 수 있습니다.
차이점
- 저장 위치: 쿠키는 클라이언트 측에, 세션은 서버 측에 데이터를 저장합니다.
- 보안: 세션은 쿠키보다 보안성이 높습니다. 쿠키 데이터는 클라이언트에 의해 변경될 수 있으며, 세션 데이터는 서버에 의해서만 접근 및 수정이 가능합니다.
- 성능: 세션은 서버의 리소스를 사용하기 때문에 대규모 사용자를 처리할 때 서버의 부하가 더 클 수 있습니다.
- 지속성: 쿠키는 사용자가 직접 삭제하지 않는 한 만료 기간이 지나기 전까지 지속되지만, 세션은 브라우저 세션이 종료되면 사라집니다.
쿠키와 세션의 이러한 차이점을 이해하는 것은 웹 사이트의 사용자 인증 및 정보 유지 관리를 효과적으로 설계하는 데 매우 중요합니다.
TCP/UDP에 대해서 설명해주세요.
TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 인터넷 프로토콜 스위트에서 데이터를 전송하는 데 사용되는 두 가지 주요 프로토콜입니다. 이 두 프로토콜은 각기 다른 특성과 사용 케이스를 가지고 있으며, 이해하는 것은 네트워크 통신의 기본을 파악하는 데 중요합니다.
TCP (Transmission Control Protocol)
TCP는 연결 지향적 프로토콜로, 데이터 전송 전에 통신할 장치 간에 세션을 설정합니다. 이 프로토콜은 데이터가 순서대로 전송되고, 데이터의 무결성이 보장되어야 하는 애플리케이션에 적합합니다.
주요 특징:
- 신뢰성: 데이터 패킷은 손실 없이 목적지에 도달합니다. 손실된 패킷은 재전송됩니다.
- 순서 보장: 패킷은 보낸 순서대로 도착합니다.
- 오류 검사: 헤더와 데이터에 대한 체크섬을 사용하여 오류를 감지하고 수정합니다.
- 흐름 제어: 송신자와 수신자 사이의 데이터 처리 속도 차이를 조절합니다.
- 혼잡 제어: 네트워크 혼잡이 발생할 때 데이터 전송 속도를 조절합니다.
UDP (User Datagram Protocol)
UDP는 비연결형 프로토콜로, TCP와 달리 통신을 시작하기 전에 연결을 설정하지 않습니다. 이는 UDP가 더 낮은 지연시간을 제공하며 실시간 애플리케이션에 적합하게 만듭니다.
주요 특징:
- 비연결성: 사전 연결 설정 없이 데이터를 전송합니다.
- 빠른 전송: 연결 설정과 관련된 오버헤드가 없어 TCP보다 빠릅니다.
- 순서 보장 없음: 데이터는 도착 순서가 뒤섞여 있을 수 있습니다.
- 신뢰성 없음: 패킷 손실에 대한 복구를 제공하지 않습니다.
- 간단한 프로토콜: 헤더가 작고 처리가 간단합니다.
차이점
- 신뢰성: TCP는 신뢰성 있는 데이터 전송을 보장하지만, UDP는 그렇지 않습니다.
- 연결 설정: TCP는 연결을 설정해야 하지만, UDP는 비연결성입니다.
- 속도: TCP는 다양한 통제 메커니즘 때문에 UDP보다 느릴 수 있습니다.
- 사용 케이스: TCP는 이메일, 웹 페이지 등의 신뢰성이 중요한 서비스에 적합하고, UDP는 스트리밍, 게임, VoIP(Voice over IP)와 같이 실시간성이 중요한 서비스에 적합합니다.
이러한 차이점을 고려하여 개발자들은 애플리케이션의 요구 사항에 따라 적절한 프로토콜을 선택할 수 있습니다
http, https 차이점에 대해 설명해주세요
HTTP와 HTTPS는 웹에서 데이터를 전송하는 두 가지 프로토콜입니다. 이 두 프로토콜의 주요 차이점은 보안성과 데이터 보호 방식입니다.
- 기본 프로토콜:
- HTTP는 텍스트 기반의 프로토콜로, 웹 서버와 클라이언트(브라우저) 간에 데이터를 전송하는 데 사용됩니다.HTTP는 기본적으로 보안 기능이 없으며, 데이터를 암호화하지 않은 채로 전송합니다.
- HTTPS는 HTTP에 보안 계층을 추가한 프로토콜입니다. HTTP의 모든 기능을 포함하면서도 데이터를 암호화하여 전송합니다.
- 보안:
- HTTP는 데이터를 평문으로 전송하므로 중간에서 데이터를 도청하거나 조작할 수 있는 가능성이 있습니다.
- HTTPS는 SSL/TLS(보안 소켓 계층/전송 계층 보안) 프로토콜을 사용하여 데이터를 암호화합니다. 이를 통해 데이터의 무결성, 기밀성, 인증을 보장합니다.
- SSL/TLS 인증서:
- HTTP는 인증서를 사용하지 않습니다.
- HTTPS는 SSL/TLS 인증서를 필요로 합니다. 이 인증서는 데이터가 안전하게 암호화되어 전송되도록 보장하며, 사용자가 접속하는 웹사이트가 신뢰할 수 있는 사이트임을 증명합니다.
- 포트 번호:
- HTTP는 기본적으로 포트 80을 사용합니다.
- HTTPS는 기본적으로 포트 443을 사용합니다.
- 웹 브라우저 표시:
- HTTP를 사용하는 웹사이트는 브라우저 주소창에 "http://"로 표시되며, 추가적인 보안 표시가 없습니다.
- HTTPS를 사용하는 웹사이트는 브라우저 주소창에 "https://"로 표시되며, 보통 자물쇠 아이콘이 함께 나타나 안전한 연결임을 표시합니다.
- 성능:
- HTTP는 암호화가 없기 때문에 HTTPS보다 빠를 수 있습니다.
- HTTPS는 암호화 및 복호화 과정이 추가되기 때문에 약간의 성능 오버헤드가 있지만, 현대적인 하드웨어와 소프트웨어 최적화를 통해 이 차이는 최소화되었습니다.
HTTP는 보안이 필요한 않는 데이터 전송에 적합할 수 있지만, 민감한 정보를 다루거나 사용자 신뢰가 중요한 웹사이트에서는 HTTPS를 사용하는 것이 필수적입니다. HTTPS는 데이터 전송의 기밀성과 무결성을 보장하며, 오늘날 대부분의 웹사이트에서 표준으로 채택되고 있습니다.
'항해 99' 카테고리의 다른 글
기술면접 대비 5주차 (0) | 2024.05.16 |
---|---|
CS / 알고리즘 공부 1 - 운영 체제 (0) | 2024.05.14 |
SSL / TLS (0) | 2024.05.08 |
WIL - 13 (0) | 2024.05.06 |
Proxy (0) | 2024.05.04 |