dev-miri

[Server-1주차] 서버 개념 정리(1) 본문

Spring boot/UMC(22-1)

[Server-1주차] 서버 개념 정리(1)

miri-dev 2022. 4. 3. 14:15

https://www.udemy.com/share/106bCo3@N3BbztK43FApBUb6MwnZrjKv86xAQsUcEOpZr3BsJ98mXwxUlL4Fj6t6bgkVOdHsqA==/

저는 요새 udemy의 [누구나 따라할 수 있는 서버 클론코딩]이라는 강의를 듣고 스터디를 진행하고 있습니다!

이와 관련해서 서버 개념들과 사용법, 개인적으로 공부한 부분, 어려웠던 부분까지 정리해보려고 합니다!

 

1. 서버

 1.1 서버란? 서버(Serv+er)는 클라이언트가 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로 컴퓨터 프로그램 또는 장치를 의미한다. 특히, 서버에서 동작하는 소프트웨어를 서버 소프트웨어라 한다. 

 

 1.2 클라이언트-서버 관계

서버는 사용자(클라이언트)의 요청에 의하여 서비스를 하는데 이와 같이 구성된 시스템을 클라이언트-서버 시스템이라고 한다.

서비스를 요청하는 클라이언트와 클라이언트의 요청을 처리하는 서버와의 협동작업을 통해서 사용자가 원하는 결과를 얻는 처리방식이 클라이언트-서버 시스템이다.

=>서버와 클라이언트는 1:N관계, 요쳥과 응답 관계

 

1.3 서버의 동작 방식과 순서

클라이언트(web, 안드로이드, ios, 게임)서버(Apache, Nginix)백엔드 언어(php, spring, node.js) DB, DBMS(mysql, oracle, mongo db)

 

1.4 서버의 구조(종류 중 웹서버)

1.4.1 웹 서버란? 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램이다. 

클라이언트(웹 브라우저 또는 웹 크롤러로 불림) HTTP를 통해 리소스를 요청하며 서버는 해당 리소스를 반환하거나 처리할 수 없을 경우 에러 메시지를 전달한다. 

 

1.4.1 웹 서버의 종류

1.4.1.1 ngnix : 오픈 소스 웹 서버 프로그램. HTTP와 리버스 프록시 및 메일 프록시 기능을 가진다. 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다. 이것은 아파치 HTTP 서버의 스레드/프로세스 기반 구조를 가지는 것과는 대조적이다. 이러한 구조는 서버에 많은 부하가 생길 경우의 성능을 예측하기 쉽게 해준다. 

 

1.4.1.2 apache : apache HTTP Server는 오픈 소스 소프트웨어 그룹인 아파치 소프트웨어 재단에서 만드는 웹 서버 프로그램이다. 유닉스 기반으로 만들어졌기에, 아파치 HTTP 서버는 리눅스에서 돌리는 것을 목표로 만들어진 프로그램이다.

아파치는 확장성이 상당히 좋은데, 모듈이라는 개념으로 수많은 기능을 덧붙일 수 있다. 이 모듈을 통해 다른 프로그램과의 연동도 가능하다. 이 때문에 여러가지 서버 사이드 프로그래밍 언어나 DBMS와도 궁합이 잘 맞았는데, PHP가 있다.

Apache+PHP+MySQL을 통틀어 "APM"이라고 통칭한다.  

 

1.5 DB, DBMS

1.5.1 DB란? 데이터베이스는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. 작성된 목록으로써 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다. 효율적으로 저장, 검색, 갱신할 수 있도록 데이터 집합들끼리 연관시키고 조직화 되어야 한다.

1.5.1.1 DB의 특성

-실시간 접근성 : 사용자의 요구(Query)를 실시간 처리 및 응답할 수 있다

-계속적인 변화 : 정확한 값을 유지하려고 삽입, 삭제, 수정 등의 동적인 작업을 통해 데이터를 지속적으로 갱신할 ㅜ 있다.

-동시 공유성 : 사용자마다 서로 다른 목적으로 사용하므로 여러 사용자가 동일한 데이터 동시에 접근 및 이용할 수 있다.

-내용 참조 : 저장한 데이터 레코드의 위치나 주소가 아닌 사용자가 요구하는 데이터의 내용, 즉 데이터 값에 따라 참조할 수 있어야 한다. 

 

1.5.2 DBMS란? 

데이터베이스를 생성 및 관리하며 응용 프로그램들이 데이터베이스를 공유하며 사용할 수 있는 환경을 제공하는 소프트웨어

데이터와 응용 프로그램 사이를 중계(DB-DBMS-응용 프로그램)

데이터베이스를 직접 응용 프로그램들이 조작하지 않고 DBMS를 통해 조작, 관리한다

여러 응용 소프트웨어 또는 시스템이 동시에 데이터베이스에 접근하여 사용할 수 있게 한다

 

1.5.3 SQL과 NoSQL

1.5.3.1 SQL(Structured Query Language)이란?  SQL는 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 

고안 목적

-관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리

-데이터베이스 스키마 생성과 수정

-데이터베이스 객체 접근 조정 관리

관계형 데이터베이스의 핵심적인 특징 

-데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다

-데이터는 관계를 통해 여러 테이블에 분산된다

SQL의 종류 : Mysql. mmsql, ORACLE

 

1.5.3.2 NoSQL이란? NOSQL 데이터베이스는 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다.

접근 동기

-디자인의 단순화

-수평적 확장성

-세세한 통제

NoSQL 데이터베이스는 단순 검색 및 추가 작업을 위한 매우 최적화 된 키 값 저장 공간이다.

NoSQL 데이터베이스는 빅데이터와 실시간 웹 애플리케이션의 상업적 이용에 널리 쓰인다. 

NoSQL의 종류 :  MongoDB, redis, cassandra

 

1.5.3.3 SQL과 NoSQL의 차이

-SQL(관계형 DB)을 사용하면 RDBMS에서 데이터를 저장, 수정, 삭제 및 검색할 수 있음

데이터는 테이블에 레코드로 저장되는데, 각 테이블마다 명확하게 정의된 구조가 있다. 해당 구조는 필드의 이름과 데이터 유형으로 정의된다. 따라서 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다. 즉, 정해진 구조에 맞는 레코드만 추가가 가능한 것이 관계형 데이터베이스의 특징 중 하나다.

또한, 데이터의 중복을 피하기 위해 '관계'를 사용한다. 하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어지는 장점이 있다. 

 

-NoSQL(비관계형 DB)는 스키마도 없고, 관계도 없다. NoSQL에서는 레코드를 문서라고 부른다. 여기서 SQL과의 핵심적인 차이가 있는데, SQL은 정해진 스키마를 따르지 않으면 데이터 추가가 불가능했다. 하지만 NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가가 가능하다. 문서는 Json과 비슷한 형태로 가지고 있다. 관계형 데이터베이스처럼 여러 테이블에 나누어담지 않고, 관련 데이터를 동일한 '컬렉션'에 넣는다. 따라서 여러 테이블에 조인할 필요없이 이미 필요한 모든 것을 갖춘 문서를 작성하는 것이 NoSQL이다. 

 

-데이터베이스 서버의 확장성은 '수직적'확장과 '수평적'확장으로 나누어진다.

 -수직적 확장 : 단순히 데이터베이스의 서버의 성능을 향상시키는 것 (ex : CPU 업그레이드)

 -수평적 확장 : 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산됨을 의미(하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동)

  =>데이터 저장 방식으로 인해 SQL 데이터베이스는 일반적으로 수직적 확장만 지원한다(수평적 확장은 NoSQL 데이터베이스에서만 가능)

 

 

 

 

참고 : https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html

 

SQL과 NOSQL의 차이 | 👨🏻‍💻 Tech Interview

SQL과 NOSQL의 차이 웹 앱을 개발할 때, 데이터베이스를 선택할 때 고민하게 된다. 보통 Spring에서 개발할 때는 MySQL을, Node.js에서는 MongoDB를 주로 사용했을 것이다. 하지만 그냥 단순히 프레임워크

gyoogle.dev

 

Comments