💻 Backend

서버 스터디 1주차 [키워드 정리] - (1)

미미누 2021. 9. 29. 14:35

서버와 서비스

 

  • 서버의 사전적 정의: 네트워크에서 다른 컴퓨터나 소프트웨어와 같은 클라이언트에게 서비스를 제공하는 컴퓨터
  • 서버는 클라이언트에게 여러 가지 서비스를 제공하는 것을 뜻함.

 

클라이언트 - 서버 관계

  • 서버는 클라이언트에게 여러 가지 서비스를 제공하는 것을 뜻한다.
  • Ex) 웹 브라우저(클라이언트), 웹 사이트의 콘텐츠가 있는 컴퓨터(서버)
  • 서버는 클라이언트로부터 요청(Request)를 받아야 처리를 시작하여 서비스를 제공한다.

 

<처리 과정>

  1. 클라이언트가 서버에게 어떤 서비스를 요청
  2. 서버는 요청에 응답해 처리를 수행
  3. 서버는 처리 결과를 클라이언트에게 반환
  4. 클라이언트는 처리 결과를 받음

 

서버 구조

[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를 정의하고, 내장된 탐캣이나 제티로 웹 애플리케이션 서버를 실행가능

 

<스프링 부트와 스프링 차이점>

    1. Embed Tomcat: (Spring Boot 내부에 Tomcat이 포함되어있다.) 따로 Tomcat을 설치하거나 매번 버전을 관리해 주어야 하는 수고로움을 덜어준다.
    1. 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는 분할된 행 저장소 데이터베이스