Plan -> Code -> Build -> Test -> Release -> Deploy -> Operate
현대의 애플리케이션 배포는 서비스의 형태, 즉 웹 애플리케이션의 형태로 배포된다.
인터넷에 연결되 있기만 하다면 모든 사람들에게 노출(서버)된다.
그렇다면 서버는 어떻게 작동하고, 우리는 서비스에 어떻게 접속하는 걸까?
사용자 관점에서 서비스에 접속하는 방법은 URL 이라고 불리는 주소를 웹 브라우저에 입력하면 된다.
서비스에 문제가 없는 한 접속이 가능하다. 이러한 과정이 워낙 순식간에 이루어지지만 간략하게 설명하자면 아래와 같다.
앞서 예시를 든 https://velog.io/@numberbeen 에 접속할 경우 사용자가 서버에 도달한 이후는 서버의 몫
먼저 경로 처리를 한다. 경로란 URL 에서 도메인 이름 이후 등장하는 문자열을 이야기 한다. (위 주소에서는 @numberbeen 으로 경로처리) 웹 서버가 정해논 규칙(라우팅) 에 따라 서버내의 자원을 사용자에게 제공.
서버 내의 자원은 파일이 될 수도 있고(파일 다운로드를 제공하는 경우), 브라우저에서 해석 가능한 형태의 자원을 지칭할 수 도 있음. 보통 HTML페이지 등 다른 애플리케이션에서 응용할 수 있도록J JSON 과 같은 응답을 제공.
한 대의 서버 컴퓨터에서 HTML 페이지를 제공하는 것은 별일이 아닌 것처럼 보인다. 하지만 용량이 적은 HTML 페이지를 제공하는 일에 앞서서 다음과 같은 사례를 생각해보자.
목적에 따라 제공하는 자원이 각기 다른 서버로 분리된 경우. 목적에 따라 자원을 분리하면, 단일 서버에서 생기는 복잡한 문제가 보다 단순해진다. 프로그래밍으로 비유하면, 100줄의 코드 대신, 한자기 일만 하는 20줄의 함수를 다섯번 조합한 형태가 문제 해결이 쉬운것과 비슷
동시에 수천명이 한 대의 서버에 접속해서 HTML 페이지를 요구할 경우
서비스를 제공하는 단일 서버가 인프라 문제(하드웨어 고장, 네트워크 유실, 천재지변 등) 로 갑작스럽게 서비스 제공 X
2, 3번의 경우 규모 확장과 관련된 내용이며 이 다음 챕터에서 다룰 예정
일하는 컴퓨터(머신 러닝, 빅 테이처 처리용)는 규모 확장을 도입, 요청/응답을 처리하는 컴퓨터를 별도로 구성한 사례.
서버 확장과 목적의 따른 서버 구성이 함께 도입된 사례이며 일종의 분산시스템이라고 불린다.