OSI 7 계층은 네트워크 통신 과정을 단계별로 자세하게 나눠서 설명한 이론적인 모델이다.
TCP/IP 4계층은 실제 인터넷에서 실제로 사용하는 구조로, OSI보다 더 단순하고 실용적으로 만들었다.
-> OSI는 응용 계층을 세션,표현, 응용 세가지로 나누지만, TCP/IP는 하나의 응용 계층으로 합쳐서 좀 더 단순하게 만들었다.
추가 설명
OSI는 개념 정리를 위한 기준, TPC/IP는 실제 구현을 위한 실용적 모델이다.
TCP는 데이터를 전송하기 전에 상대와 연결을 먼저 맺는 연결 지향형 프로토콜이다.
데이터가 순서대로 정확하게 전달되는 것을 보장하고, 수신 여부도 확인한다.
ex) 신뢰성이 중요한 웹 페이지, 파일 다운로드
UDP는 연결 없이 데이터를 보내는 비연결형 프로토콜이다.
전송 속도는 빠르지만, 수신 확인이나 순서 보장은 하지 않는다.
ex) 실시간 스트리밍, 게임, 화상 통화
HTTP는 웹 브라우저와 서버아 정보를 주고받기 위한 기본 통신 프로토콜이다.
HTTPS는 HTTP에 TLS라는 보안 프로토콜을 추가하여, 데이터 전송 시 암호화, 위조 방지, 무결성 검증을 통해 통신의 안전성을 보장한다.
IP 주소는 네트워크 상에서 컴퓨터나 장치의 고유한 식별자 역할을 합니다.
포트 번호는 그 컴퓨터 안에서 특정 프로그램이나 서비스를 구분하는 번호로, 여러 프로그램이 동시에 네트워크를 사용할 수 있도록 도와줍니다.
DNS 서버에서 도메인 이름을 요청해서 해당 서버의 IP 주소를 조회한다.
그 IP 주소로 TCP 연결을 맺어 통신을 시작한다.
만약 HTTPS를 사용하는 경우 TLS 핸드셰이크 과정을 통해 보안 연결을 설정한 뒤,
HTTP 프로토콜을 통해서 서버에서 HTML, CSS, JavaScript등 필요한 리소스를 받는다.
브라우저는 이 리소스들을 받아서, 웹 페이지를 렌더링한다.
사람들이 이해하고 기억하기 쉬운 도메인 네임을 컴퓨터가 통신할 때 사용하는 실제 IP 주소로 변환해주는 역할을 한다.
(전화번호부 역할)
- 3-way handshake
TCP 연결을 설정할 때 사용하는 과정
- 클라이언트가 서버에 SYN이라는 연결 요청 신호를 보낸다.
- 서버가 이에 대해 SYN-ACK라는 응답과 함께 자신의 연결 요청도 같이 보낸다.
- 클라이언트가 서버의 SYN에 대해 ACK 응답을 보내면, 연결이 성립된다.
- 4-way handshake
TCP 연결을 해제할 때 사용하는 과정
- 클라이언트가 서버에게 FIN 신호를 보내 연결을 끊자고 요청합니다.
- 서버는 FIN을 잘 받았다고 ACK 응답을 보냅니다.
- 서버도 이제 자신의 데이터 전송을 마치고, 클라이언트에게 FIN 신호를 보냅니다.
- 클라이언트가 서버의 FIN에 대해 ACK를 보내면 연결이 종료된다.
TIME_WAIT : TCP 연결을 종료한 쪽이, 상대방이 보낸 FIN 신호에 대한 최종 ACK 응답을 보낸 후에도 잠시 연결을 유지하는 상태이다.
-> 지연된 패킷이 다시 도착할 경우를 대비하기 위하거나, 상대방이 ACK응답을 받지 못했을 경우를 대비하기 위해 기다린다.
SYN (Synchronize) - 연결 시작 요청
FIN (Finish) - 연결 종료 요청
ACK (Acknowledge) - 응답 확인
메서드 설명 용도 예시 GET 서버에서 데이터를 조회할 때 웹 페이지 조회, 이미지 조회 POST 서버에서 데이터를 생성하거나, 전송할 때 회원가입, 글 쓰기, 게시글 업로드 DELETE 서버에서 데이터를 삭제할 때 게시글 삭제 PUT 서버에서 데이터를 수정할 때 (서버에 있는 데이터를 전체 수정) 게시글 전체 내용 수정 PATCH 서버에서 데이터를 수정할 때 (서버에 있는 데이터의 일부분만 수정) 게시글 일부 내용만 수정
쿠키는 클라이언트에 저장되는 작은 데이터로 사용자 식별이나 설정 정보를 저장하며,
세션은 서버에 저장되는 사용자 상태 정보로 보안이 더 높고 로그인 상태 유지 등에 사용됩니다.
| 구분 | 쿠키 | 세션 |
|---|---|---|
| 저장 위치 | 클라이언트에 저장 | 서버에 저장 |
| 저장 용량 | 상대적으로 작음(약 4KB 정도) | 상대적으로 큼(서버 메모리에 저장) |
| 보안 수준 | 낮음(노출 위험) | 높음(직접 노출되지 않음) |
| 사용 목적 | 사용자 식별, 로그인 정보 | 로그인 상태 유지, 사용자별 데이터 관리 |
| 데이터 접근성 | 클라이언트와 서버 모두 접근 가능 | 서버만 접근 가능 |
| 만료 기간 | 개발자가 설정 가능 | 일반적으로 브라우저 종료시 만료 |
| 전송 방식 | HTTP 요청 시마다 자동으로 함께 전송 | 세션 ID만 쿠키로 전달, 실제 데이터는 서버에 저장 |
| 번호 범위 | 의미 | 정상처리 여부 |
|---|---|---|
| 100 번대 | 정보 응답 | 요청을 받았으며 처리중 |
| 200 번대 | 성공 | 현재 URL에서 정상 처리 가능 |
| 300 번대 | 리다이렉션 | 현재 URL 에서는 처리 불가, 다른 URL 이동 필요 |
| 400 번대 | 클라이언트 오류 | 요청 문제로 처리 실패 |
| 500 번대 | 서버 오류 | 서버 문제로 처리 실패 |
| 상태 코드 | 의미 | 설명 |
|---|---|---|
| 200 OK | 성공 | 요청이 정상 처리됨, 응답 데이터 돌아옴 |
| 201 Created | 성공(자원 생성 됨) | POST 요청 후 새 리소스가 생성 됨 |
| 204 No Content | 성공(응답 데이터 없음 | 요청은 성공했지만 응답할 데이터가 없음 |
| 301 Moved Permanently | 영구 리다이렉션 | URL이 완전히 변경되었을 때 |
| 302 Found | 임시 리다이렉션 | 잠시 다른 URL로 이동, 주로 로그인 후 리다이렉션 등에 사용 |
| 304 Not Modified | 캐시된 리소스 사용 | 클라이언트가 가진 리소스가 최신이라 다시 받지 않아도 됨 |
| 400 Bad Request | 클라이언트 요청 오류 | 잘못된 요청 |
| 401 Unauthorized | 인증 필요 | 인증이 안됐거나, 실패 |
| 403 Forbidden | 권한 없음 | 인증은 됐지만 접근 권한이 없음 |
| 404 Not Found | 리소스 없음 | 요청한 페이지나 API가 존재하지 않음 |
| 405 Method not Allowed | 허용되지 않은 메서드 사용 | 지원하지 않는 HTTP 메서드 요청 시 |
| 500 Internal Server Error | 서버 내부 오류 | 서버 처리 중 오류 발생 |
| 503 Service unavailable | 서비스 이용 불가 | 서버 점검중, 과부하 상태 |
서버가 클라이언트의 이전 요청을 기억하지 않고, 각 요청을 독립적으로 처리하는 통신 방식을 의미한다.
HTTPS는 HTTP에 TLS 보안 계층을 추가한 프로토콜로, TLS 핸드셰이크 과정을 통해 암호화, 무결성, 서버 인증을 보장하며 사용자가 웹과 안전하게 통신할 수 있도록 도와줍니다.
브라우저가 다른 출처의 데이터에 접근할 수 있도록 허용해주는 메커니즘이다.
브라우저는 기본적으로 다른 출처에서 온 요청은 막는다.
서버가 특정 출처에 대해 요청을 허용하도록 명시하면,
프론트엔드와 백엔드가 다른 도메인에서 동작해도 통신할 수 있다.
브라우저 캐시 : 이미 받아온 정적 리소스를 브라우저 내부에 저장해 두었다가, 다음 요청 시 서버가 아닌 캐시된 파일을 사용해 바르게 응답하는 성능 최적화 기법이다.
- 처음 접속할 때 브라우저가 서버에 요청하고, 받은 파일을 브라우저 내부에 저장해둔다.
- 다음에 같은 페이지를 다시 접속하면, 서버에 요청하지 않고 저장해둔 캐시를 그대로 사용하여 빠르게 보여준다
- 파일이 바뀐 경우에는 새로 받아와서 덮어 쓴다.
- HTTP/1.1
텍스트 기반이며, 한 연결에 한 요청만 가능해서 여러 리소스를 받으려면 다수의 연결이 필요하다.
속도가 느리고 병목이 발생할 수 있다.
- HTTP/2
바이너리 기반으로 하나의 연결에서 여러 요청을 동시에 처리하는 멀티플렉싱을 지원한다.
헤더 압축, 서버 푸시 기능으로 성능이 크게 개선되었다.
헤더 압축 : HTTP 요청/응답에 포함되는 헤더들을 압축해서
전송 크기를 줄이고 통신 속도를 높인다.
서버 푸시: 클라이언트가 서버에 요청하지 않았지만 서버가 필요한 리소스를 미리 클라이언트에게 보내주는 기능
- HTTP/3
TCP 대신 UPD 위에 QUIC 프로토콜을 사용해 지연을 줄이고 빠르게 연결된다.
모바일 환경에서도 연결이 더 안정적이다.
QUIC 프로토콜 : UDP 위에서 동작하지만, TCP가 제공하는 신뢰성(연결 설정, 순서 보장, 재전송)을 자체적으로 구현
로드 밸런서는 사용자의 요청을 여러 서버에 고르게 분산시켜주는 장치이다.
서버 1대가 감당하기 어려울 만큼 요청이 많을 때, 여러 서버에 나눠서 처리함으로써 속도와 안정성을 높인다.
사용 이유
- 트래픽 분산 : 사용자 수가 몰려도 여러 서버가 나눠서 처리하여 서버 과부하 방지
- 서비스 안정성 향상 : 특정 서버에 장애가 나도, 다른 서버로 우회하여 서비스
- 성능 최적화 : 가장 적절한 서버에 요청을 보내 처리 효율을 높인다.
CDN은 콘텐츠 전송 네트워크 라는 뜻으로, 웹 콘텐츠를 사용자에게 더 빠르고 효율적으로 전달하기 위해 전 세계에 분산된 서버 네트워크를 의미한다.
사용자가 멀리 있는 원본 서버가 아니라, 가까운 위치의 CDN 서버에서 이미지나 영상, HTML 파일 같은 콘텐츠를 대신 받아오도록 도와준다.
-> 속도도 빨라지고, 서버 부담도 줄어든다.
Keep-Alive : 클라이언트와 서버가 한 번 연결한 TCP 연결을 일정 시간동안 유지해서, 같은 연결을 통해 여러 개의 HTTP 요청과 응답을 주고받을 수 있게 하는 기능이다.
사용 이유
매번 새로운 TCP 연결을 만드는 데 시간이 걸리는데, 연결을 계속 유지하면 속도를 줄일 수 있다.
이미지, css, js 등 여러 리소스를 한 연결로 빠르게 받을 수 있어 사용자 경험이 좋다.
NAT는 네트워크 주소 변환 기술로 사설 IP 주소를 공인 IP 주소로 변환하거나 그 반대로 변환하는 기능을 말한다.
역할
사설 네트워크 내 여러 장치가 하나의 공인 IP를 공유할 수 있게 한다.
-> 가정이나 회사 내부에 있는 여러 컴퓨터, 스마트폰 등이 하나의 공인 IP 주소를 통해 인터넷에 접속할 수 있도록 해준다.
외부에서 직접 사설 IP에 접근하기 어렵게 만들어 내부 네트워크를 보호하는 효과도 있다.
동일 출처 정책은 서로 다른 출처(프로토콜, 도메인, 포트)에서 온 리소스가 서로의 데이터에 접근하는 것을 제한하는 보안 정책이다.
웹 브라우저가 다른 출처에서 온 자바스크립트나 리소스가 내 데이터를 무단으로 접근하지 못하도록 제한하는 보안 메커니즘이다.
이를 통해사용자 개인정보 보호와 웹사이트 간 독립성을 유지한다.