웹 서버 방식에서는 기본적으로 HTTP 프로토콜을 사용하여 통신을 진행한다.
따라서 우선적으로 HTTP 프로토콜이 무엇이고, 어떤 식으로 동작하는지 알아야 할 필요가 있음
HTTP
HyperText Transfer Protocol의 약자로 TCP/IP 프로토콜 집합에 속함
HTTP 통신은 크게 리퀘스트(Request)와 리스폰스(Response)로 이루어짐
- 클라이언트에서 서버로 보내는 요청이 리퀘스트
- 클라이언트의 요청에 대한 서버의 응답이 리스폰스
HTTP 통신은 상태를 유지하지 않는 무상태(Stateless) 프로토콜
- 무상태(Stateless) : 서버가 각 세션에 대한 값을 메모리에 저장하지 않기 때문에 클라이언트의 상태를 기억하지 못함 따라서 서버가 유지해야 하는 자원의 양이 줄어듦
- 단, 이전의 리퀘스트 및 리스폰스 정보를 기억하지 못하기 때문에 새 리퀘스트가 부여될 때마다 매번 새로운 리스폰스를 생성하는 오버헤드가 발생
- 쿠키(Cookie)를 사용할 경우 이러한 단점을 어느 정도 해소할 수 있음
HTTP 메서드(method)
GET : 서버로부터 정보를 조회하기 위해 설계된 메서드
GET www.example-url.com/resources?name1=value1&name2=value2
- 요청 전송 시 필요한 데이터를 Body에 담는 대신 쿼리 스트링을 통해 전송
- 쿼리 스트링 : URL 끝에 '?' 뒤에 존재하는 '이름=값&이름=값...'의 형태를 지닌 파라미터
- 쿼리 스트링의 값들이 그대로 노출되기 때문에 보안이 필요한 경우에는 사용할 수 없음
- 동일 요청 발생 시 캐싱을 사용하기 때문에 상대적으로 전송 속도가 빠름
- 애플리케이션이나 브라우저에 따라 일반적으로 헤더 큰 키에 제한이 걸려있기 때문에 간단한 데이터 요청 시에만 주로 사용
POST : 리소스를 생성 / 변경하기 위해 설계된 메서드
POST www.example-url.com/resource
Host: ...
Content-Type: ...
...
- 전송해야 할 데이터를 Body에 담아서 전송하기 때문에 데이터 크기의 제한이 없다.
- Content-Type에 요청할 데이터의 타입을 표기, 해당 표기가 존재하지 않을 시 서버에서 데이터 타입을 유추한다.
- GET과 달리 데이터가 직접적으로 표시되지 않지만 여러 툴로 내용을 확인할 수 있기 때문에 보안이 필요한 경우 암호화 작업을 거쳐야 한다.
GET vs POST
멱등성(Idempotent) 여부에 따른 성질의 차이가 존재
GET : 멱등성(Idempotent)
- 동일한 연산을 여러 번 수행하더라도 매번 반드시 동일한 결과가 나타나야 함
- 즉, 서버에게 동일한 요청을 전송 시 동일한 응답이 반환되어야 함
- 따라서 서버의 데이터나 상태가 변경되지 않는 요청에 사용
POST : 비멱등성(Non-Idempotent)
- 동일한 연산을 여러 번 수행할 시 서로 다른 결과가 나타날 수 있음
- 즉, 서버에게 동일한 요청을 전달하더라도 응답은 항상 다를 수 있음
- 따라서 서버의 데이터나 상태가 변경되는 요청에 사용
HTTPS
HTTP에 데이터 암호화가 추가된 프로토콜
대칭키 암호화와 비대칭키 암호화를 모두 사용하여 빠른 연산 속도와 안정성을 모두 획득함
- 대칭키 암호화
- 클라이언트와 서버가 동일한 키로 암호화 및 복호화를 진행
- 연산 속도가 빠르지만 키가 노출될 시 보안이 깨질 위험이 존재
- 비대칭키 암호화
- 한 쌍으로 구성된 공개키와 개인키로 암호화 및 복호화를 진행
- 연산속도가 느리지만 키가 노출되어도 비교적 안전함
HTTPS 연결 과정은 다음과 같음
- 클라이언트가 서버로 연결 시도
- 서버는 공개키(인증서)를 클라이언트에 넘겨줌
- 클라이언트는 공개키의 유효성을 검사(개인키로 복호화)하여 세션키(대칭키) 발급
- 클라이언트는 세션키를 보관하며 서버의 공개키로 세션키를 암호화하여 서버로 전송
- 서버는 개인키로 암호화된 세션키를 복호화하여 획득
- 따라서 클라이언트와 서버가 동일한 세션키를 공유하므로 데이터 전달 시 세션키로 암호화 및 복호화를 진행
함께 읽으면 좋은 글
참고 사이트
'프로그래밍 > 네트워크' 카테고리의 다른 글
시리얼 통신(Serial Communication)이란 무엇인가? (0) | 2024.10.07 |
---|---|
인증서 생성 시 알게 된 x509에 대해서 알아보자 (1) | 2024.09.23 |
SSL 인증서 유효기간 확인 방법 (0) | 2024.09.20 |
SSL 인증서 종류에 대해서 알아보자 (1) | 2024.09.10 |
[::] 해당 IP 표기는 뭘까? IPv6 주소 표기법에 대해서 (0) | 2024.09.05 |
댓글