Web Basic Info
웹에 대한 기초 지식을 먼저 정리해보자.
Web Browser: HTTP를 통해 전달된 데이터나 리소스를 가공해 사용자에게 보여줌
-> 사용자의 입력값으로부터 취약점이 발생함
네트워크 프로그램 CLI(Commend Line Interface) 프로그램을 사용하여 웹을 사용할 수 있음
네트워크 프로그램 | $ echo -ne "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"| nc example.com 80 |
CLI | $ curl example.com |
Web Resource: 웹에서 사용하는 콘텐츠
-> 이를 가리키는 주소를 URL이라고 함(옛날: 실제 위치, 최근: 추상적 위치)
종류: HTML, CSS, JavaScript, ETC(이미지, 음성, 영상...)
-> URI(URL): 리소스를 구별하기 위한 식별자
URL은 Encoding(<-> Decoding)을 통해 정보를 표준화, 보안 등의 목적으로 다른 형태나 형식으로 변환하여 처리함
Encoding은 알고리즘이 공개되었고 키가 없기 때문에 원래 정보로 복원 가능하다(암호화와 다름).
종류: URL Encoding(%~), HTML Entity Encoding(Entity name Encoding: &~, Entity number Encoding: &#x~)
HTTP, HTTPS: 웹에서 이루어지는 통신을 정의한 프로토콜
-> TCP or TLS(TCP의 암호화)를 사용하고 주로 80(HTTP), 443(HTTPS)포트 이용
-> Request: 서버에 대한 요청, 각각의 줄은 CRLF로 줄 바꿈이 이루어져야 함
-> Request: 서버의 응답, 각각의 줄은 CRLF로 줄 바꿈이 이루어져야 함
HTTP는 하나의 Request와 Response의 쌍이 통신하는 Connectionless, Stateless 프로토콜이다.
Connectionless: 하나의 요청 하나의 응답 후 네트워크 연결 종료
-> 최근에는 네트워크, 서버의 성능 향상으로 연결을 계속 유지하는 Keep-Alive가 가능하다.
Stateless: 연결을 끊을 때 상태를 유지하지 않는 것
-> 다시 연결할 시 인증을 다시해야 함
Cookie: HTTP 요청마다 새로운 커넥션을 열기 때문에 사용자 인증을 계속해서 해야 한다는 단점이 있다. 이러한 단점을 개선하기 위해 탄생
-> 웹브라우저는 Response의 set-cookie header나 javascript의 document.cookie를 통해 데이터를 쿠키에 저장함
-> 데이터를 key = value; 쌍으로 쿠키에 저장하고 ;뒤에 쿠키의 만료시간, 접근할 수 있는 도메인 등 추가 옵션을 설정
Session: 서버에서 Session ID를 주고 Session ID와 Cookie 데이터를 연결해 관리하게 됨
-> 유추할 수 없는 랜덤한 문자열 키
한번 Session이 주어지면 Cookie만으로 서버에 연결될 수 없다.
Session은 cookie에 국한되지 않고 다양한 곳(local storage)에 저장되어 사용한다.
그 외 기초 지식
HTTP, HTTPS의 패킷 모습 차이
Web Server - nginx, Apache
Web Application(Server) - nodeJS, PHP, Python, Java
DataBase Management System - MySQL
아래 글을 참고하여 Web Server와 Web Application Server의 자세한 차이점을 알아보라.
gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io