서버와 서비스
- 서버의 사전적 정의: 네트워크에서 다른 컴퓨터나 소프트웨어와 같은 클라이언트에게 서비스를 제공하는 컴퓨터
- 서버는 클라이언트에게 여러 가지 서비스를 제공하는 것을 뜻함.
클라이언트 - 서버 관계
- 서버는 클라이언트에게 여러 가지 서비스를 제공하는 것을 뜻한다.
- Ex) 웹 브라우저(클라이언트), 웹 사이트의 콘텐츠가 있는 컴퓨터(서버)
- 서버는 클라이언트로부터 요청(Request)를 받아야 처리를 시작하여 서비스를 제공한다.
<처리 과정>
- 클라이언트가 서버에게 어떤 서비스를 요청
- 서버는 요청에 응답해 처리를 수행
- 서버는 처리 결과를 클라이언트에게 반환
- 클라이언트는 처리 결과를 받음
서버 구조
[Server Program]
1. 웹서버
- 하드웨어 측면: 웹서버의 소프트웨어와 컴포넌트 파일을 저장하는 컴퓨터 (컴포넌트 파일: HTML 문서, 이미지, CSS stylesheets, JavaScript files..). 웹 서버는 인터넷에 연결되어 웹에 연결된 기기들이 웹 서버의 데이터를 주고 받을 수 있도록 함.
- 소프트웨어 측면: 웹 서버는 기본적으로 웹 사용자가 어떻게 호스트 파일에 접근하는 지를 관리함.
- 웹서버: HTTP 서버로 이해가능, URL(Web address)와 HTTP의 소프트웨어 일부
- 웹 서버의 주된 기능: 웹 페이지를 클라이언트로 전달
- 주로 HTML, CSS, Javascript, Image (정적인 정보)가 클라이언트로 전달
- 주된 기능은 콘텐츠를 제공하는 것이지만 클라이언트로부터 콘텐츠를 전달 받는 것도 웹 서버의 기능에 속한다.
- 대표적인 웹서버: IIS, Apache, Nginx, GWS
- 브라우저가 웹 서버의 파일을 필요할 때, 브라우저는 HTTP를 통해 파일 요청
- 요청이 웹서버(하드웨어)로 도달 → HTTP 서버(소프트웨어)는 요청된 파일을 HTTP를 통해 전달
정적 웹 서버: HTTP 서버(소프트웨어)가 있는 컴퓨터(하드웨어)로 구성. 서버가 파일을 요청한 브라우저에게 전송하기 때문에 '정적'이라고 불림
단순히 HTML 문서만을 사용자에게 제공
동적 웹 서버: 정적 웹서버 + 추가적인 소프트웨어(일반적인 애플리케이션 서버, 데이터베이스) 애플리케이션 서버가 HTTP 서버를 통해 브라우저로 파일을 전송하기 전에 애플리케이션 서버가 업데이트
사용자의 요구에 따라 다양한 웹 페이지를 제공하기 때문에 (php와 MySQL 과 같은 데이터 베이스를 연계하여 사용)
2. nginx
- 엔진엑스(Nginx)는 Igor Sysoev 라는 러시아 개발자가 개발한 동시접속 처리에 특화된 웹 서버 프로그램
- Apache보다 동작이 단순하고, 전달자 역할만 하기 때문에 동시접속 처리에 특화
- 동시접속자(약 700명) 이상이라면 서버를 증설하거나 Nginx 환경을 권장
Nginx(웹서버)의 역할
1. 정적 파일을 처리하는 HTTP 서버로서의 역할
- 웹서버의 역할은 HTML, CSS, Javascript, 이미지와 같은 정보를 웹 브라우저(Chrome, Iexplore, Opera, Firefox 등)에 전송하는 역할을 한다.
2. 응용프로그램 서버에 요청을 보내는 리버스 프록시로서의 역할
- 클라이언트가 가짜 서버에 요청하면, 프록시 서버가 배후 서버(reverse server)로 부터 데이터를 가져오는 역할을 한다.
- 리버스 프록시 서버(Nginx), 리버스 서버(응용 프로그램 서버)
왜 응용프로그램 서버에 리버스 프록시가 필요할까?
- 요청에 대한 버퍼링이 있기 때문
- 클라이언트가 직접 App 서버에 요청하는 경우, 프로세스 1개가 응답 대기 상태가 되어야함, 프록시 서버가 요청을 배분하는 역할
- Nginx는 비동기 처리 방식 채택
- 동기 처리 방식: A가 B에게 데이터를 요청했을 때, 이 요청에 따른 응답을 주어야만 A가 다시 작업 처리가 가능 (하나의 요청, 하나의 작업에 충실)
- 비동기(Asynchronous) : A의 요청을 B가 즉시 주지 않아도, A가 또 다른 작업 처리가 가능한 방식
3. apache
- Apache HTTP server(HTTPD) 오픈소스 소프트웨어 그룹인 아파치 소프트웨어 재단에서 만든 웹서버 프로그램
- 유닉스 기반 프로그램 → 리눅스 서버에서 지원이 잘 됨
- 구축이 쉽고 다양한 추가 기능을 가지고 있기 때문에 현재 가장 인기있는 웹서버로 이용되고 있음.
[Back-end Language]
1. java - spring, spring boot
- Spring: JAVA의 웹 프레임워크로 JAVA 언어를 기반으로 사용 (JAVA 기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크)
- JAVA로 다양한 어플리케이션을 만들기 위한 프로그래밍 툴
- 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공
<장점>
- 중복코드의 사용률을 줄여주고, 비즈니스 로직을 더 간단하게 할 수 있음.
- 오픈소스를 좀더 효율적으로 가져다 쓰기 좋은 구조
- Spring Boot: 스프링 프레임워크를 사용하기 위한 설정의 많은 부분을 자동화하여 사용자가 편하게 스프링을 활용할 수 있도록 도움
- 스프링 부트 starter 디펜던시만 추가해주면 바로 API를 정의하고, 내장된 탐캣이나 제티로 웹 애플리케이션 서버를 실행가능
<스프링 부트와 스프링 차이점>
-
- Embed Tomcat: (Spring Boot 내부에 Tomcat이 포함되어있다.) 따로 Tomcat을 설치하거나 매번 버전을 관리해 주어야 하는 수고로움을 덜어준다.
- starter을 통한 dependency 자동화 :과거 Spring framework에서는 각각의 dependency들의 호환되는 버전을 일일이 맞추어 주어야 했고, 하나의 버전을 올리고자 하면 다른 dependeny에 까지 영향을 미쳐 version관리에 어려움이 많았음.
2. javascript - node.js, express
- node.js: Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임(자바스크립트를 브라우저 밖에서 사용하게 해주는 프로그램)
- 노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있으며, 서버를 실행하는데 제일 많이 사용됨
- 자바스크립트 런타임: 런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경. 노드는 자바스크립트 프로그램을 컴퓨터에서 실행가능
- 이벤트 기반: 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식. 특정 이벤트가 발생할 때 무엇을 할지 미리 등록→ 이벤트 리스너에 콜백 함수를 등록
- 이벤트가 발생하면 등록해둔 콜백 함수를 호출하며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기합니다.
3. python - django, flask
Django: Python으로 만들어진 무료 오픈소스 web application framework
- web application framework: 웹사이트 개발에 자주 사용하는 요소들을 갖춘 tool(회원가입, 로그인, 글쓰기 요소 등)
- Django : MVT(MVC) 모델
MVC : Model, View, Control 3가지로 부분으로 코드를 나누어 각각 관리하는 모델
- Model : 데이터베이스 관련 로직
- View : 웹브라우저에 실제로 보이는 부분에 관한 로직 (장고에서는 Template)
- Control : View와 Model을 이어주는 로직 (장고에서는 View가 Control의 역할)
Flask: 오스트리아의 오픈소스 개발자 아르민 로나허(Armin Ronacher)가 만든 파이썬 웹 프레임워크
- 플라스크(마이크로 웹 프레임워크: 프레임워크를 간결하게 유지하고 확장가능)
[DB, DBMS]
1.SQL
Mysql
MYSQL: 전세계적으로 가장 널리 사용되고 있는 오픈 소스 데이터베이스이며, MySQL AB사가 개발하여 배포/판매하고 있는 데이터베이스(DataBase)
- 표준 데이터베이스 질의 언어 SQL(Structured Query Language)을 사용하는 관계형 데이터베이스 관리 관리시스템(RDBMS)
- 다중사용자, 다중 쓰레드를 지원하고, C, C++, Eiffel, 자바, 펄, PHP, Pyton 스크립트 등을 위한 응용프로그램 인터페이스(API)를 제공
mssql
- MSSQL: MS사에서 1989년에 최초로 발표하면서 세상에 나온 DBMS
- MSSQL의 특징: MYSQL과는 다르게 window server에서만 구동이 되고 C#과는 가장 높은 호환성을 자랑하는 DBMS
ORACLE
- Oracle Corporation이란 미국의 기업에서 만든 데이터베이스 관리 시스템(DBMS, Database Management System)이라는 분야의 한 종류
- 오라클은 데이터를 저장하는 보관소를 의미하는 Database에서 가장 많이 쓰이며, 기능 또한 가장 훌륭한 것으로 알려진 Database
2.NoSQL
MongoDB
- NoSQL: 빅데이터를 다룰 때 RDBMS로만 트래픽을 감당하기 어려워져 이를 해결하기 위해 탄생한 것이 NoSQL
- 관계형 데이터 모델을 사용하지 않고 SQL을 사용하지 않는 그 이외의 모든 데이터베이스 시스템 또는 데이터 스토어
1)키-밸류 스토리지형 키-밸류형: Redis, memcached, Coherence,
2)열 지향 와이드 컬럼 스토어: Cassandra, HBASE, Cloud Database
3) 문서형: MongoDB, Couchbase, MarkLogic, DynamicDB MS-DocumentDB
- NOSQL 쓰는 이유: 아주 많은 양의 데이터를 효율적으로 처리가 필요할 때,
- 데이터의 분산처리, 빠른 쓰기 및 데이터의 안정성이 필요할 때
- mongoDB는 문서지향(Document-Oriented) 저장소를 제공하는 NoSQL 데이터베이스 시스템으로, 현존하는 NoSQL 데이터베이스 중 인지도 1위를 유지
- mongoDB에서는 데이터가 Document로 불리며, 이 데이터의 집합을 Collection(RDMS에서는 Table)이라고 함
- 특히 mongoDB는 문서지향 데이터베이스로, 이것은 객체지향 프로그래밍과 잘 맞고 JSON을 사용할 때 아주 유용
- 따라서 자바스크립트를 기반으로 하는 Node.js와 호환이 매우 좋기 때문에, Node.js에서 가장 많이 사용되는 데이터베이스
redis
- REDIS(REmote Dictionary Server)는 메모리 기반의 “키-값” 구조 데이터 관리 시스템
- 모든 데이터를 메모리에 저장하고 조회하기에 빠른 Read, Write 속도를 보장하는 비 관계형 데이터베이스
- < String, Set, Sorted Set, Hash, List >의 데이터 형식을 지원
Cassandra
- Apache Cassandra는 확장성이 뛰어난 오픈소스 NoSQL 데이터베이스
- 여러 데이터 센터 및 클라우드에서 대량의 정형, 반정형 및 비정형 데이터를 관리하는 데 적합
- Cassandra는 분할된 행 저장소 데이터베이스
'💻 Backend' 카테고리의 다른 글
서버 4주차 정리 - DB에 관하여 - (1) (0) | 2021.10.17 |
---|---|
서버 3주차 - OS와 AWS에 대하여 (0) | 2021.10.10 |
서버 스터디 2주차 [키워드 정리] - (2) (0) | 2021.10.10 |
서버 스터디 2주차 [키워드 정리] (0) | 2021.10.10 |
서버 스터디 1주차 [키워드 정리]- (2) (0) | 2021.09.29 |