TIL

6주차 Day 1. 네트워크

ekdud 2024. 7. 31. 20:51

📑

     

    클라이언트

    : 네트워크를 통해 서버에 요청을 하고 서비스를 제공 받는 주체.

    ex. 핸드폰으로 음식배달 서비스를 요청하는 경우, 핸드폰이 클라이언트.

        데스크탑에서 게임을 다운로드 받는 경우, 데스크탑이 클라이언트. 

     

     

    서버

    : 네트워크를 통해 클라이언트의 요청을 받고 서비스를 제공하는 주체. 중요 시스템이 상주하고 클라이언트의 요청을 처리하는 장치. 보통 서버는 다수의 클라이언트를 상대해야하고 대량의 데이터를 저장하며 잦은 서비스 요청을 처리해야하기 때문에 대형 고성능 PC를 서버로 둠. 

     

    • 서버의 종류

    - 클라우드 서버: 실제로 조작하는 사용자가 원격으로 사용할 수 있는 서버. (Google Cloud, AWS, Microsoft Azure 등)

    - 웹 서버: 웹 브라우저에서 요청한 웹 페이지를 제공하는 서버. 정적인 데이터를 처리하는 서버. 이미지나 단순 hrml 같은 정적인 리소스들을 전달하며 WAS만을 이용할 때보다 빠르고 안정적으로 기능을 수행함. (Apache, NGINX, GWS 등)

     

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

    - (웹) 어플리케이션 서버: (W)AS. 웹 서버와 데이터베이스서버 사이에 있는 미들웨어같은 존재. 웹 어플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크. 인터넷상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)으로 볼 수 있음. 동적 서버 콘텐츠를 수행하는 것으로 일반적인 웹 서버와 구별되며, 주로 데이터베이스서버와 같이 수행됨.

    어플리케이션 서버

     

     

    *WAS는 정적, 동적 요청 처리가 모두 가능하므로 WAS만 사용하여 웹서비스를 배포해도 되지 않을까라는 생각을 할 수도 있지만.. 서버 부하를 방지하고 효율성을 위해 정적 콘텐츠 요청은 웹서버가 처리하도록 하는 것이 좋음.

    웹서버와 어플리케이션 서버를 함께 사용

     

     

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

    ex)

    브라우저에 웹 사이트 주소를 입력.

    → 프록시 서버가 사용자의 요청을 수신 받음.

    → 프록시 서버는 액세스하려는 웹 서버로 요청을 전달.

    → 웹 서버는 응답(웹 사이트 데이터)을 프록시 서버로 되보냄.

    → 프록시 서버가 사용자에게 응답을 전달.

     

     

     

    데이터베이스(DB)

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

     

    데이터가 저장되는 형태

    1. 표(Table, 테이블) : 하나의 개체를 나타냄(entity). 하나의 테이블이 하나의 class가 된다. 

    2. 열(Cloumn, 세로줄) : 필드. 데이터의 속성이 들어있음.

    3. 행(row, 가로줄) : 레코드 또는 튜플. 하나의 항목에 대한 데이터가 들어있음. 

     

    DBMS(데이터베이스 관리 시스템): 데이터 베이스를 관리하기 위한 시스템.

    - RDBMS: 관계형 데이터베이스 관리 시스템. 테이블 간에 관계를 두어 구조적으로 관리하기 위한 시스템. MySQL, PostgreSQL, SQLite, Oracle DB, MariaDB 등이 있다.

    - SQL: DBMS를 조작하기 위한 프로그래밍 언어.

    DDL(정의어): 개체(테이블)을 생성하거나 속성 정의.

    DML(조작어): 테이블에 데이터를 삽입, 조회, 수정, 삭제. (= CRUD)

    DCL(제어어): DB에 대한 접근 권한을 주거나 뺏음.

    TCL(트랜젝션 제어어): 트랜젝션 조작.

    *Transaction: DB의 상태를 변화시키기 위한 작업.

     

    *NoSQL 데이터베이스: 관계형 데이터베이스와 달리 비정형 데이터를 저장하고 처리할 수 있는 데이터베이스. 스키마가 없거나 유연한 구조를 가짐. 대규모 분산 시스템에서 높은 성능과 확장성을 제공. 

    ex) MongoDB(문서 지향형), Redis(키-값 저장소), Cassandra(칼럼 페밀리 저장소), Neo4j(그래프 데이터베이스)

     

     

    스키마(Schema): DB의 구조. 

    - 개념 스키마: DB의 전체적인 구조. 일반적으로 스키마라고 하면 개념스키마를 의미.

    - 내부 스키마: 물리적인 DB구조에 대한 스키마.

    - 외부 스키마: 실제 사용자들인 DBA(데이터베이스관리자)라거나 프로그래머라거나.. DB를 사용하는 사용자들에게 인터페이스가 되어주는 (밖에 나와있는) 스키마.

     

    클러스터링: 여러대의 컴퓨터가 하나의 시스템처럼 동작하는 것. 사용자는 마치 하나의 시스템에서 작업하는 것 같은 느낌을 받지만 실제로는 여러 컴퓨터가 하나의 시스템처럼 동작하는 것. 여러 컴퓨터를 통해 신뢰성을 확보하기 위한 기술.

     

    병렬컴퓨팅: 하나의 큰 문제를 여러 컴퓨터가 나누어 해결하는 방식. 크러스터링과 다르게 병렬컴퓨팅은 하나의 문제를 처리하지만 모든 컴퓨터가 같은 시스템을 사용하지는 않는다.

     

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

     

      HTTP(HyperText Transfer Protocol): 서버와 클라이언트가 웹상에서 정보를 주고받을 수 있게 해주는 프로토콜.

     

      HTTPS(HyperText Transfer Protocol Secure): 암호화를 하는 http프로토콜. (100% 보안성이 확보되지는 X)

     

    • 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 이런식으로 생긴애들을 의미.

    *패킷 또는 네트워크 패킷은 네트워크를 통해 전송되는 형식화된 데이터 덩어리를 말함.

     

    • Domain(도메인): 네트워크 상에서 호스트를 가르키는 이름. ex. www.naver.com, www.google.com 등

     

    DNS(Domain Name System): IP주소 => 도메인 이름으로 변환.

     

     

    RESTful

    : REST(Representational State Transfer) 아키텍처를 지향하는 웹 서비스. 자원의 상태를 대표적으로 표현할 수 있는 어떤 이름으로 전달하는 방식을 의미. 이름만 가지고 어떤 행동을 하려는지 바로 유추할 수 있도록 구현하는 것을 RESTful하게 구현했다고 말함. 

     

    *원칙: 무상태성, 캐시 가능성, 계층화된 시스템, 통일된 인터페이스.

    *API: Application Programming Interface. 어떤 서비스를 사용하기 위한 소프트웨어 인터페이스. 함수 또는 클래스 단위.

    *RESTful API: 자원의 상태를 대표적으로 표현할 수 있는 어떤 이름으로 전달하는 방식으로 구현한 API. 

      ex. GET, POST, PUT, DELETE 등

     

    OSI 7계층

    : 국제표준화기구(ISO)에서 정의한 개념으로, 네트워크 통신을 7계층으로 나누어 정의하는 개념. (네트워크가 메시지를 주고받는 과정을 규격화하고 세부적으로 정의한 것.)

     

    작동원리

    1. OSI 7계층은 응용, 표현, 세션, 전송, 네트워크, 데이터링크, 물리계층으로 나뉨.
    2. 전송 시 7계층에서 1계층으로 각각의 층마다 인식할 수 있어야 하는 헤더를 붙임;캡슐화
    3. 수신 시 1계층에서 7계층으로 헤더를 떼어냄;디캡슐화
    4. 출발지에서 데이터가 전송될 때 헤더가 추가되는데 2계층에서만 오류제어를 위해 꼬리부분에 추가됨.
    5. 물리계층에서 1, 0 의 신호가 되어 전송매체 (동축케이블, 광섬유 등)을 통해 전송.

    • 제 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 프로토콜 입장에서 나눈 개념. TCP/IP가 OSI 7 계층 중에서 어느 영역에서 어떻게 활동하는지 나눈 계층.

    *위 그림 참고.

    *https://www.iso.org/home.html

    *https://www.iso.org/standard/20269.html

     

     

    보안 기술 및 프로그램

    • Firewall(방화벽): 네트워크 트래픽을 필터링하여 불법 접근을 차단.

    • VPN(가상 사설망): 암호화된 가상의 네트워크망을 통해 원격으로 접속하기 위한 기술.

    • 키(key)를 통한 접근 제어 방식

    - 대칭키: 암호화/복호화에 같은 키 사용.

    - 비대칭키: 암호화/복호화에 다른 키 사용. 공개키&비밀키(개인키)

    • hash(해시): 본래 정보를 임의의 값으로 바꾸는 기술. 단방향 암호화 방법으로 해시를 적용한 주체 외에는 풀 수 없음.

     

     

     

    해킹 기술 및 프로그램

    DDoS(Distributed Denial of Service, 디도스, 분산 서비스 거부) 공격: 특정 서버나 네트워크가 처리할 수 없을 정도의 트래픽(서비스 요청)을 발생시켜서 과부하를 일으키는 사이버 공격.

    malware(멀웨어): 악성소프트웨어로 가짜백신, 랜섬웨어, 에드웨어, 트로이목마바이러스 등이 멀웨어의 한 종류.

    sniffing(스니핑): 네트워크 상에서 다른 사람의 정보를 훔쳐보는 것.

     

    spoofing(스푸핑): 누군가의 것을 훔치거나 모방하다 또는 속이다라는 의미. 특정한 상대를 공격하기 위한 방식으로서 네트워크에서 발생하며 종류에 따라서 IP 스푸핑, ARP 스푸핑, DNS 스푸핑이라 불린다.

    - IP 스푸핑: IP 주소 패킷의 스푸핑을 통하여 위변조 하는 네트워크 공격 기법. (특정 인물이 다른 사람의 IP를 모방하거나 속여서 특정 대상을 공격한다.) 주로 DDoS공격과 같은 네트워크 공격을 위해 흔히 사용되는 기법 중 하나.