CS 대비 기술 면접 (1)
RESTful API란?
REST는 자원을 기반으로 한 아키텍처 스타일로, 주로 HTTP 프로토콜을 통해 클라이언트와 서버 간의 통신을 설계하는 방식입니다.
RESTful API란 REST 원칙을 따르면서 클라이언트가 서버와 상호작용할 수 있는 API입니다.
REST 원칙은 또 뭐야? 라는 생각이 드실 수도 있습니다.
REST 원칙
1. 자원
GET /posts 이런식으로 요청을 하면 우리는 아 게시물들을 가져오려고 하는 구나라고 생각 할 수 있습니다. 여기서 이러한 /posts같은 각 자원은 고유한 URI로 식별됩니다.
2. HTTP 메서드
위에서 볼 수 있듯이 GET 방식을 쓰면 조회라는 것을 우리는 알 수 있습니다. 이러한 방식을 HTTP 메서드라고 합니다.
RESTful API는 HTTP 메서드를 통해 자원에 대한 작업을 정의합니다. 주로 사용되는 HTTP 메서드는 다음과 같습니다:
- GET: 자원을 조회할 때 사용.
- POST: 자원을 생성할 때 사용.
- PUT: 자원을 수정할 때 사용(전체 수정).
- PATCH: 자원의 일부를 수정할 때 사용(부분 수정).
- DELETE: 자원을 삭제할 때 사용.
3. 표현
서버에서 클라이언트가 필요한 자원을 어떠한 형태로 줘야 할까요?
클라이언트는 서버로부터 자원의 "표현"을 받습니다.REST는 데이터를 전송하는 형식을 제한하지 않으며, 클라이언트가 필요한 형식으로 자원을 요청할 수 있습니다.
이 표현은 주로 JSON(JavaScript Object Notation)이나 XML 같은 형식으로 전달됩니다.
OSI 7계층은 무엇인가.
OSI 모델은 모든 네트워크 장치와 시스템에서 통일된 표준을 제공하여, 서로 다른 장치나 시스템이 상호 운영될 수 있도록 합니다. 즉, 다양한 벤더나 시스템 간의 상호 호환성을 보장합니다.
네트워크를 7개의 계층으로 나누면 각 계층에서 발생할 수 있는 문제를 분리하여 해결할 수 있습니다. 이는 디버깅 및 네트워크 문제 해결을 더 쉽게 만들어 줍니다. 예를 들어, 전송 계층에서의 문제가 응용 계층의 문제와 독립적으로 해결될 수 있습니다.
물리 계층 (Physical Layer)
역할: 실제 물리적 연결을 담당하며, 전기 신호, 광 신호 또는 무선 신호로 데이터를 전송합니다.
예시: 케이블, 스위치, 허브, 전압 수준, 핀 배열 등.
데이터 링크 계층 (Data Link Layer)
역할: 물리 계층을 통해 데이터가 안전하게 전송되도록 프레임 단위로 데이터를 관리하며, 오류 감지와 수정, 흐름 제어를 수행합니다.
예시: MAC 주소, 스위치, 브리지.
네트워크 계층 (Network Layer)
역할: 데이터를 목적지로 라우팅하며, 경로를 결정하고 IP 주소 등을 통해 패킷을 목적지에 전달합니다.
예시: IP 주소, 라우터.
전송 계층 (Transport Layer)
역할: 데이터 전송의 신뢰성을 보장하며, 패킷을 세그먼트로 나누고, 흐름 제어 및 오류 제어, 연결 설정 등을 담당합니다.
예시: TCP, UDP.
세션 계층 (Session Layer)
역할: 통신 세션을 관리하며, 연결을 설정하고 유지하며 종료하는 역할을 합니다.
예시: API, 소켓, 세션 관리.
표현 계층 (Presentation Layer)
역할: 데이터를 응용 계층에서 사용하는 형식으로 변환하며, 암호화, 압축, 데이터 변환 등을 담당합니다.
예시: 암호화, 데이터 압축, 데이터 포맷 변환 (JPEG, GIF, ASCII 등).
응용 계층 (Application Layer)
역할: 최종 사용자가 네트워크에 접근할 수 있도록 하는 계층으로, 사용자가 직접 상호작용하는 소프트웨어와 네트워크 기능을 연결합니다.
예시: HTTP, FTP, SMTP, DNS, 웹 브라우저, 이메일 클라이언트.
예시 : https://example.com를 검색창에 입력했다고 가정해 보자.
응용 계층 (Application Layer) - Layer 7
역할: 사용자가 입력한 URL을 기반으로 웹 브라우저가 HTTP 요청을 생성합니다.
흐름: 사용자가 웹 브라우저에 http://example.com을 입력합니다. 이때 브라우저는 HTTP 프로토콜을 사용하여 서버에 데이터를 요청하는 GET 요청을 만듭니다.
표현 계층 (Presentation Layer) - Layer 6
역할: 데이터를 네트워크에서 주고받기 쉽게 포맷팅하거나, 암호화/복호화합니다.
흐름: 브라우저는 데이터를 전송하기 전에 필요한 경우 이를 압축하거나 암호화할 수 있습니다. 만약 웹사이트가 HTTPS(암호화된 통신)를 사용하는 경우, 이 계층에서 SSL/TLS 암호화가 수행됩니다.
세션 계층 (Session Layer) - Layer 5
역할: 클라이언트와 서버 간의 통신 세션을 관리합니다. 연결을 설정하고, 데이터 전송이 끝나면 세션을 종료합니다.
흐름: 브라우저는 서버와 세션을 시작하고 통신을 시작합니다. 만약 재연결이 필요한 경우, 세션 계층은 이 연결을 관리합니다. HTTP는 비연결형 프로토콜이므로 각 요청마다 새로운 연결이 설정될 수 있습니다.
전송 계층 (Transport Layer) - Layer 4
역할: 데이터의 신뢰성 있는 전송을 담당합니다. 데이터가 잘 전달되었는지 확인하고, 손실된 데이터가 있다면 재전송합니다.
흐름: TCP(전송 제어 프로토콜)를 사용하여 브라우저는 서버와 연결을 맺습니다. TCP는 패킷을 작은 세그먼트로 나누고, 이를 번호를 붙여서 전송합니다. 각 세그먼트가 잘 도착했는지 확인하며, 누락된 세그먼트는 다시 요청합니다.
네트워크 계층 (Network Layer) - Layer 3
역할: 데이터 패킷을 목적지까지 라우팅하고, IP 주소를 사용해 네트워크 상에서 목적지를 찾습니다.
흐름: 브라우저의 요청은 IP 패킷으로 감싸져, 출발지 IP 주소(클라이언트)와 목적지 IP 주소(서버)가 포함됩니다. 이 정보는 라우터를 통해 목적지인 서버의 네트워크로 전송됩니다.
데이터 링크 계층 (Data Link Layer) - Layer 2
역할: 이더넷이나 Wi-Fi 같은 물리적인 네트워크에서 데이터 프레임을 전송합니다. 네트워크 장비 간의 통신을 위한 MAC 주소를 사용합니다.
흐름: 네트워크 인터페이스 카드(NIC)가 MAC 주소를 사용해 데이터를 네트워크를 통해 전달합니다. 패킷은 데이터 프레임으로 캡슐화되며, 로컬 네트워크 상의 스위치나 브리지를 통해 목적지까지 전송됩니다.
물리 계층 (Physical Layer) - Layer 1
역할: 전기 신호나 무선 신호, 광 신호로 데이터를 물리적으로 전송합니다.
흐름: 네트워크 케이블, 와이파이 신호 또는 광섬유를 통해 데이터가 실제로 전송됩니다. 데이터는 0과 1로 이루어진 신호로 변환되어 물리적 네트워크를 통해 전달됩니다.
DNS는 무엇인가?
웹사이트에 접속할 때, 사용자는 주로 "www.example.com" 같은 도메인 이름을 입력하는데, 컴퓨터는 이 도메인 이름을 직접 인식하지 못합니다.
컴퓨터는 대신 IP 주소를 통해 웹사이트에 접근합니다.
DNS는 도메인 이름을 IP 주소로 변환하여 사용자가 웹사이트에 쉽게 접속할 수 있도록 도와줍니다.
예를 들어, "www.example.com"이라는 도메인을 DNS 서버가 IP 주소 "192.0.2.1"로 변환해 주는 것입니다.
이를 통해 사용자들은 숫자로 이루어진 IP 주소를 기억할 필요 없이, 도메인 이름만 입력하면 해당 사이트로 연결됩니다.
소켓 프로그래밍이란?
소켓 프로그래밍은 네트워크 상에서 두 장치가 데이터를 교환하기 위한 기술로, 클라이언트와 서버 간의 통신을 설정하는 데 사용됩니다.
이를 통해 장치 간에 실시간 데이터를 주고받을 수 있으며, TCP와 UDP 프로토콜을 기반으로 연결 지향 또는 비연결 지향 통신을 구현할 수 있습니다.
TCP는 신뢰성을 보장하며, UDP는 빠른 전송을 목적으로 합니다. 이 기술은 웹 서버, 채팅 애플리케이션, 온라인 게임 등 다양한 분야에서 사용됩니다.
로드 밸런싱이란?
로드 밸런싱은 네트워크 트래픽을 여러 서버에 분산시켜서, 각 서버가 처리할 수 있는 작업을 균형 있게 나누어주는 기술입니다.
이를 통해 시스템의 성능을 최적화하고, 가용성을 높이며, 특정 서버에 과부하가 걸리는 것을 방지합니다.
로드 밸런서는 이러한 작업을 수행하는 장치나 소프트웨어를 말하며, 서버 간의 트래픽 분배를 자동으로 조정합니다.
또한 서버 수를 쉽게 추가하거나 제거할 수 있어, 시스템이 늘어나는 트래픽이나 변화하는 요구 사항에 유연하게 대응할 수 있습니다.
로드 밸런싱의 방법:
- 라운드 로빈(Round Robin): 각 요청을 서버에 순서대로 분배하는 방식.
- 가중 라운드 로빈(Weighted Round Robin): 각 서버의 처리 능력에 따라 가중치를 두고 트래픽을 분배.
- 최소 연결(Least Connections): 현재 연결된 수가 가장 적은 서버에 트래픽을 보냄.
- IP 해시: 클라이언트의 IP 주소를 기반으로 특정 서버에 고정적으로 요청을 보냄.
CDN이란?
CDN(Content Delivery Network)은 전 세계에 분산된 서버 네트워크를 통해 웹 콘텐츠를 더 빠르고 안정적으로 사용자에게 전달하는 시스템입니다.
웹사이트의 정적 콘텐츠(이미지, CSS, JavaScript, 동영상 등)의 복사본을 사용자와 가까운 서버에 캐시(cache)하여, 사용자에게 더 짧은 시간 내에 콘텐츠를 제공할 수 있도록 도와줍니다.
CDN의 주요 역할
- 빠른 콘텐츠 전달: CDN은 지리적으로 사용자에게 가까운 서버에서 콘텐츠를 제공하기 때문에 응답 시간이 짧아집니다. 예를 들어, 한국에 있는 사용자가 미국에 있는 서버에서 콘텐츠를 받아오는 대신, 한국에 위치한 CDN 서버에서 받아오기 때문에 더 빠르게 접근할 수 있습니다.
- 트래픽 분산: 웹사이트에 많은 사용자가 동시에 접속하더라도 CDN을 통해 트래픽이 여러 서버에 분산되어, 한 서버에 과부하가 걸리는 것을 방지하고 웹사이트가 안정적으로 유지될 수 있습니다.
- 대역폭 절감: CDN은 서버에서 동일한 콘텐츠를 반복해서 요청하는 대신 캐시된 콘텐츠를 제공하므로, 서버 대역폭을 절감할 수 있습니다.
- DDoS 공격 방어: CDN은 트래픽을 여러 서버에 분산시키기 때문에 DDoS(Distributed Denial of Service) 공격 같은 대규모 트래픽을 방어하는 데도 효과적입니다.
CDN의 활용 예
- 전 세계 사용자에게 콘텐츠를 빠르게 제공하는 웹사이트: 글로벌 서비스를 제공하는 웹사이트는 사용자 위치와 관계없이 빠른 접속을 보장하기 위해 CDN을 사용합니다.
- 동영상 스트리밍 서비스: YouTube, Netflix와 같은 대규모 스트리밍 서비스는 CDN을 통해 전 세계 사용자에게 원활한 동영상 스트리밍을 제공합니다.
- 정적 파일 배포: 이미지, CSS, JavaScript 파일 등 웹사이트의 정적 콘텐츠를 빠르게 전달하기 위해 CDN을 사용합니다.
'네트워크' 카테고리의 다른 글
[네트워크] 소켓 너는 대체 누구냐 (1) | 2024.10.27 |
---|---|
[네트워크] 컴퓨터 네트워크 정리1 (0) | 2024.10.10 |
[네트워크] 프록시 서버 너는 누구냐? (0) | 2024.10.07 |
[네트워크] 한 방에 해결하는 CORS: Spring Boot로 간단하게 처리하기 (0) | 2024.10.07 |