OSI 7계층이란?
네트워크에서 통신이 일어나는 과정을 단계별로 나눈 것
- 물리계층
- 전기적, 물리적 세부 사항을 정의하는 계층
- 리피터, 허브
- 데이터링크
- 같은 LAN 안의 연결된 컴퓨터들끼리 MAC 주소로 통신이 가능하게 해준다.
- 스위치
- 네트워크
- 데이터를 목적지까지 안전하고 가장 빠른 경로로 전달해준다.
- IP 주소를 이용해 다른 LAN에 속한 컴퓨터로 데이터를 전송할 수 있다.
- 라우터
- 전송
- 양 끝단의 사용자들이 신뢰성 있는 데이터를 주고 받을 수 있도록 해준다.
- 포트번호로 데이터의 목적지를 식별할 수 있다.
- TCP, UDP
- 세션
- 양 끝단의 응용 프로세스가 통신을 하기 위한 방벙블 제공
- TCP/IP 세션을 생성하고 없앤다.
- 표현
- 데이터 표현에 대한 독립성 제공화 암호화 역할을 담당
- 응용
- 최종 목적지로 응용 프로세스와 직접 관계하여 일반적인 응용 서비스 수행
https://www.google.com 을 접속했을 때 일어나는 일
1) 브라우저가 URL에 적힌 값을 파싱해서 HTTP Request Message를 생성하고, OS에 전송 요청을 한다. 이때, Domain으로 요청을 보낼 수 없기 때문에 DNS LookUp을 수행한다. 2) 캐싱된 DNS 기록을 확인한다
- 브라우저 캐시 확인
- OS 캐시 확인
- 라우터 캐시 확인
- ISP 캐시확인 (Internet Service Provider) 3) 모든 캐시가 존재하지 않으면 ISP가 Dns Query통해 검색 4) 브라우저는 전달받은 IP 주소로 TCP/IP 연결 (3 way handshaking) 5) TCP 연결이 완료되면 브라우저가 웹 서버에 HTTP 요청 6) 서버에서 요청을 처리하고 reponse 반환
- 정적인 작업은 웹서버가 처리
- 동적인 작업은 WAS가 처리
- WAS의 작업이 끝나면 웹서버로 결과 전송 8) 브라우저가 Html content를 사용자에게 보여줌
HTTP란?
- 클라이언트와 서버가 데이터를 주고받을 수 있는 프로토콜이다.
- 비연결 지향: 클라이언트가 request를 서버에 보내고 서버가 응답을 보내면 연결을 끊는다.
- 무상태성: 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.
HTTP vs HTTPS
- HTTP
- 암호화 없음: 데이터 평문 전송
- 포트 번호: 80
- 보안 위험 존재: 패킷 탈취시 데이터 그대로 노출
- HTTPS
- 암호와 있음: SSL/TLS 프로토콜을 사용해 데이터 암호화
- 공개키/대칭키를 통한 암복호와
- 포트 번호: 443
- Http Body 암호화 Header는 암호화 x
- 전송 계층과 응용 계층 사이에서 암호화 진행
- 암호화 통신방법
- A에서 B로 접속 요청
- B에서 공캐키를 A로 전달
- A는 자신의 대칭키를 공개키 A로 암호화하여 전달
- B는 개인키로 복호화하여 A의 대칭키 획득
- 얻어낸 대칭키를 이용하여 요청 획득
- 암호와 있음: SSL/TLS 프로토콜을 사용해 데이터 암호화
HTTP 버전별 특징
- HTTP 0.9
- 요청 및 응답 헤더가 존재하지 않고 HTML 문서만 전송 가능
- GET 메서드만 사용 가능
- HTTP 1.0
- 커넥션마다 TCP 연결 시도
- Content-Type 도입으로 HTML 이외의 문서 전송 가능
- GET, POST, HEAD 메서드 사용 가능
- HTTP 1.1
- Keep-Alive 기능을 통해 일정 시간 또는 횟수 동안 연결을 닫지않고 유지
- 반복되는 핸드쉐이크 과정을 줄여 속도 개선
- HTTP 2.0
- 멀티플렉싱으로 하나의 연결 안에서 여러 응답과 요청을 동시에 처리
GET과 POST 차이
- GET
- 요청 데이터가
HTTP Request Message
의 Header 부분에 url 이 담겨서 전송된다. - 전송할 수 있는 데이터의 크기가 제한적이다.
- 보안이 필요한 데이터에 대해서는 적절하지 않다.
- 요청 데이터가
- POST
- 요청 데이터가
HTTP Request Message
의 Body 부분에 데이터가 담겨서 전송된다. - 서버의 상태를 변경시키기 때문에 멱등성이 유지되지 않는다.
- 요청 데이터가
부수적인 차이점을 좀 더 살펴보면 GET 방식의 요청은 브라우저에서 Caching
할 수 있다.
때문에 POST 방식으로 요쳥해야 할 것을 보내는 데이터가 작고 보안적인 문제가 없다는 이유로 GET 방식으로 요청한다면,
기존에 캐싱 되었던 데이터가 응답될 가능성이 존재한다.
TCP와 UDP의 차이
- TCP(Transmission Control Protocol)
- 신뢰성 있는 데이터 전송을 위한 연결 지향성 프로토콜
- UDP에 비해 속도가 느리다
- 파일 전송, 이메일 전송과 같은 신뢰성이 중요한 서비스에 사용된다.
- UDP(User Datagram Protocol)
- 연걸 설정 및 확인 단계 없이 데이터 전송하는 비연결 지향성 프로토콜
- 데이터 손실이나 순서 변경 가능성이 존재하며, 수신 확인 또는 재전송을 처리하지 않는다.
- 실시간 스트리밍, 온라인 게임, DNS 등과 같은 서비스에 사용.
HTTP 프로토콜에 대해 설명
- Hypertext Transfer Protocol을 의미
- 컴퓨터 간의 데이터 전달을 위한 약속을 나타내며, 데이터를 요청하는 쪽은 클라이언트, 받는 쪽은 서버라고 지칭
- 기존에는 Hypertext를 의미하는 HTML 문서를 교환했지만, 이제는 다양한 미디어 리소스를 주고받는 형태로 발전
HTTP 메서드 종류
- GET(리소스 조회)
- 보통 리소스를 조회할 때 사용하며, 서버에 전달하고 싶은 데이터는 query를 통해서 전달한다.
- 메시지 바디를 사용해서 데이터를 전달할 수는 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.
- POST(요청 데이터 처리, 데이터 등록에 사용)
- 데이터 요청을 처리하고, 메시지 바디를 통해 서버로 데이터를 전달한다.
- 주로 신규 리소스를 등록하거나 프로세스 처리에 사용된다.
- PUT(리소스를 대체, 해당 리소스가 없으면 생성)
- 소스가 있으면 대체하고 리소스가 없으면 생성한다. 쉽게 말해 데이터를 덮어쓴다.
- PATCH(리소스를 일부만 변경)
- PUT과 마찬가지로 리소스를 수정하지만, 리소스를 일부분만 변경할 수 있다.
- DELETE(리소스 삭제)
- 리소스 삭제할때 사용
HTTP 메서드 특징
- 안전(Safe Method)
- 계속해서 메서드를 호출해도 리소스를 변경하지 않는다.
- 주요 메서드 중에는 GET 메서드가 안전하다고 볼 수 있다.
- 멱등(Idempotent Method)
- 메서드를 계속 호출해도 결과가 동일함
- GET,PUT,DELETE는 멱등하지만, POST, PATCH는 멱등하지 않다.
- 캐싱(Caching)
- GET,HEAD,POST,PATCH 모두 캐시가 가능하다.
- 실제로는 GET과 HEAD만 주로 캐싱이 사용된다.
HTTP Status Code 설명
- 1XX (information - 조건부 응답)
- 클라이언트가 서버에 정보를 요청했지만 아직 처리중임을 의미
- 2XX (Successful - 성공)
- 서버가 브라우저의 요청을 수신하고 성공적으로 처리했음을 의미
- 3XX (Redirection - 리디렉션)
- 요청된 페이지가 일시적으로 또는 영구적으로 이동되었음을 클라이언트에 알림
- 원래 요청한 리소스를 더 이상 사용할 수 없다.
- 4XX (Client Error - 요청 오류)
- 잘못된 요청으로 서버가 이해를 못해 요청을 수행할 수 없음을 의미
- 5XX (Server Error - 서버 오류)
- 서버 오류로 인해 서버가 요청을 정상 처리 하지 못함을 의미
중요한 HTTP Status Code
- 200 (OK)
- 모든 것이 정상적으로 수행 되었음을 의미
- 301 (Moved Permanently)
- URL이 영구적으로 다른 위치로 이동했음을 의미
- 해당 요청 및 이후의 모든 요청은 다른 URL로 리디렉션 되어야 한다.
- 302 (Found / Moved Temporarily)
- URL이 일시적으로 다른 위치로 이동했음을 의미
- 401 (Unauthorized)
- 클라이언트가 인증되지 않았거나, 유효한 인증 정보가 부족하여 요청이 거부됨
- ex) 사용자가 로그인되지 않은 경우
- 403 (Forbidden)
- 서버가 해당 요청을 이해했지만, 권한이 없어 요청이 거부됨
- ex) 사용자가 권한이 없는 요청을 하는 경우
- 500 (Server Error)
- 서버가 사용자의 리소스 요청을 처리할 수 없을 때 나타난다.
- 서버 구성 에러로 인해 발생하는 일반적인 에러입니다
- 503 (Service Unavailable)
- 버를 현재 사용할 수 없으며 그 결과 클라이언트의 요청을 처리할 수 없음을 나타낸다.
프록시 서버란?
- 클라이언트와 서버 사이에 위치한 중계 서버
- 클라이언트의 요청을 받아 서버로 전달하고, 서버의 응답을 받아 클라이언트로 전달한다.
- 프록시 서버를 통해 클라이언트의 IP 주소를 숨길 수 있다.
- 캐싱을 통해 빠른 데이터 전송이 가능하다.
쿠키와 세션의 차이
- 쿠키
- 클라이언트 로컬에 저장되는 키-밸류 형태의 데이터
- 클라이언트의 상태 정보를 로컬에 저장하고, 서버에 전송한다.
- 클라이언트가 요청을 보낼 때마다 서버에 전송된다.
- 클라이언트에 저장되기 때문에 보안에 취약하다.
- 세션
- 서버에 저장되는 클라이언트의 상태 정보
- 클라이언트가 서버에 접속하면 서버에서 세션을 생성하고, 클라이언트에게 세션 ID를 부여한다.
- 세션 ID를 쿠키에 저장하고, 클라이언트가 요청을 보낼 때마다 세션 ID를 서버에 전송한다.
- 서버에 저장되기 때문에 보안에 강하다.
REST API란?
- REST(Representational State Transfer)
- 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 것
- HTTP URI를 통해 자원을 명시하고, HTTP Method를 통해 자원에 대한 CRUD Operation을 수행한다.
- RESTful API는 REST 아키텍처를 따르는 API를 의미한다.
rabbitMQ란
- rabbitMQ
- AMQP(Advanced Message Queuing Protocol)를 구현한 오픈소스 메시지 브로커 소프트웨어
- 메시지 지향 미들웨어로서 메시지 큐를 통해 메시지를 교환한다.
- 메시지를 보내는 쪽을 Producer, 받는 쪽을 Consumer라고 한다.
Kafka란?
- Kafka
- 분산 스트리밍 플랫폼
- 대용량의 데이터를 높은 처리량으로 처리할 수 있다.
- Producer가 데이터를 보내면, Consumer가 데이터를 받아 처리한다.
- Topic을 통해 데이터를 구분한다.
CORS란?
- CORS(Cross-Origin Resource Sharing)
- 다른 도메인 간의 자원 공유를 허용하는 메커니즘
- 웹 브라우저의 동일 출처 정책(Same-Origin Policy)로 인해 다른 도메인 간의 자원 공유가 제한되는데, CORS를 통해 이를 해결할 수 있다.
- 서버에서 헤더를 설정하여 다른 도메인에서 자원을 요청할 수 있도록 허용한다.
- Access-Control-Allow-Origin 헤더를 통해 허용할 도메인을 설정한다.
CSRF란?
- CSRF(Cross-Site Request Forgery)
- 사용자가 의도하지 않은 요청을 통해 공격자가 사용자의 권한을 이용해 특정한 동작을 하도록 유도하는 공격
- 사용자가 웹사이트에 로그인한 상태에서 공격자가 악의적인 요청을 전송하여 사용자의 권한을 이용하는 공격
- CSRF 토큰을 사용하여 방어할 수 있다.