열정 실천

웹 서버와 웹 어플리케이션의 구조 및 관계 본문

CS/공부노트

웹 서버와 웹 어플리케이션의 구조 및 관계

구운오니 2024. 11. 4. 20:26
728x90

웹 서버

=>  단단한 네트워크(장비) C 프로그램 

=>  정적 콘텐츠를 클라이언트에 전달하는 역할 (이미지, js, html, css)

=>  GET / POST 와 같은 HTTP (TCP/IP) 요청을 받아 정적 리소스 전송

=> 캐시데이터(미리 읽어놓은 데이터 (was로부터) : HTML, Images 등)

ex) nginx, httpd

 

포트번호는 예시지롱

WAS : 웹 어플리케이션 서버

=> 동적컨텐츠 처리

=> 요청에 따라 자바, 파이썬, PHP 등으로 작성된 애플리케이션 코드를 실행

=> 필요한 경우 DB에 접근하여 읽고 쓰는 작업 수행

=> 기능동작(로그인, 결제, 영상, 분석) 

ex) JAVA - spring, Python - django, JavaScript - node.js 

 

 

웹 서버와 WAS를 함께 사용하는 이유 

  • 성능 최적화: 웹 서버가 정적 콘텐츠를 빠르게 처리하고, 동적 콘텐츠만 WAS로 전달함으로써 시스템 성능 UP!
  • 보안 강화: 웹 서버를 통해 WAS로 접근을 제한하거나 요청을 필터링하여 보안을 강화
  • 로드 밸런싱: 웹 서버가 여러 WAS 인스턴스로 요청을 분배하여 트래픽을 분산시켜 서버 과부하를 방지

 

 



 

 

웹 접속 흐름 


우리가 브라우저에서 웹 어플리케이션에 접속할 때 흐름은 이렇다.

1. 브라우저 주소창에 도메인(www.google.com)을 입력하고 엔터를 누르면 HTTP 요청 생성 

2. 브라우저는 DNS 서버에 도메인 이름에 해당하는 IP주소를 요청하고, 받은 IP 주소로 연결 시도

3. 라우터를 시작으로 여러 네트워크 장치를 거치며, 웹 서버가 있는 네트워크에 도달

4. 웹 서버는 요청한 자원이 정적 콘텐츠이면 바로 응답, 동적 콘텐츠라면 해당 요청을 WAS로 전달 

5. WAS는 로직 실행, DB와의 통신, 세션 관리 등 요청받은 동적 콘텐츠를 처리하고 HTML문서로 변환하여 웹서버에 전달 

6. 웹 서버는 WAS로부터 받은 동적 콘텐츠와 자신의 정적 콘텐츠를 종합하여 HTTP 응답을 생성하여 브라우저로 전송

7. 브라우저는 웹 서버로부터 받은 HTML, CSS, JavaScript 파일 등을 해석하여 웹 페이지를 렌더링

 

 

 

크크크😛

 

 

 

🧐 웹 서버를 구축하고 나서 어떻게 배포할까?

1. 도메인 주소를 산다. 

2. 웹서버 => 공인 IP (public) 주소가 가능한걸로 세팅한다. 219.250.36.146

3. 웹서버 <--연결--> WAS(spring, nodejs, django) - 꼭안해도 되지만 딴딴한 웹서버를 구축하는게 good

4. 예시 hosting.kr 들어가서 서버 설정 => 219.250.36.146 기입 => 전세계 DNS서버들에게 제공

5. 고객 abcd1234.kr 을 브라우저에 입력하면 DNS에게 내부적으로 물어봐서 IP주소 219.250.36.146 를 얻어내고 80포트로 219.250.36.146 내부의 nginx에게 네트워크 통신을 요청한다. 

 


🧐 내가 구글 웹서버로 네트워크 통신을 할 때 (www.google.com 접속할 때), 몇 개의 라우터를 거쳐가는지 알고싶다면?

$ traceroute -n www.google.com

 

 

🧐 현재 열려있는 포트를 확인하려면?

 

네트워크 연결 상태, 포트 사용 현황 확인하는 netstat 명령어 사용

$ netstat -tplan

 

 

  • -t: TCP 연결만 출력
  • -p: 연결된 프로그램 이름과 PID(프로세스 ID) 표시
  • -l: 현재 열려 있는 포트(리스닝 중인 포트)만 출력
  • -a: 모든 연결(서버와 클라이언트 양쪽)을 표시
  • -n: IP 주소와 포트를 숫자로 출력

 

🧐 서버의 특정 포트가 열려 있는지 확인하려면?

sudo netstat -tplan | grep 3000

 :: 3000번 포트에서 실행중인 프로세스와 네트워크 상태 출력 

 

 

 

 

🧐 웹 요청을 테스트하고 응답을 확인하려면?!

 

HTTP, FTP 등 다양한 프로토콜을 사용해 URL로부터 데이터를 요청하는 curl 명령어

curl http://localhost:3000

 

 

 

그밖에 자주 쓰는 명령어들~


fg - 백그라운드 실행 중인 프로그램 포그라운드로 올리기 

ps - 현재 프로세스의 상태를 알려준다. 

top(htop) - 프로세스를 표시한다. (htop은 조금 더 좋은 뷰를 제공한다.) 

jobs - 실행 작업을 나열한다.

 

 

 

 

728x90