본문 바로가기

CS/네트워크

(18)
TCP/IP 1. 인터넷 인터넷이란, 전 세계에 걸쳐 파일 전송 등의 데이터 통신 서비스를 받을 수 있는 컴퓨터 네트워크의 시스템이다. LAN, WAN으로 연결되어 있고 바다 밑에 거대한 해저 케이블이 설치되어 있다. 2. TCP/IP 계층 TCP/IP란, 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합이다. TCP/IP 계층은 OSI 7계층 글을 보면 참고할 수 있으므로 생략하도록 하겠다. 3. TCP/IP 흐름 면접 단골 질문인 www.google.com을 을 웹브라우정 입력하면 어떠한 일이 일어나는지 따라가보자. Application Layer(HTTP, HTTPS) 먼저, 도메인 주소를 입력하면 위와 같은 HTTP Request 메시지를 서버로 보낸다.(http 버전은 일단 무시하자) T..
HTTPS의 동작원리 1. HTTPS란? 인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고받을 때 사용하는 통신 규약 2. HTTPS 통신흐름 ① 서버(A)는 HTTPS를 적용하기 위해 공개키와 개인키를 만든다. ② 신뢰할 수 있는 CA 기업을 선택하고, 그 기업에게 공개키 관리를 부탁하며 계약을 한다. CA란? Certificate Authority로, 공개키를 저장해주는 신뢰성이 검증된 민간기업 ③ 계약 완료된 CA 기업은 해당 기업의 이름, A서버 공개키, 공개키 암호화 방법을 담은 인증서를 만들고, 해당 인증서를 CA기업의 개인키로 암호화하여 A서버에게 제공한다. ④ A서버는 암호화된 인증서를 갖게 되었다. 이제 A서버는 A서버의 공개키로 암호화되지 않은 HTTPS 요청이 오면,..
대칭키 vs 공개키 1. 대칭키(Symmetric Key) 암호화, 복호화 시에 같은 암호키를 사용한다. 동일한 키를 주고받기 때문에 매우 빠르다는 장점이 있지만 대칭키 전달 과정에서 해킹 위험에 노출된다. 키 하나만 알면 해커가 암호화, 복호화 모두 가능하다. 2. 공개키(Public Key) 암호화, 복호화 시에 사용하는 키가 다르다. B의 공개키로 A가 자신의 데이터를 암호화하여 B에게 전송한다. B는 자신의 개인키로 A의 데이터를 복호화한다. 이에 따른 응답을 A의 공개키로 암호화하여 A에게 전송한다. A는 자신의 개인키로 B의 데이터를 복호화한다. 하지만 속도가 느릴 수 있고 암호화/복호화가 매우 복잡하다. 3. 공개키+대칭키 SSL 탄생의 시초 1. A가 B의 공개키로 암호화 통신에 사용할 대칭키를 암호화하여 B..
웹의 동작 1. 웹의 동작 원리 ①② 사용자가 웹 브라우저를 통해 찾고 싶은 웹 페이지의 URL 주소를 입력함. ③ 사용자가 입력한 URL 주소 중에서 도메인 네임(domain name) 부분을 DNS 서버에서 검색함. ④ DNS 서버에서 해당 도메인 네임에 해당하는 IP 주소를 찾아 사용자가 입력한 URL 정보와 함께 전달함. ⑤⑥ 웹 페이지 URL 정보와 전달받은 IP 주소는 HTTP 프로토콜을 사용하여 HTTP 요청 메시지를 생성함. 이렇게 생성된 HTTP 요청 메시지는 TCP 프로토콜을 사용하여 인터넷을 거쳐 해당 IP 주소의 컴퓨터로 전송됨. ⑦ 이렇게 도착한 HTTP 요청 메시지는 HTTP 프로토콜을 사용하여 웹 페이지 URL 정보로 변환됨. ⑧ 웹 서버는 도착한 웹 페이지 URL 정보에 해당하는 데이터..
CORS 지난 앱잼 때 나를 지독하게도 괴롭혔던...CORS정책에 대해 알아보자. CORS정책에 대해 알기 위해서는 먼저 SOP에 대해서 알아야 한다. 1. SOP Same-Origin Policy의 약자이다. 다른 출처의 리소스를 사용하는 것을 제한하는 정책 방식이다. 클라이언트는 매우 취약한 환경에 놓여있기 때문에 보안에 신경써야 할 필요가 있다. 당장 개발자 도구만 클릭해서 보더라도 어떤 형식으로 구현되어 있는지 다 알 수 있으니.. 하지만 오픈스페이스 환경에서 어떻게 동일 출처의 자원만 사용할 수 있겠는가..따라서 예외 조항을 신설하고, CORS 정책을 지킨 리소스 요청은 허용하기로 했다. 2. Origin 그럼, '출처'는 어떻게 파악할까? 프로토콜, 호스트, 포트를 통해 출처를 판단한다. 이 때 포트번..
웹서버와 WAS 일단 해당 내용을 들어가기 전에 웹, 웹서버에 대해 알고 넘어가야 한다. 웹은 인터넷 상에서 텍스트나 그림, 소리, 영상 등과 같은 멀티미디어 정보를 하이퍼텍스트 방식으로 연결해서 제공한다. 여기서 하이퍼텍스트란 문서 내부에 또 다른 문서로 연결되는 참조를 집어 넣음으로써 웹 상에 존재하는 여러 문서기리 서로 참조할 수 있는 기술을 의미한다. HTML을 사용하여 작성할 수 있고 HTTP프로토콜을 사용하면 누구나 검색하고 접근할 수 있다. 웹서버는 인터넷을 기반으로 클라이언트에게 웹 서비스를 제공하는 컴퓨터를 말한다. 그리고 또 한가지, 정적 콘텐츠와 동적 콘텐츠에 대해서도 정리해보자. 정적 콘텐츠란 말 그대로 항상 동일한 페이지를 말한다. image, html, css, javascript와 같은 파일들..
HTTP 2.0 현재 구글에서는 HTTP 3.0 + QUIC을 사용하고 있는데.. HTTP 1.0부터 차근차근 정리해보자. 1) HTTP 1.0 하나의 요청에 하나의 응답. 매번 새롭게 연결해야하기 때문에 성능이 저하되고 서버 부하 비용 또한 증가한다. 2) HTTP 1.1 HTTP 1.0의 불편함을 줄이기 위해 persistent connection 을 도입한 HTTP 1.1이 나왔다. 일정한 TIME동안 connection을 닫지 않는 방식이다. pipelining: 순차적인 여러 요청을 연속적으로 보내서 순차적으로 응답을 받아 시간 지연을 줄인다. 하지만, 만약 한 작업이 오래 걸리는 작업이라면? 뒷부분은 무한 대기상태.. head of line blocking의 단점이 있다. 또, 헤더 구조가 중복될 수 있다. ..
JWT 토큰 쿠키와 세션에 이어... JWT 토큰이다. 사실 토큰이란 것이 무엇인지 모르고 그냥 핸디캔디 프로젝트를 하면서 토큰을 사용했었더랬다. 일단 다시 한 번 요약하자면, 쿠키는 브라우저가 종료되어도 유지되고 클라이언트에 정보가 저장되기 때문에 보안에 취약하다. 이를 보완하기 위해 세션이 나왔다. 세션은 정보가 서버에 저장되어 있어 상대적으로 쿠키보다는 안전하지만, 일단 세션ID도 쿠키에 저장되고(이건 토큰도 마찬가지) 서버 확장성이 매우 불편하다는 단점이 있다. 서버가 확장될 경우 로드밸런서가 세션ID를 갖고 있는 서버에 연결을 시켜주어야 한다. 이를 해결하기 위해서 세션 스토리지도 있지만, 마찬가지로 대용량 트래픽일 경우... 서버가 과부화된다. JWT토큰은, 시크릿키를 사용하여 유저를 구분한다. 따라서 별..
쿠키와 세션 먼저, 쿠키와 세션에 대해 들어가기 전에 기억해야 할 것이 있다. HTTP는 Stateless한 상태라는 것. stateless라는 것은, 클라이언트와 서버의 통신이 각각 독립적이라는 것이다. 따라서 장점으로는 서버의 확장성이 용이하다는 것이고 단점으로는 클라이언트가 매번 요청을 보내야 한다는 것이다. 특히 로그인 후 특정 데이터에 접근할 때는..? 매번 유저 정보를 보내기 번거로울 것이다. 이 때 사용하는 것이 쿠키, 세션, 더 나아가서 토큰의 개념이다. 여기서는 쿠키와 세션에 대해서만 살펴보고자 한다. 쿠키 클라이언트에 저장되는 작은 데이터 파일이다. 이 때 만료 날짜가 들어있어 쿠키가 만료되면 해당 정보로 데이터에 접근할 수 없다. 클라이언트에 저장되어 사용되기 때문에 편리한 만큼, 해커에게도 편리..
HTTP 메소드 서버 개발을 시작하면서 자세한 메소드를 모른채 무작정 api를 코딩했다. 다시 한 번 제대로 살펴보자... GET 서버의 데이터를 가져올 때 사용한다. 파라미터로 데이터를 전송한다. 즉, URI에 클라이언트에서 보낸 데이터가 찍힌다. 캐시 사용 가능 POST 바디에 내용을 담아서 서버에 데이터를 전송한다. 가져오고 싶을 때도 바디에 넣어서 보내고 싶다면 POST를 사용해도 되지만, 캐싱이 어렵기 때문에 GET을 추천한다. PUT 처음엔 PUT을 몰라서 GET과 POST로만 api를 작성했더랬다.. 정보 갱신을 하고 싶을 때 PUT요청을 보낸다(기존 리소스를 삭제하고 덮어쓰기 한다) 이 때 데이터의 모든 정보가 전달되지 않으면 해당 필드값은 NULL처리가 된다!! PATCH PUT과 마찬가지로 기존 정보를..