네트워크/HTTP 완벽 가이드
11. 디지털 암호학
디지털 암호학 보안 HTTP를 공부하기 앞서 디지털 암호학의 기본 개념을 짚고 넘어갑시다. 1. 암호 메시지를 아무나 읽지 못하게 인코딩 / 디코딩하는 특정한 알고리즘입니다. 보통 인코딩하기 전을 평문, 인코딩 후를 암호문이라고 합니다. 2. 키 암호의 동작을 변경하는 숫자로 된 매개변수입니다. 이를 통해 만약 암호문과 알고리즘이 파악되더라도, 함부로 해독을 못하게 막을 수 있습니다. 예를 들어 평문의 각 알파벳을 N번째 뒤에 있는 알파벳으로 변경하는 Rotate(N) 암호를 가진다고 해봅시다. 만약 Rotate(3)으로 암호를 하고, 악의적인 사용자가 이 암호문을 reverseRotate(1)로 디코딩을 시도를 한다면 값은 'Apple'과는 다른 'Crrni'라는 잘못된 평문이 출력될 것입니다. 암호의..
09. 기본 인증
쿠키에서 이미 '클라이언트 IP'와 '로그인 방식'으로 사용자를 식별하는 방법을 배웠습니다. 이렇게 사용자를 식별하는 것이 인증의 시작입니다. 이번에는 이에 대한 간단한 인증을 배워봅시다. HTTP 인증 1. 기본적인 HTTP 인증 과정 HTTP에서는 인증 요구/응답 프레임워크를 제공하고 있습니다. 8장 쿠키에서 배운 '로그인 방식'을 떠올리면 됩니다. 인증이 필요한 데이터를 요청하면, 그에 대한 권한을 확인하기 위해 인증을 요구하는 방식이었습니다. 1. 클라이언트가 인증이 필요한 데이터를 요청한다. 2. 서버가 401 응답 코드 + WWW-Authenticate 헤더를 통해 인증을 요구한다. 3. 클라이언트는 로그인을 통해 인증을 한다. (보통 로그인 창 입력) 3-1. 클라이언트가 매 요청마다 로그인..
08. 쿠키
우리가 많이 찾는 인터넷 쇼핑몰에서는 내가 자주 산 물건이라고 하며, 상품 추천 칸이 따로 있습니다. 또 결제를 할 때도, 사용자만 인증을 한다면, 즉시 저장된 결제 정보를 가지고 결제를 할 수 있습니다. 유튜브에서는 로그인한 계정에 따라 개인 추천 동영상이 달라집니다! 이렇게 그 사용자에 맞는 정보를 제공하는 것은 아주 중요합니다. 사용자 정보와 식별 정보를 제공하기 앞서 이 사용자가 누구인지에 대한 식별이 필요합니다! 사용자 정보는 어디서 가져오고, 또 어떻게 식별을 하는지 알아봅시다. 사용자 정보를 가지는 HTTP 헤더 컴퓨터들은 7가지의 HTTP 헤더로 사용자 정보를 주고받습니다. 이 정보들을 통해, 이 사용자가 누구인지 접근 권한이 있는지, 또 어떤 데이터를 찾는 경향이 있는지를 알 수 있습니다..
07. 게이트웨이&터널&릴레이
캐시 이외에도 유명한 3가지 용어인, 게이트웨이 터널 릴레이에 대해 알아봅시다. 게이트웨이 현대의 웹 사이트를 보면 로그인부터, 광고, 다른 기능 등등.. 여러 기능들이 구현되어 있습니다. 이렇게 많은 기능을 구현하기 위해서는 많은 리소스와 또 이를 처리할 여러 애플리케이션이 필요합니다. 이 애플리케이션들에게 리소스의 접근 경로를 안내하는 인터프리터 역할을 하는 것이 게이트웨이의 시작이었습니다 애플리케이션들은 게이트웨이에게 리소스를 요청하고, 게이트웨이는 그에 대한 응답을 처리하는 식이죠. 게이트웨이의 역할 1. 리소스 게이트웨이 (애플리케이션 서버) 앞서 말한 여러 애플리케이션들과 리소스들을 연결해주는 역할을 하는 게이트웨이를 말합니다. 게이트웨이와 애플리케이션들을 묶은 애플리케이션 서버와 클라이언트를..
06. 캐시
캐시의 등장 배경 2020년 인터넷 쇼핑의 가장 핫한 토픽은 바로 새벽 배송, 0.5일 배송입니다. 이를 가능케 하는 여러 요인들이 있겠지만 유통 방식의 혁명도 많은 영향을 끼쳤습니다. 정말 옛날의 유통방식부터 살펴봅시다! 과거의 유통 방식은 발송과 수신하는 사람이 1:1로 물건을 주고 받는 방식인 '포인트 투 포인트' 방식을 주로 사용했습니다. 그렇다 보니 인기있는 상품의 판매자들은 엄청난 구매 요청을 감당하기가 힘들었습니다(1명이 N명의 요청을 처리). 엄청나게 많은 운송업자들이 필요한건 덤이었고요. 효율성이 굉장히 떨어졌습니다. 이 문제점을 해결하기 위해 새로운 방식을 채택하게 됩니다. 바로 1:1로 위치상 중간지점에 고객들의 수요를 충분히 커버할만한 큰 창고(허브)를 만들어 재고를 꽉꽉 채운 뒤 ..
05. 프록시
커넥션에서 한번 언급했던 프록시입니다. 이번시간에는 프록시에 대해 알아봅시다! 프록시? 트랜잭션을 처리하는데에는 여러 컴퓨터들이 연결되어 있다고 했습니다. '클라이언트'와 '원 서버' 사이에 위치해서 여러가지 편의기능을 제공하는 컴퓨터를 프록시라고 했는데요. 정확한 용어로는 중개 서버라고 합니다. 말 그대로 클라이언트에게는 서버역할을, 다른 서버에게는 클라이언트 역할을 하는 것이죠. ※ 프록시와 게이트웨이의 차이 게이트웨이는 뒤에 다루겠지만 차이점을 간단하게 집고 넘어가겠습니다. 프록시와 게이트웨이 모두 같은 기능을 하나, 프로토콜에 차이가 있는데요 같은 프로토콜인 경우 (HTTP/HTTP, TCP/TCP) 프록시를, 다른 프로토콜인 경우 (HTTP/TCP)에 게이트 웨이를 사용합니다. 프록시.. 뭐가 ..
04. 커넥션 (2) - 개선된 커넥션
1장에서 문제점들을 알아보았다면 이번장에서는 개선점에 대해서 알아봅시다! 고대의 순차적 처리방식 말 그대로 순차적으로 트랜젝션을 처리하는 과정을 말합니다. 이 순차적 처리 방식의 문제점은 트랜젝션마다 새로 커넥션을 생성해야 한다는 것입니다. 이런 처리 방식이라면 커넥션을 맺을 때마다 발생하는 지연 + 느린 시작 지연이 발생해 상당히 느린 처리속도를 가질것 입니다. 이를 해결하게 위해 크게 4가지의 아이디어를 내게 됩니다. 한 번에 여러 개의 커넥션을 맺어 트랜젝션을 처리하자! 기존의 커넥션을 계속 재활용하여 트랜젝션을 처리하자! 1번과 2번 안을 모두 차용해서 하나의 커넥션으로 트랜젝션을 병렬로 처리하자! 1. 병렬 커넥션 - 한 번에 여러 개의 커넥션을 맺어 트랜젝션을 처리하자! 병렬 커넥션의 핵심은 ..
03. 커넥션 (1)
대화를 하려면 말이 통해야 합니다. (당연한 말이지만..) 우리는 휴대폰을 통해 물리적인 거리를 뛰어넘어 대화가 가능합니다. 단, 이 전화선(통신)이 잘 연결되어있단 가정하에 말이죠. 이 전화선(통신)이 끊겼다 생각해봅시다. 당연히 대화를 하지 못합니다. 컴퓨터 역시 마찬가지입니다. 컴퓨터끼리 데이터를 주고받아 트랜잭션을 수행하려면, 전화선이 필요합니다. 이를 커넥션(Connection)이라고 합니다! 커넥션 커넥션의 연결방법은 다음과 같은 과정을 거칩니다. 클라이언트가 서버의 URI로부터 호스트명 추출. DNS를 통해 이 호스트명에 대한 IP 주소를 찾는다. 추가적으로 포트 번호 얻는다. 해당 IP주소와 포트 번호로 커넥션을 생성한다. 결과적으로 정보를 가지고 커넥션을 생성하게 됩니다. 각 요소의 중복..