Lina's Toolbox

네트워크 본문

스파르타 내일 배움 캠프 AI 웹개발 과정/CS

네트워크

Woolina 2024. 7. 29. 14:59

 

클라이언트와 서버

클라이언트

네트워크를 통해 서버에 요청을 하고 서비스를 제공받는 주체는 모두 클라이언트.

여기서 '요청'이란 서버한테 정보를 요청할 수도 있고, 길 찾기 기능을 요청할 수도 있고, 음식 배달을 요청할 수도 있고,

이런 어떤 서비스를 요청하는 것을 의미

 

클라이언트 예시

  • 핸드폰을 통해 ‘배달의민족’에 음식 배달 시키기
    • 모바일(핸드폰)에서 음식 배달 서비스를 요청 → 회사 어딘가(보통 서버실이 따로 있습니다)에 있는 서버에서 해당 요청을 접수 → 서버에서 해당 접수를 처리하고 다시 모바일(핸드폰)으로 알림 보내기
    • 위 과정에서 핸드폰이 요청을 하는 주체이기 때문에 클라이언트가 됩니다.
  • 데스크탑에서 ‘롤’ 게임 다운로드 받기
    • 데스크탑에서 ‘롤’웹사이트에 들어가서 게임 다운로드 버튼 클릭 → 회사 어딘가에 있는 서버에서 게임다운로드 서비스를 요청을 접수 → 서버에 저장되어 있는 게임 설치 파일을 데스크탑에 다운로드
    • 위 과정에서 데스크탑이 요청을 하는 주체이기 때문에 클라이언트가 됩니다.
  • ‘카카오톡’에서 메시지 주고 받기
    • 장범매니저님이 영오/승주 매니저님 톡방에 “월급 압수”를 입력 → 회사 어딘가에 있는 서버에서 해당 메시지를 접수 → 서버에서 해당 메시지를 영오/승주 매니저님 톡방에 전달
    • 위 과정에서 장범매니저님의 핸드폰이 요청을 하는 주체이기 때문에 클라이언트가 됩니다.

이렇게 네트워크를 사용하려면 통신사(KT, SKT, LG)에서 제공하는 5G, 인터넷 등을 이용해야 하기 때문에 그래서 인터넷 비용이 발생하게 되는 것입니다. 그래서 어쩌다가 해당 서버가 먹통이면 톡을 보낼 수 없거나 메일을 받을 수 없거나 하는 일이 발생하게 되는 것입니다.


서버

네트워크를 통해 클라이언트의 요청을 받고 서비스를 제공하는 주체는 모두 서버입니다.

개념적으로는 그렇지만 일반적을 서버라고 한다면 중요 시스템이 상주하고 클라이언트의 요청을 처리하는 장치를 의미합니다.

 

보통 서버는 다수의 클라이언트를 상대해야하고 대량의 데이터를 저장하며 잦은 서비스 요청을 처리해야하기 때문에

대형 고성능 PC를 서버로 두게됩니다.

서버실에 있는 서버들
소형 서버 예시 (VIA사에서 개발한 가정용 소형 서버)

 

그냥 내 PC를 서버로 둘 수도 있다.

일반적인 데스크탑의 본체

 

대형 고성능 PC라는 거는 위에 그림 중에 대형 서버를 의미해요. 슈퍼 컴퓨터도 저렇게 생겼어요.

 

서버의 종류

  • 클라우드 서버: 실제로 조작하는 사용자가 원격으로 사용할 수 있는 서버.
    대표적으로 Google Cloud, AWS, Microsoft Azure 등.
    단기간 적으로는 실제로 물리적인 서버를 구매하는 것보다 저렴

  • 웹 서버: 웹 브라우저에서 요청한 웹 페이지를 제공하는 서버.
    대표적으로 Apache(아파치), NGINX(엔진엑스), GWS(구글 웹 서버)

  • 데이터 베이스 서버: 오로지 데이터베이스를 위한 서버.
    MySQL. PostgreSQL, Oracle DB

  • 어플리케이션 서버: 웹 서버랑 데이터베이스 사이에 있는 미들웨어 같은 존재.
    인터넷에서는 HTTP(HyperText Transfer Protoco)를 통해 사용자에게 서비스해주는 일도 한답니다.
    실질적으로 일반 사용자들에게 제공되는 서비스를 수행하는 서버

  • 프록시 서버: 클라이언트의 요청을 본 서버 외의 서버가 대신 처리해주는 서버.
    보안이나 다량의 접속으로 인한 과부하를 막고 처리 속도를 향상시키기 위해 사용

Database(DB, 데이터베이스)

정보를 체계적으로 구조화하여 관리하는 시스템

 

데이터가 저장되는 형태

표(Table)하나의 개체를 나타낸다. '엔티티'라고도 한다.

수강생 테이블이 하나의 개체! 

python으로 MTV에서 M에 해당하는 모델을 구현할 때 바로 이 테이블을 구현하는 것입니다.

하나의 테이블이 하나의 class가 될 거에요.

 

열(Colum, 컬럼, 세로줄)이 '필드'.

필드에는 데이터의 속성이 들어있다. (ex. 이름, 나이, ...)

 

행(row, 로우, 가로줄)이 '레코드' 혹은 '튜플'

래코드에는 하나의 항목에 대한 데이터가 들어있다.

1번 레코드에는 '리동무, 24, 41'이라는 데이터가 들어있다.

2번 레코드에는 '박동무, 35, 30'이라는 데이터가 들어있다.

 

DBMS (데이터 베이스 관리 시스템)

데이터 베이스를 관리하기 위한 시스템

 

RDBMS (관계형 데이터베이스 관리 시스템)

데이터 베이스 관리 시스템인데 테이블 간에 관계를 두어 구조적으로 관리하기 위한 시스템

 

RDBMS 종류

  • MySQL
  • PostgreSQL
  • SQLite
  • Oracle Database
  • MariaDB
  • 등등

 

SQL(Structured Query Language)

SQL 이란 DBMS를 조작하기 위한 프로그래밍 언어에요.

  • SQL 종류
    • DDL(정의어): 개체(테이블)을 생성하거나 속성을 정의할 때
    • DML(조작어): 테이블에 데이터를 삽입, 조회, 수정, 삭제 할 때 (이것을 CRUD 라고합니다.)
    • DCL(제어어): DB에 대한 접근 권한을 주거나 뺐을 때
    • TCL(트랜젝션 제어어): 트랜잭션을 조작할 때
      • 트랜잭션이란 DB의 상태를 변화시키기 위한 작업 

 

스키마

간단하게 정의하면 DB의 구조

 

팀장: "자네가 만든 DB 스키마가 어떻게 되지?"

"테이블은 수강생이랑 튜터가 있고요 각 테이블은 이름, 나이, 속성이 있어요."

 

말 그대로 DB의 구조가 '스키마' 이다.

 

더보기

스키마 종류

  • 개념 스키마: DB의 전체적인 구조를 의미해요. 우리가 일반적으로 스키마! 하면 개념 스키마를 의미합니다.
  • 내부 스키마: 물리적인 DB 구조에 대한 스키마예요.
  • 외부 스키마: 실제 사용자들인 DBA(데이터베이스관리자)라거나 프로그래머라거나 여하튼 DB를 사용하는 사용자들에게 인터페이스가 되어주는 밖에 나와있는 스키마예요.

반드시 알아야하는 개념!

  • 클러스터링
    여러 대의 컴퓨터가 하나의 시스템처럼 동작하는 것 예시로 큰 기관에는 여러 데이터를 담고 접수하는 시스템과 그 시스템들을 관리하는 시스템이 있다고 하였을 때, 사용자는 마치 하나의 시스템에서 작업하는것같은 느낌을 받음. 하지만 실제로는 여러 컴퓨터가 하나의 시스템 처럼 동작하는것임. 하나의 작업만 하기 위한 것이 아닌 여러 컴퓨터를 통해 신뢰성을 확보하기 위한 기술.

  • 병렬컴퓨팅
    하나의 큰 문제를 여러 컴퓨터가 나누어 해결하는 방식 예시로 슈퍼컴퓨터를 통해 ‘기상예측’이라는 하나의 일을 처리 하는 것이 대표적인 예, 그러면 클러스터랑 차이가 무엇? 병렬컴퓨팅을 한다고 반드시 모든 컴퓨터가 같은 시스템을 사용하는 것은 아님. 무엇이 되었건간에 한가지 문제를 처리하기 위해 여러 컴퓨터가 들러붙어서 해결하는 방식을 의미함.

  • Protocol(프로토콜): 통신 규약, 형식을 의미합니다.

  • HTTP(HyperText Transfer Protocol, 그냥 에이치티티피라고 읽어요) 서버랑 클라이언트가 웹상에서 정보를 주고 받을 수 있도록 해주는 프로토콜을 의미

  • HTTPS(HyperText Transfer Protocol Secure, 마찬가지로 그냥 에이치티티피에스라고 읽어요) 기존의 http는 암호화를 하지 않는 프로토콜이다보니 보안성이 취약한 문제가 있었습니다. 해당 문제를 극복하기 위해 암호화를 하는 http프로토콜을 https라고 합니다. (그렇다고 100% 보안성이 확보된것은 아니지만 그래도 기존의 http보단 보안성이 우수해요)

  • HTML(Hypertext Markup Language) 웹 페이지를 어떻게 보여줄 것인가를 기술하는 마크업 언어
  • Browser(브라우저) 웹 사이트를 보여주기 위한 응용프로그램이예요. 크롬, 웨일즈, 엣지, 사파리 이런애들이 있어요.

  • UDP(User Datagram Protocol, 유디피) 비연결형 데이터그램 방식의 프로토콜로 신뢰성을 보장하지 않아요. TCP에 비해 구조가 단순하고 빨라요.
  • TCP(Transmission Control Protocol, 티씨피) 연결형 가상회선 방식의 프로토콜로 신뢰성을 보장합니다. UDP에 비해 구조가 복잡하고 느려요.
  • IP(Internet Protocol, 아이피) 호스트(네트워크상에서 하나의 노드. 즉, 하나의 PC를 생각하시면 됩니다.)의 인터넷 주소를 지정하고 패킷의 분해 조립을 담당하는 프로토콜. 이 프로토콜을 통해 우리의 IP 주소를 해석할 수 있어요. IP 주소란 192.000.000.000 이런식으로 생긴애들을 의미해요.

windows에서 확인하는 ip
mac에서 확인하는 ip

  • Domain(도메인) 네트워크 상에서 호스트를 가르키는 이름
    www.naver.com 이런거나 www.google.com이런 이름을 도메인 이름이라고 합니다.

  • DNS(Domain Name System, 디엔에스) 컴퓨터가 읽기 편한 구조인 IP주소를 도메인 이름으로 바꿔주는 시스템.
    원래 192.xxx.xxx.xxx 이런 식으로 치고 들어 가야 하는데, 이런 주소를 우리가 읽기 편한 www.naver.com 이런거나 www.google.com이런 도메인 이름으로 바꿔주는 시스템

RESTful

REST(Representational State Transfer) 아키텍처를 지향하는 웹 서비스.
자원의 상태를 대표적으로 표현할 수 있는 어떤 이름으로 전달하는 방식을 의미합니다.
여러가지 API들이 있지만 우선 GET이라는 녀석이랑 POST라는 녀석을 살펴보자.

 

’GET’이라고 했을 때 ‘아하 자원을 가져 오겠다는 얘기구나?’ 라고 바로 알 수 있고

POST’라고 했을 때 ‘아하 자원을 보내겠다는 얘기구나?’ 라고 바로 알 수 있도록 구현하는 것을 RESTful 하게 구현했다고 해요.

 

즉, 그 이름만 가지고 어떤 행동을 하려는지 바로 유추할 수 있도록 구현하는 것을 의미해요. 매우매우 유용하고 중요한 개념입니다.

 

쉽게 말하면 웹에서 여러분이 정보를 조회하는 서비스를 요청하려고 해요. 그러면 GET 이라는 API를 통해 가져옵니다. 전세계적으로 약속했어요. 반대로 정보를 보낼 때는 POST 라는 API를 통해 정보를 보냅니다.

 

  • API(어플리케이션 프로그래밍 인터페이스): 어떤 서비스를 사용하기 위한 소프트웨어 인터페이스
    함수 단위나 클래스 단위로 구현할 수 있습니다.

  • RESTful API: 자원의 상태를 대표적으로 표현할 수 있는 어떤 이름으로 전달하는 방식으로 구현한 API.
    GET, POST, PUT, DELETE 같은 메소드들이 있습니다.

OSI 7계층

국제표준화기구(ISO)에서 정의한 개념으로 네트워크 통신을 7계층으로 나누어 정의하는 개념

  • 자세한 설명
    • 풀어서 설명드리면 우리가 사용하는 네트워크는 사실 여러 단계(계층)을 거쳐서 메시지를 주고 받게 돼요.
      그 과정을 ‘규격화하고 세부적으로 정의하자!’해서 나오게된 개념입니다.

OSI 7계층과 TCP/IP 4 계층

OSI 7 계층별 설명

  • 제 1계층 - 물리계층
    • 전기적, 기계적, 절차적, 기능적인 수단을 사용하여 데이터 전송 매체에서 실제 비트 전송을 담당합니다
    • 케이블, 스위치, 허브, 전압 레벨 등등 진짜 물리적인 애들
  • 제 2계층 - 데이터 링크 계층
    • 물리 계층을 통해 전달된 데이터를 에러 없이 전달하기 위한 방법을 정의하고 MAC 주소를 사용하여 물리적인 네트워크 간의 데이터를 전송합니다.
    • 스위치, 브리지, 프레임, MAC 주소 등등
  • 제 3계층 - 네트워크 계층
    • IP 주소를 사용하여 데이터 패킷을 전달하는데 네트워크 상에서 최적의 경로를 설정하여 데이터를 전송합니다
    • 라우터, IP 주소, 패킷 등등
    • 네트워크상에서 작은 단위의 블록화된 어떤 정보를 전달하는데 이것을 패킷이라고 합니다.
  • 제 4계층 - 전송 계층
    • 종단 간(end-to-end) 통신을 제공하며, 데이터 전송의 신뢰성을 보장합니다.
    • TCP, UDP, 포트번호 등등
  • 제 5계층 - 세션 계층
    • 양끝단에서 통신을 관리하는 계층으로 통신이 끝날때까지 응용 프로그램 간의 세션을 설정, 관리 및 종료합니다.
  • 제 6계층 - 표현 계층
    • 암호화, 복호화, 압축 등을 통해 데이터 형식을 응용 프로그램에 맞게 변환합니다
  • 제 7계층 - 응용 계층
    • 실질적으로 사용자가 마주하고 상호작용하는 계층으로 최종서비스를 제공합니다.
    • HTTP, FTP, SMTP, DNS 등등

TCP/IP 4계층별 설명

  • OSI 7 계층을 TCP/IP 프로토콜 입장에서 나눈 개념입니다. OSI 7 계층이 있는데 뭐하러 또 4계층으로 나누냐구요? OSI 7 계층은 네트워크 통신 구조 전체를 세분화 한거라면 TCP/IP 가 OSI 7 계층중에서 어느 영역에서 어떻게 활동하는지 나눈 계층이에요.
  • 제 1계층 - 네트워크 엑세스 계층
    • OSI 1~2 계층에 해당합니다.
  • 제 2계층 - 인터넷 계층
    • OSI 3계층에 해당합니다.
  • 제 3계층 - 전송 계층
    • OSI 4계층에 해당합니다.
  • 제 4계층 - 응용 계층
    • OSI 5~7계층에 해당합니다.

국제 표준화 기구 공식 홈페이지
https://www.iso.org/home.html
다양한 국제 표준을 지정하는 곳이.
공신력은 있으나 강제성은 없습니다.

OSI 7 layer (OSI 7 계층)에 대해 정의한 문서
https://www.iso.org/standard/20269.html
영어로 되어있거나 프랑스어로만 되어있고 전자문서는 무료로 받을 수 있어요.

보안

사이버 보안중에서도 네트워크 보안 분야는 가장 중요한 보안중에 하나로 꼽힙니다.

  • 보안 기술 및 프로그램
    • **Firewall(**방화벽): 네트워크 트래픽을 필터링하여 불법 접근을 차단
    • VPN(가상 사설망): 암호화된 가상의 네트워크망을 통해 원격으로 접속하기 위한 기술
    • 키(key)를 통한 접근 제어 방식
      • 대칭키: 암호화 / 복호화에 같은 키가 사용됨.
      • 비대칭키: 암호화 / 복화화에 사용되는 키가 다름.
        • 공개키: 누구나 접근 가능한 키
        • 비밀키(개인키): 사용자 외에 접근 불가능한 키
    • hash(해시): 본래 정보를 임의의 값으로 바꿔버리는 기술, 단방향 암호화 방법으로 해시를 적용한 주체 외에는 풀 수가 없다.

해킹 기술 및 프로그램

  • DDoS(Distributed Denial of Service, 디도스, 분산 서비스 거부) 공격: 특정 서버나 네트워크가 처리할 수 없을 정도의 트래픽(서비스 요청)을 발생시켜서 과부하를 일으키는 사이버 공격
  • malware(멀웨어): 악성소프트웨어로 가짜백신, 랜섬웨어, 에드웨어, 트로이목마바이러스 이런 놈들 싹다 멀웨어의 한 종류입니다.
  • sniffing(스니핑): 네트워크 상에서 다른 사람의 정보를 훔쳐보는 것