[참고자료] 스타트업 개발자 혼자 빠르게 싸게 서버 구축하기
웹 사이트를 구성하고 있는 다양한 콘텐츠를 효율적으로 관리할 수 있도록 도와주는 시스템이다. 보여지는 홈페이지 화면과 관리하는 페이지가 따로 있으며 그 관리자 페이지를 통해 모든 것을 관리한다. 웹 사이트계의 프레임워크가 아닐까. (유선이가 퍼블리셔 되고 싶으면 그렇게 배우라고 했던 게 바로 이것이었다!!!)
타사 제공업체가 호스팅하여 인터넷을 통해 사용자에게 제공하는 인프라, 플랫폼 또는 소프트웨어를 말한다. 클라우드 서비스는 프론트엔드 클라이언트(ex-사용자의 서버, 태블릿, 데스크톱, 노트북 등 사용자의 모든 하드웨어)의 사용자 데이터 흐름을 원활하게 해준다. 사용자가 클라우드 서비스에 엑세스하려면 컴퓨터, 운영체제 및 인터넷에 연결된 네트워크만 있으면 된다.
아마존에서 만든 웹서비스 인프라로 웹서비스를 운영하는데 필요한 기술들을 포괄적으로 제공하는 서비스이다. 일종의 웹호스팅 서비스지만, 통상적인 웹호스팅 서비스에 비해서 편리하고 강력하다. AWS와 같은 클라우드 서비스를 이용하면 수천대의 서버(EC2)를 클릭 몇 번으로 몇 분만에 생성할 수 있다. 이렇게 만들어진 서비를 아마존 웹서비스의 부하 분산 솔루션(load balancer)에 연결하면 마치 한대의 강력한 컴퓨터로 서비스를 하는 것과 같은 효과를 낼 수 있다. 접속자에 따라 자동으로 서버의개수를 증가하거나 감소시키는 서비스 등을 함께 제공하기에 운영의 어려움에서 벗어날 수 있다.
docker는 리눅스 상에서 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있도록 도와주며, 계층화된 파일 시스템에 기반해 효율적으로 이미지(프로세스 실행 환경)을 구축할 수 있도록 한다. docker를 사용하면 이 이미지를 기반으로 컨테이너를 실행할 수 있으며, 다시 특정 컨테이너의 상태를 변경해 이미지로 만들 수 있다. 이렇게 만들어진 이미지는 파일로 보관하거나 원격 저장소를 사용해 쉽게 공유할 수 있으며, docker만 설치되어 있다면 필요할 때 언제 어디서나 컨테이너로 실행하는 것이 가능하다.
웹 서버 소프트웨어로 웹 서버, 리버스 브록시 및 메일 프록시 기능을 가진다. NGINX는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다. 아파치 HTTP 서버의 스레드/프로세스 기반 구조를 가지는 것과는 대조적이다. apache보다 동작이 단순하고 동시접속 처리에 특화되었다. (이 점은 Node.js와 비슷하다.) Request 처리 방식에서 apache 서버와는 다르다는 점이 핵심적인 차이이다.
Apache
- 쓰레드 / 프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조.
- 사용자가 많으면 많은 쓰레드를 생성하며 메모리 및 CPU가 낭비된다.
- 1 thread = 1client
Nginx
- 비동기 Event-Driven 구조.
- 다수의 연결을 효과적으로 처리 가능.
- 코어 모듈이 Apache보다 적은 리소스로 빠르게 동작 가능.
소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴이다. CI(Continuous Integration) 툴이라고 표현한다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유영역에 있는 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해준다.
젠킨스와 같은 CI툼이 등장하기 전에는 일정 시간마다 빌드를 실행하는 방식이 일반적이었다. 특히 개발자들이 당일 작성한 소스들의 커밋이 모두 끝난 심야 시간대에 이러한 빌드가 타이머에 의해 집중적으로 진행되었는데, 이를 nightly-build라 한다. 하지만, 젠킨스는 정기적인 빌드에서 한발 나아가 서브버전, Git과 같은 버전관리시스템과 연동하여 소스의 커밋을 감지하면 자동적으로 자동화 테스트가 포함된 빌드가 작동되도록 설정할 수 있다.