공부를 시작함에 있어 가장 중요한 부분은 바로 개념입니다.

내가 무엇을 잘 이해하고 있는 지 판단할 수 있는 기본이 되며,

다른 사람과 소통하기 위한 가장 기본적인 언어를 배우는 과정이죠.

우리가 아무리 수능 공부를 통해서 영단어 수천 개를 외우더라도 실제로 의사소통에 어려움을 겪는 이유와 같습니다.

따라서 우리는 단어를 반복해서 경험하면서 이해하고 자연스럽게 언어를 사용할 수 있을 때,

우리는 비로소 이를 충분히 이해했다고 말할 수 있습니다.

이러한 목적을 바탕으로 서버 개념 단어들에 대해 정리를 시작해보고자 합니다!

저처럼 처음 개발공부를 접하는 분들도 쉽게 이해할 수 있도록 정리해보고자 하니 잘 부탁드리겠습니다 :)

 

서버와 서비스


서비스는 기능을 의미합니다. 사용자가 서버와 직접 정보를 주고받기는 어렵겠죠? 적절한 요청의 형태로 변환이 되어야 합니다. 예시의 메뉴 요청을 주문서로 변환한 것처럼요! 

내용 예시

먼저 간단한 비유로 시작해보겠습니다!

손님이 음식점에 방문한 상황을 가정해보죠

1. 손님은 메뉴판을 보고 원하는 메뉴를 주문합니다.

2. 그러면 종업원은 주문을 받아 요리사에게 주문서를 전달합니다.

3. 요리사는 냉장고에서 필요한 재료를 꺼내 레시피에 맞게 조리를 시작합니다.

4. 완성된 요리는 다시 종업원에게 전달되고

5. 종업원은 손님께 음식을 전달하면서 프로세스는 종료됩니다

 

여기서 서버는 요리사, 서비스는 주문서, 클라이언트는 종업원을 의미합니다.

서버 는 클라이언트가 서비스를 요청하면 원하는 사항에 맞게 서비스를 제공해주는 역할을 합니다.

서비스는 기능을 의미합니다. 사용자가 서버와 직접 정보를 주고받기는 어렵겠죠?

적절한 요청의 형태로 변환이 되어야 합니다. 예시의 메뉴 요청을 주문서로 변환한 것처럼요!

 

아래의 예시를 이해했다면 조금 더 자세히 설명해보겠습니다!

  1. 클라이언트의 요청이 웹 서버에 들어온다.
  2. 웹 서버는 클라이언트의 요청이 정적컨텐츠 / 동적컨텐츠를 요구하는지 판단한다.
    1. 정적 컨텐츠라면 웹 서버 내부 디스크에 있는 정보를 가져와 클라이언트로 보낸다.
    2. 동적 컨텐츠라면 WAS 서버에 요청을 보낸다.
  3. WAS 는 요청을 접수하고 스스로 계산이 가능한지, DB 접속이 필요한지를 판단한다.
    1. 스스로 계산이 가능하다면 결과를 파일데이터로 가공하여 웹 서버로 반환한다.
    2. DB 접속이 필요한 경우 DB 서버에 요청을 보낸다.
  4. DB 서버는 요청을 받아 캐시 존재여부를 확인하고, 디스크에 접근하여 데이터를 가져와 WAS 로 결과를 반환한다.
  5. 결과를 반환 받은 WAS는 웹서버로 결과를 반환하고, 웹 서버는 그대로 클라이언트로 데이터를 반환한다.
  6. 클라이언트는 요청한 데이터에 대한 응답을 받는다.

 

클라이언트  - 서버와의 관계

클라이언트는 서버에게 서비스를 요청하고,

서버는 요청에 맞게 적절한 응답을 클라이언트에게 전달합니다.

클라이언트와 서버는 외관으로 둘을 정의하거나 구분하지 않습니다.

이 둘은 역할에 따라 구분을 합니다.

클라이언트는 요청을 하는 입장이고. 서버는 그것에 대한 응답을 해주는 입장이었죠?

그래서, 누가 요청을 하는지, 누가 응답을 해주는지에 대한 주체를 생각해보면 관계를 파악하는데에 도움이 됩니다!

 

서버의 구조 


웹 서버(Web Server)

클라이언트로부터 http 프로토콜을 요청받아 HTML 문서와 같은 정적 웹페이지를 응답해주는 소프트웨어


   정의만 보기에는 지금은 잘 와닿지 않는 말들일 것 같습니다. 조금 풀어 설명해보자면, 크롬과 같은 웹 브라우저에서 우리가 눈으로 보는 홈페이지(HTML 문서)나 오브젝트(이미지 등)을 전송해주는 서비스 프로그램을 의미합니다. 네이버를 보면 각종 쇼핑광고, 로그인 창, 메뉴바, 검색창 등이 보일텐데요! 이런 화면들을 제공해주는 프로그램이라고 생각하면 됩니다. 

   웹서버의 기능은 웹 페이지를 클라이언트로 전송하는 것입니다. 개발 공부를 하게 되면 가장 먼저 맞이하는 것이 HTML, CSS, JavaScript 대표적일텐데, 이러한 내용들이 클라이언트로 전송된다고 보면 됩니다! 이렇게 콘텐츠를 제공하기도 하지만, 반대로 파일 업로드와 같이 콘텐츠를 제공받는 기능을 하기도 합니다. 

 

Nginx


대표적인 웹 서버 소프트웨어

 

특징

1) 비동기 event-driven 구조

2) 다수의 연결을 효과적으로 처리한다.

3) 코어 모듈이 apache보다 적은 리소스로 빠르게 움직인다.

4) 더 작은 thread로 클라이언트의 요청을 처리할 수 있다.

 

1) 의 비동기 event-driven 구조를 쉽게 예를 들어 설명하자면 내가 여러 가게를 방문하고 싶은데, 가게마다 대기하는 시간을 계산해 번호표를 받아두고 순서대로 가게를 방문해서 원하는 물건을 사는 과정과 같다고 보면 이해에 도움이 됩니다.

이때, 스레드(자신) 가 이벤트(번호표 시스템) 을 사용하기 때문에 스레드가 복제될 필요가 없습니다.

4)의 특징이 여기서 나타납니다. 비용이 더 들지 않고 빠르게 작업을 처리할 수 있다는 장점이 있습니다.

그리고 이는 2)처럼 시스템을 많은 연결이 있더라도 효율적으로 처리가 가능하다는 장점이 있습니다!

하지만 스레드(자신)가 하나이기 때문에 문제가 생기는 순간 프로그램 자체에 문제가 발생할 수 있다는 단점이 있습니다.

(실제로는 하나의 스레드만 사용하지는 않습니다)

https://m.blog.naver.com/jhc9639/220967352282

Apache


Nginx와 같은 웹서버 소프트웨어

 

특징

1) 스레드 기반 구조로 요청당 스레드 하나가 처리한다.

2) 사용자가 많으면 그만큼 스레드를 생성해 메모리 및 CPU낭비가 심하다.

 

 

Nginx 의 예시를 다시 한번 사용해보겠습니다.

스레드 구조는 내가 여러 가게를 들리기 위해서 나를 복제해 여러 가게에 방문하는 형태입니다.

그렇기 때문에 1) 요청이 하나 있을 경우 하나의 스레드가 연결되어 처리할 수 있습니다.

하지만 이런 방법은 스레드를 여러개 생성해야하기 때문에 2) 비용이나 효율성 문제가 있다는 단점이 있습니다.

그래서 apache의 경우에는 적은 클라이언트의 요청, nginx는 보다 많은 요청을 처리하는 데에 사용됩니다.

최근에는 Nginx가 각광 받으면서 변화가 생기고 있는 추세입니다!

 

APM


A(Apache) 서버, P(PHP) 프로그래밍 언어, M(MYSQL) 데이터베이스

 

대표적인 세 프로그램에 대한 약자로 APM은 이 세가지를 연결하여 동작하도록 만들어주는 환경을 의미합니다.

실행되는 구조도 서버와 서비스 개념에서 본 형태와 같습니다. ( + 비유 )

  1. 먼저 클라이언트가 서비스를 서버에 Request (손님이 찾고싶은 책을 사서에게 물어봅니다)
  2. 서버는 PHP에게 스크립트 실행을 Request (사서만이 알 수 있는 검색어를 컴퓨터에 입력합니다)
  3. PHP는 작성된 프로그램으로 MySQL에 Request (컴퓨터는 그 책이 있는지 책 정보를 검색하는 것과 같겠죠)
  4. MySQL은 데이터베이스의 결과 정보를 PHP에 Reponse (검색 결과를 화면에 출력)
  5. PHP는 받은 결과와 코드를 HTML로 변경 후 서버에 Response(손님이 알아보도록 책 위치 정보를 메모)
  6. 서버는 HTML을 웹 프라우저에 Response (사서는 적은 메모지를 손님에게 보여줍니다)

 

로컬호스트(LocalHost)


local 지역적인 (제한적 뉘앙스) + host(주인)

 

이 단어는 어디서 한번쯤은 들어보셨을 텐데요! 나의 pc를 표현하는 하나의 방법입니다.

쉽게 이해하기 위해 '집주소'라는 비유를 많이 사용하곤 합니다.

 

서버를 테스트할 때 종종 127.0.0.1이라는 숫자를 볼 수 잇는데, 이는 가상 IP를 할당한 로컬호스트를 의미합니다. 그래서 네트워크의 연결 없이도 가상 IP를 활용해서 서버를 테스트 할 수 있습니다.

 

 

복사했습니다!