-
Web server [1주차]모의해킹스터디5기(feat.Normaltic) 2023. 11. 1. 17:36
모의해킹스터디가 시작되었다. 첫 수업의 주제는 "웹 서버"로, 수업을 통해 새롭게 배운 지식들을 정리하려 한다. 내용과 순서에 크게 의미는 없다.
웹 서버는 무엇인가
수업에서 웹 서버란 "파일을 전달하는 친구" 라고 간단하게 정리했다. 나는 조금 덧붙여서 "항상 켜져있는 컴퓨터이면서, 파일을 전달하는 역할을 하는 친구" 라고 정의하고 싶다. 서버는 컴퓨터라는 개념으로 이해해서 이렇게 정의해야 좋을 것 같다. 아래 그림은 웹 서버의 구조를 나타낸 것이다.
1. Web Server 구조 웹 서버는 클라이언트의 요청을 받아 해당하는 파일을 보여주는 역할이다. 지금은 간단한 웹 서버를 구현하기 때문에 데이터베이스에 연결하지 않고 서버 내의 파일을 전달하게끔 실습하지만, 위의 그림에서처럼 웹 서버와 데이터베이스를 연결하여 파일을 전달할 수도 있다.
1. URL
클라이언트는 웹 서버에 어떻게 파일을 달라고 요청을 할까. 바로 우리가 주소창에 입력하는 URL을 통해서 요청을 한다. 웹 서버는 HTTP 프로토콜을 이용하며 웹 브라우저를 통해 URL을 입력하여 요청하는 경우이고, 다른 프로토콜을 이용할 땐 각각에 맞는 응용 프로그램을 사용하여 URL을 입력해야 한다. (ex. FTP - FileZila)
URL은 Uniform Resource Locator의 약자로 "인터넷에서 웹 페이지, 이미지, 비디오 등 리소스의 위치를 가리키는 문자열" 이라고 MDN Web Docs 에서 정의하고 있다.
2. URL의 구조 - Scheme: 사용하는 프로토콜
- Domain Name: 요청하는 웹 서버 (도메인 이름 or IP주소)
- Port: 웹 서버의 리소스에 접근하는 데 사용되는 기술적인 "게이트"
- Path to the file: 웹 서버에 있는 리소스의 경로
- Parameters: 웹 서버에 제공되는 추가 매개변수
- Anchor: 리소스 내부에서 일종의 "책갈피" 역할. (ex. HTML 문서에서는 앵커가 정의된 지점으로 스크롤)
2. Port
도메인 혹은 IP주소를 통해 컴퓨터(IP기기)에 접속할 수 있는데, 하나의 컴퓨터(IP기기)에서 여러 애플리케이션이 실행될 경우, 해당 컴퓨터 안에는 여러 서버가 존재하게 된다. 이 때 포트 번호를 통해 원하는 서버에 접속할 수 있다.
포트번호는 크게 3가지로 분류된다.
0 ~ 1023 : well-known port
1024 ~ 49151 : registered port
49152 ~ 65535 : dynamic port여기서 중요한 것은 well-known port로 IANA(Internet Assigned Numbers Authority)에서 특정한 쓰임새를 위해 지정한 포트번호다. 그 중에서도 중요한 몇 가지는 외워두는 것이 좋다.
3. Well-known-port 3. 경로
/ : root 최상의 경로를 의미
./ : 현재 디렉토리를 의미
../ : 부모 디렉토리를 의미경로는 절대 경로와 상대 경로로 나뉜다.
절대 경로는 파일의 root부터 해당 파일까지의 전체 경로를 의미한다.
현재 리눅스에서 실습하고 있는 예제를 들어보겠다.
/home/student/webDev/webApp/login.html
최상위 경로부터 시작해서 현재 파일까지의 모든 경로를 나타낸 것이 절대 경로이다.
http://192.168.66.129:1018/login.html
위 URL은 실제 웹 서버를 실행시킨 후 나오는 페이지의 주소이고, 포트번호 이후 "/login.html" 처럼 현재 디렉토리를 기준으로 나타낸 것이 상대 경로이다.
웹 서버를 실행할 때, index 파일이 위치하는 장소가 root 경로로 지정되어 파일의 경로를 나타내는 데 이를 web root 경로라고 한다. 그리고 이 root 경로의 위 단계로는 접근할 수가 없다. (현재 webApp 디렉토리가 root 디렉토리로 지정되어 그 위의 webDev 내부의 다른 파일에 접근 불가)
4. NAT
NAT(Network Address Translation)는 IP 주소를 바꾸는 기술이다.
4. NAT 보통 인터넷 공유기가 NAT 기능을 탑재하여 IP 주소를 바꾸는 역할을 한다. 이렇게 하면 하나의 공인 IP주소를 사용하여 여러 대의 호스트가 인터넷에 접속할 수 있어 한정된 IP 주소를 절약할 수 있고, 또한 외부에서 볼 때 공인 IP에서 변환된 사설 IP를 알 수 없기 때문에 내부 네트워크 및 호스트들의 보안성도 높일 수 있다.
WAS는 무엇인가
앞서 살펴봤던 웹 서버와 달리 클라이언트로부터 정보를 받아 각각에 맞는 동적인 컨텐츠를 제공하는 역할을 한다.
5. WAS의 구조 위의 그림에서 보는 것 처럼 클라이언트가 요청하는 다양한 요구사항을 처리하기 위해 JSP나 Servlet을 사용하는데, JSP나 Servlet을 실행시킬 수 있는 소프트웨어를 Container 라고 한다. 그래서 WAS를 Web Container 혹은 Servlet Container 라고도 부른다. WAS의 종류에는 Tomcat, JBoss, Jeus, Web Sphere 등이 있다.
HTTP Method [GET / POST]
HTTP Method는 클라이언트가 서버에 요청을 하는 수단이다. 그 종류에는 GET, POST, PUT, DELETE, PATCH 등이 있지만 GET과 POST에 대해서만 알아본다.
1. GET 방식
GET 방식은 주로 서버에 데이터를 조회할 때 사용한다. URL을 통해 모든 파라미터를 전달하기 때문에 주소창에 값이 노출되고, URL 길이에 제한이 있기 때문에 전송 데이터 양이 한정되어 있다. 하지만 GET 방식은 캐시가 가능하기 때문에 서버로부터 리소스를 다시 다운로드하는 대신 리소스 복사본을 반환하여 캐시가 있다면 빠르게 조회할 수 있다.
2. POST 방식
POST 방식은 주로 서버에 데이터를 생성할 때 사용한다. GET 방식과는 다르게 URL이 아닌 HTTP Body 부분에 데이터를 포함해서 전달하여 웹 브라우저에 직접적으로 파라미터가 노출되지 않으며, 길이 제한도 없다. 그러나 GET 방식처럼 캐시가 가능하지는 않다.
6. GET 방식과 POST 방식의 차이 그리고 두 방식의 차이점 중에 "멱등성"이라고 있다. 멱등성(idempotent)이란 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다. 결론부터 말하자면, GET 방식은 멱등성이 보장되고, POST 방식은 멱등성이 보장되지 않는다. GET 방식은 단순히 데이터를 조회하기 때문에 이 요청을 여러 번 수행한다고 해도 서버의 상태는 변하지 않고, POST 방식은 데이터를 추가하기 때문에 요청이 반복될 때마다 다른 응답을 나타낸다.
참조
[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
URL이란? - Web 개발 학습하기 | MDN
이 문서에서는 URL(Uniform Resource Locator)이 무엇이며 어떻게 구성되어 있는지 설명합니다.
developer.mozilla.org
Well-Known Port (웰노운포트)
Well-known Port( 잘 알려진 포트 ) 특정한 쓰임새를 위해서 IANA에서 할당한 TCP 및 UDP 포트 번호의 일부이다. 일반적으로 포트번호는 크게 3가지로 나눌 수 있다. ▷ 0번 ~ 1023번 : 잘 알려진 포트 ( well-k
captcha.tistory.com
Network address translation - Wikipedia
From Wikipedia, the free encyclopedia Protocol facilitating connection of one IP address space to another Network address translation between a private network and the Internet Network address translation (NAT) is a method of mapping an IP address space in
en.wikipedia.org
[HTTP] Get, Post 차이점
이번에는 신입 백엔드 개발자 면접에서도 자주 등장하는 기술 면접 질문 중 하나인 GET, POST 방식의 차이점에 대해 정리할 것입니다. 필자는 단순하게 GET/POST 차이점이 데이터를 URL 파라미터에 담
backendcode.tistory.com
'모의해킹스터디5기(feat.Normaltic)' 카테고리의 다른 글
UNION SQL Injection [6주차] (0) 2023.12.08 SQL Injection [5주차] (0) 2023.12.07 Burp Suite [4주차] (0) 2023.11.27 로그인 로직 [3주차] (0) 2023.11.21 데이터베이스[2주차] (0) 2023.11.14