1) 역할적, 상대적 개념
클라이언트에게 무언가를 요청 받고 이에 대응하는 서비스를 제공하는 컴퓨터 (사용자에게 데이터나 리소스를 서빙)
2) 특징
클라이언트와 서버는 N : 1 관계이다.
일반적인 구조를 위와 같이 생각했음. (3-tier-Architecture)
서버개발자 입장에서 조금 더 기능 구현, 구체적으로 살펴보았을시에는
Client - Server - BackendLanguage - DB(DBMS)
cf) Server(ex.Apache, nginx), BL(ex.PHP), DB (Oracle, MongoDB)..
Client가 인터넷 내 주소 URL을 입력, 리소스를 서버에 요청
-> 서버의 Apache 프로그램은 포트로 웹서버에 요청하여 웹서버가 사용자에게 홈페이지 정보를 전달하게 해줌 (HTML, CSS)
-> 사용자가 로그인 요청이나 다른 정보 요청하면 PHP 스크립트 실행
-> MySQL에 쿼리 질의
-> MySQL은 저장된 데이터를 DB에서 가져와 가져온 데이터와 PHP 코드를 모두 HTML 형태로 변경하고, 해당 HTML을 아파치에 전송
-> 아파치는 완성된 HTML 파일을 클라이언트 측의 컴퓨터 웹 브라우저에 응답한다.
AWS는 가상 컴퓨터를 임대 받아 그 위에 자신만의 컴퓨터 애플리케이션들을 실행 할 수 있게 아마존에서 제공하는 서비스이다.
사용자가 아마존 머신 이미지(AMI)로 부팅하여 아마존이 "인스턴스"라 부르는 가상 머신을, 원하는 소프트웨어를 포함하여 구성할 수 있게 하는 웹 서비스를 제공함으로써 스케일링이 가능한 애플리케이션 배치(deployment)를 장려한다.
AWS RDS는 아마존 웹 서비스가 서비스하는 분산 관계형 데이터베이스이다. 애플리케이션 내에서 관계형 데이터베이스의 설정, 운영, 스케일링을 단순케 하도록 설계된 클라우드 내에서 동작하는 웹 서비스를 제공한다. EC2 인스턴스를 기반으로 운영하는 서비스이다.
EC2(Elastic Compute Cloud)는 아마존 웹 서비스에서 제공하는 서비스로 안전하고 크기 조정이 가능한 컴퓨팅 파워를 클라우드에서 제공하는 웹 서비스이다. 개발자가 더 쉽게 웹 규모의 클라우드 컴퓨팅 작업을 할 수 있도록 설계되었다.
RDS와 EC2의 차이
cf) 클라우드란?
컴퓨터 통신망이 구름과 같은 것에 싸여 안이 보이지 않고, 일반 사용자는 이 복잡한 내부를 굳이 알 필요도 없이 어디에서나 구름 속으로 손을 집어넣어(통신망에 접근해서) 자기가 원하는 작업을 할 수 있다는 것이다.
Scale-out 시 문제점
Web Server의 부하가 생기면 단순히 수를 늘리고 L4와 같은 부하분산장비로 처리하면 문제가 해결되겠지만,
DB의 경우에는 이런 확장 및 증설이 어렵고 돈도 돈대로 나간다.
DB서버는 메모리에 의존적이다.
DB는 (web server에 비해) 거의 메모리에 의존적이다.
사용률이 많은 서버를 운영 할 때,
이런 상황에서 WEB과 DB를 함께 운영하게 되면 메모리 자원이 부족한 현상을 겪게 된다.
대부분은 분리해서 운용하고 있음.
cf. (다양한A+P / 하나의 M) -> 구글 내 다양한 기능(구글 - mail, drive 등등)
도메인은 IP 주소를 대신하여 사용하는 주소이다.
다른 참여하신 분들 모두 프로젝트 경험이 많은 분들이 대다수였다. 늦었다고 생각했을 때가 정말 늦은 거라고 열심히 따라가려고 노력해야할 것 같다는 생각이 들었다.
끝으로 선생님께서 개발자 작업을 하며 소통 의 중요성을 계속해서 강조하셨다. geek한 개발자가 아닌 소통을 통해 협업하는 사람이 될 수 있도록 노력하자.