HTTP란?
Hyper Text Transfer Protocol의 약자로 서로 다른 시스템들 사이에서 통신을 주고받게 하는 프로토콜.
HTTP 요청의 흐름(웹 브라우저)
브라우저 (Http 요청 메세지)
OS (DNS서버를 조회해 IP주소로 변환)
프로토콜 스택 (메세지를 패킷에 저장)
LAN어댑터 (메세지를 전기신호로 변환)
라우터 (이 패킷을 엑세스 회선에 전달)
엑세스 회선 (패킷이 통신사용 라우터에 전달)
방화벽 (패킷을 검사)
웹 서버 (요청에 대한 비즈니스 로직을 수행해서 응답 데이터를 회송)
HTTP 통신 과정 (클라이언트 - 서버 프로토콜)
Client가 HTTP 요청을 서버에 보내면, 서버는 요청을 처리하기위해 비즈니스 로직을 수행합니다.
수행한 결과에 따른 HTTP 응답을 다시 Client에게 보냅니다.
이러한 요청/응답사이에 다양한 작업을 수행하는 Proxy나 게이트웨이가 존재합니다. 이는 HTTP 메세지를 대신 전송하는 OS나 메세지를 전기신호로 변환하는 어댑터, 네트워크, 방화벽 등이 해당됩니다.
HTTP와 HTTPS
HTTP는 평문 데이터를 기반으로 민감한 정보가 인터넷 상에 그대로 노출된다. 이 정보는 수집되거나 변조될 수 있다. 또한, 통신 상대를 확인하지 않기 때문에 변조, 위장이 가능합니다.
HTTPS는 HTTP에서 SSL개념을 더한 보안이 강화된 프로토콜입니다. 기존 HTTP는 TCP와 직접 통신했지만, HTTPS는 SSL을 기준으로 통신합니다. 즉, HTTP와 SSL이 통신하고 SSL이 TCP와 통신하게 됩니다.
SSL(Secure Sockets Layer)의 통신 원리
- Client가 Server에 접속하면 서버 인증서를 전송받는다.
- Client는 받은 서버 인증서를 분석하여 신뢰할 수 있는 인증서인지 검토 후, 서버의 공개키를 추출.
- Client가 세션키로 사용할 임의의 메세지를 서버의 공개키로 암호화하여 서버에 전송.
- Server에서는 자신의 개인키로 세션키를 복호화하여 그 키를 사용해 대칭키 암호방식으로 메시지를 암호화하여 Client와 통신.
즉, SSL은 암호화된 데이터를 전송하기 위해서 공개키와 대칭키를 혼합해서 사용한다.
TCP/UDP 등 low level 통신지식
TCP 3-way handshake, 4-way handshake
TCP는 흐름제어, 오류제어를 통한 연결 지향성, 정보를 주고받는 신호절차가 있어서 신뢰도가 보장.
UDP는 비연결형 프로토콜, 단순한 헤더구조로 오버헤드가 적다. 신뢰성보다 속도를 중요시 여긴다.
3-way handshake(연결 설정)
- Client가 Server에 접속을 요청하는 SYN패킷 전송.
- SYN요청을 받은 Server는 수락한다는 의미로 ACK와 SYN flag가 설정된 패킷을 Client로 전송.
- 이 패킷을 받은 Client는 패킷을 받았다는 확인을 위해 ACK를 다시 Server에 전송해서 연결이 설정.
4-way handshake(연결 해제)
- Client가 Server에 연결을 종료하겠다는 FIN flag를 전송
- Server는 요청받은 FIN을 받고 확인 메세지로 ACK를 전송, 연결이 종료되면 FIN flag를 다시 전송.
- FIN flag를 받은 Client는 확인 메세지로 ACK를 Server에 전송.
- 마지막으로 ACK를 받은 Server는 소켓 연결을 close하고 연결이 해제
CORS란?
Cross Origin Resource Sharing의 약자로 다른 도메인간의 자원 공유를 의미. CORS는 헤더를 통해 Cross-Domain간 사용 가능한 자원을 헤더를 통해 알려준다. 또한, 외부 사이트에서 세션을 탈취하는 행동을 막을 수 있습니다.
동작과정은 브라우저가 자원을 요청할 때 추가적인 헤더에 정보를 담습니다. 내 Origin은 무엇이고 어떤 메소드를 사용해서 요청을 할 것이고 어떤 헤더들을 포함할 것인지를 담아 서버에 전송합니다. 서버는 응답할 수 있는 Origin들을 헤더에 담아서 브라우저에게 보냅니다. 브라우저가 이 헤더를 보고 해당 Origin에서 요청할 수 있다면 리소스 전송을 허용하고 만약 불가능하다면 에러를 발생시킵니다.
OSI 7계층
OSI 참조 모델은 다른 시스템 간의 원활한 통신을 위해 만들어진 통신 규약입니다. 총 7계층으로 구성돼 물, 데, 네, 전, 세, 표, 응으로 구성되어 있습니다. 통신이 일어나는 과정을 단계별로 파악해, 트러블 슈팅이 용이하다는 장점이 있다.
- 물리 계층: 전송에 필요한 두 장치 간의 실제 접속과 절단 등에 대한 규칙으로 물리적 전송 매체와 전송 신호방식을 정의
- 데이터 링크 계층: 두 개의 시스템들 간에 신뢰성있고 효율적인 정보 전송을 합니다. 흐름제어, 오류제어 등을 수행
- 네트워크 계층: 시스템들 간의 네트워크 연결 관리와 데이터 교환 및 중개 기능. 트래픽제어와 패킷 정보 전송 등
- 전송 계층: 논리적 전송과 균일한 데이터 전송 서비스를 제공. 종단 시스템 간의 투명한 데이터 전송. TCP, UDP 등의 표준이 있으며 OSI 7계층의 인터페이스를 담당합니다.
- 세션 계층: 송, 수신측 간의 관련성 유지, 대화 제어 담당.
- 표현 계층: 응용 계층과 세션 계층사이에서 데이트를 보내기 전에 통신에 적당한 형태로 변환, 코드 변환, 문맥 관리, 데이터 암호화 등을 수행.
- 응용 계층: 사용자가 OSI환경에 접근할 수 있도록 서비스를 제공.
TCP/IP 4계층
TCP/IP란 컴퓨터들이 서로 데이터를 주고받을 수 있도록 하는 표준 프로토콜이다. 응용, 전송, 인터넷, 네트워크 계층으로 이루어져 있다.
- 응용 계층: 응용 프로그램 간의 데이터 송, 수신 제공
- 전송 계층: 호스트들 간의 신뢰성있는 통신 제공
- 인터넷 계층: 데이터 전송을 위한 주소 지정, 경로 설정을 제공
- 네트워크 액세스 계층: 실제 데이터를 송, 수신하는 역할
쿠키와 세션
쿠키는 Client에 저장되는 키와 값이 들어있는 데이터 파일. 이름, 값, 쿠키 저장기간, 경로 정보가 들어있는데 보안에 취약하다는 단점이 있다.
세션은 Client와 Server간의 네트워크 연결이 지속적으로 유지되고 있는 상태를 의미. 쿠키와 달리 서버에 저장되는 방식으로 보안성이 있다.
둘은 비슷한 역할을 하지만 저장되는 위치가 가장 큰 차이점이다. 보안성을 고려한다면 세션, Server에 공간이 부족하고 다른 프로그램과 연동해야 할 경우에는 쿠키.
'Small talk > 면접 준비' 카테고리의 다른 글
[Java] 신입 개발자의 면접 준비 (0) | 2021.04.12 |
---|---|
신입 개발자 직무면접 정리 - 알고리즘편 (0) | 2020.10.06 |
신입 개발자 직무면접 준비 - DB편 (0) | 2020.10.05 |
신입 개발자 직무면접 정리 - 운영체제편 (0) | 2020.10.05 |
신입 개발자 직무면접 정리 - Java편 (0) | 2020.10.02 |