• 클라이언트 와 서버
    • 클라이언트 : 네트워크를 통해 서버에 요청을 하고 서비스를 제공받는 주체
    • 서버 : 네트워크를 통해 클라이언트의 요청을 받고 서비스를 제공하는 주체
      • 서버 와 클라이언트 예시
        • zoom 서버 : zoom에서 회의를 진행시 채팅 및 여러가지 정보를 zoom에 게 보낸다
        • zoom : zoom서버에게 회의 방을 입장 요청 및 채팅, 화면공유 등을 요청
          • 채팅 입력시 서버에게 해당 채팅 내용 전송
          • 전송 받은 채팅을 서버 내의 데이터베이스에 해당 내용을 저장
          • 저장 된 내용을 해당 회의 방에 다시 전송하여 다른 사용자들에 노출
      • 서버 종류
        • 클라우드 서버
          • 실제로 조작하는 사용자가 원격으로 사용할 수 있는 서버
          • Google Cloud, AWS, Microsoft Azure
        • 웹 서버
          • 웹 서버는 웹 브라우저에서 요청한 웹 페이지를 제공하는 서버
          • Apache(아파치), NGINX(엔진엑스), GWS(구글 웹 서버)등
        • 데이터베이스 서버
          • 오로지 데이터베이스를 위한 서버
          • MySQL, PostgreSQL, Oracle DB 등
        • 어플리케이션 서버
          • 웹 서버랑 데이터베이스서버 사이에 있는 미들웨어같은 존재
          • 일반 사용자들에게 제공되는 서비스를 수행하는 서버
        • 프록시 서버
          • 클라이언트의 요청을 본 서버 외의 서버가 대신 처리해주는 서버
          • 보안이나 다량의 접속으로 인한 과부하를 막고 처리 속로를 향상
          • cloudflare 같이 실제 서버 앞에 위치하여 중재자 역활을 수행
      • 데이터베이스
        • 정보를 체계적으로 구조화하여 관리하는 시스템
        • 표(Table, 테이블)
        • 열(Column, 컬럼, 세로줄)
        • 행(row, 로우, 가로줄)
      • DBMS (데이터베이스 관리 시스템)
        • 데이터 베이스를 관리하기 위한 시스템
        • RDBMS 종류
          • MySQL
          • PostgreSQL
          • SQLite
          • Oracle Database
          • MariaDB
      • SQL(Structured Query Language)
        • SQL 이란 DBMS를 조작하기 위한 프로그래밍 언어
        • SQL 종류
          • DDL(정의어): 개체(테이블)을 생성하거나 속성을 정의
            • create : 테이베이스, 테이블 생성
            • alter : 테이블 수정
            • drop : 데이터베이스, 테이블 삭제
            • truncate : 테이블을 초기화
          • DML(조작어): 테이블에 데이터를 삽입, 조회, 수정, 삭제
            • select : 테이블의 데이터 조회
            • delete : 테이블의 데이터 삭제
            • update : 테이블의 데이터 수정
            • instert :  테이블의 데이터 추가
          • DCL(제어어): DB에 대한 접근 권한을 부여하거나 회수
            • grant : 특정 데이터베이스 사용자에게 특정 권한 부여
            • revoke : 특정 데이터베이싀 사용자에게 특정 권한 회수
          • TCL(트랜젝션 제어어): 트랜잭션을 조작
            • commit : 트랜잭션 처리가 정상적으로 종료되어 트랜잭션이 수행한 변경 내용을 데이터베이스에 반영
            • rollback : 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성이 깨졌을 때, 트랜잭션이 행한 모든 변경 작업을 취소하고 이전 상태로 복구
      • 반드시 알아야하는 개념
        • 클러스터링 : 여러 대의 컴퓨터가 하나의 시스템처럼 동작
        • 병렬컴퓨팅 : 하나의 큰 문제를 여러 컴퓨터가 나누어 해결하는 방식
        • Protocol(프로토콜) : 통신 규약
        • HTTP : 서버랑 클라이언트가 웹상에서 정보를 주고 받을 수 있도록 해주는 프로토콜
        • HTTPS : 암호화를 하는 http프로토콜
        • HTML : 웹 페이지를 어떻게 보여줄 것인가를 기술하는 마크업 언어
        • Browser : 웹 사이트를 보여주기 위한 응용프로그램
        • UDP (User Datagram Protocol, 유디피) : 비연결형 데이터그램 방식의 프로토콜로 신뢰성을 보장하지 않음, TCP 보다 빠름
        • TCP (Transmission Control Protocol, 티씨피) : 연결형 가상회선 방식의 프로토콜로 신뢰성을 보장, 보안성이 높은데 반해 UDP보다 복잡하고 느림
        • IP (Internet Protocol, 아이피) : 호스트(네트워크상에서 하나의 노드. 즉, 하나의 PC를 생각하시면 됩니다.)의 인터넷 주소를 지정하고 패킷의 분해 조립을 담당하는 프로토콜
          • 패킷 : 네트워크 상에 갭슐화 된 데이터 단위
        • Domain : 네트워크 상에서 호스트를 가르키는 이름
          • 사용자가 인식 가능한 웹 주소
        • DNS(Domain Name System, 디엔에스)
          • 컴퓨터가 읽기 편한 구조인 IP주소를 도메인 이름으로 바꿔주는 시스템을 의미
  • RESTful
    • REST(Representational State Transfer) 아키텍처를 지향하는 웹 서비스
    • 자원의 상태를 대표적으로 표현할 수 있는 어떤 이름으로 전달하는 방식을 의미
    • API(어플리케이션 프로그래밍 인터페이스)
      • 어떤 서비스를 사용하기 위한 소프트웨어 인터페이스를 의미
      • 함수 단위나 클래스 단위로 구현
    • RESTful API
      • 자원의 상태를 대표적으로 표현할 수 있는 어떤 이름으로 전달하는 방식으로 구현한 API
      • GET, POST, PUT, DELETE 같은 메소드
  • OSI 7계층
    • 국제표준화기구(ISO)에서 정의한 개념으로 네트워크 통신을 7계층으로 나누어 정의하는 개념
    • 제 1계층 - 물리계층
      • 전기적, 기계적, 절차적, 기능적인 수단을 사용하여 데이터 전송 매체에서 실제 비트 전송을 담당
      • 케이블, 스위치, 허브, 전압 레벨 ... 
    • 제 2계층 - 데이터 링크 계층
      • 물리 계층을 통해 전달된 데이터를 에러 없이 전달하기 위한 방법을 정의하고 MAC 주소를 사용하여 물리적인 네트워크 간의 데이터를 전송
      • 스위치, 브리지, 프레임, MAC 주소 등등
    • 제 3계층 - 네트워크 계층
      • IP 주소를 사용하여 데이터 패킷을 전달하는데 네트워크 상에서 최적의 경로를 설정하여 데이터를 전송
      • 라우터, IP 주소, 패킷 등등
      • 네트워크상에서 작은 단위의 블록화된 어떤 정보를 전달하는데 이것을 패킷
    • 제 4계층 - 전송 계층
      • 종단 간(end-to-end) 통신을 제공하며, 데이터 전송의 신뢰성을 보장
      • TCP, UDP, 포트번호 등등
    • 제 5계층 - 세션 계층
      • 양끝단에서 통신을 관리하는 계층으로 통신이 끝날때까지 응용 프로그램 간의 세션을 설정, 관리 및 종료
    • 제 6계층 - 표현 계층
      • 암호화, 복호화, 압축 등을 통해 데이터 형식을 응용 프로그램에 맞게 변환
    • 제 7계층 - 응용 계층
      • 실질적으로 사용자가 마주하고 상호작용하는 계층으로 최종서비스를 제공
      • HTTP, FTP, SMTP, DNS 등등
  • TCP/IP 4계층
    • 제 1계층 - 네트워크 엑세스 계층
      • OSI 1~2 계층에 해당
    • 제 2계층 - 인터넷 계층
      • OSI 3계층에 해당
    • 제 3계층 - 전송 계층
      • OSI 4계층에 해당
    • 제 4계층 - 응용 계층
      • OSI 5~7계층에 해당
  • 보안
    • 보안 기술 및 프로그램
      • Firewall(방화벽): 네트워크 트래픽을 필터링하여 불법 접근을 차단
      • VPN(가상 사설망): 암호화된 가상의 네트워크망을 통해 원격으로 접속하기 위한 기술
      • 키(key)를 통한 접근 제어 방식
        • 대칭키: 암호화 / 복호화에 같은 키가 사용됨.
        • 비대칭키: 암호화 / 복화화에 사용되는 키가 다름.
          • 공개키: 누구나 접근 가능한 키 ( DES, SEED, AES )
          • 비밀키(개인키): 사용자 외에 접근 불가능한 키 ( RSA, ECC )
        • hash(해시): 본래 정보를 임의의 값으로 바꿔버리는 기술, 단방향 암호화 방법으로 해시를 적용한 주체 외에는 풀 수가 없다. ( MD5, SHA256.. )
    • 해킹 기술 및 프로그램
      • DDoS(Distributed Denial of Service, 디도스, 분산 서비스 거부) 공격: 특정 서버나 네트워크가 처리할 수 없을 정도의 트래픽(서비스 요청)을 발생시켜서 과부하를 일으키는 사이버 공격
      • malware(멀웨어): 악성소프트웨어로 가짜백신, 랜섬웨어, 에드웨어, 트로이목바바이러스 이런 놈들 싹다 멀웨어의 한 종류입니다.
      • sniffing(스니핑): 네트워크 상에서 다른 사람의 정보를 훔쳐보는 것
      • snooping(스누핑) : 네트워크 상에서 전송 중인 데이터를 몰래 획득 하여 정보를 훔쳐보는 것
      • spoofing(스푸핑) : 네트워크 상에서 다른 사람의 정보를 가로채서 내가 그 사람인 척 하여 정보를 빼가는 것
      • 이외에도 여러가지 것 들이 있으나 보안을 전문적으로 하실게 아니라면 이정도 까지만 알아두면 좋음

 

  • 강의 듣고 난 후..
    • 이번 강의의 경우 대체 적으로 개발자가 되면 왠 만해서는 기본적으로 깔고 가야 되는 지식으로 생각이 된다
      • 기본적으로 간단한 채팅을 개발 한다고 하면 서버 + 클라이언트(최소 2) 구조를 띄게 된다
      • 서버가 없을 수 있으나 대체 적으로 서버를 두어 양반향 통신이 되게 하는게 기본 베이스로 잡는다면 서버 하나에 여러 클라이언트가 존재하게 된다
      • 이때 서버에는 사용자를 식별해 주는 데이터가 필요 할 것이고 채팅방이 있다면 채팅방에 대한 히스토리들이 저장 되어 있을 것이다
      • 또한 서버에서 클라이언트에서 요청 받은 글들을 채팅방 인원에게 전달 해줘야 하며 클라이언트 전달 받은 부분을 사용자에게 노출을 하게 된다
    • 이처럼 아주 간단한 프로그램 조차에도 서버와 클라이언트가 등장하는데 이 개념을 모르는 상태로 개발 하는 것은 있을 수 없을 것이다.
    • 그리고 서버는 하나 있을 수 있으나 대형 사이트의 경우 서버가 여러개로 분리 되어 있을 것이다. 그런데 왜 여러개로 분리하는 지도 모르는 상태로는 해당 사이트를 관리하기도 벅찰 것인데 여기에 개발을 할 수 있을까?
    • 이러한 관점에 서버와 클라이언트의 개념을 확실히 가지고 추가로 서버의 종류에 대해 암기해 놓는게 당연 할 것이다.
    • 이외에 OSI 7계층 과 TCP/IP의 개념을 알아 우리는 사용자의 정보를 어떤식으로 관리할지 계획 수립 및 개발을 할 수 있다
    • 여기서 보면 개발자의 경우 OSI 7계층의 3단계, TCP/IP 4계층에서는 2단계 부터 개발자는 보안에 관련하여 신경을 쓰면 개발을 해야 됨을 확인 할 수있다.
    • OSI 7계층의 1, 2 단계를 보면 라우터나 스위치 들이 해당 됨을 확인 할 수 있는데 이건 개발자가 신경 쓸게 아닌 보안 관리자 신경써야 하는 단계이므로 이부분은 건너띄고 개발을 진행해야 한다.
    • 이때에는 실직적으로 코드안에서 데이터를 주고 받은 부분들이 들어가는 부분이라 RESTful API를 잘 만들어서 노출 해도 되는 데이터와 노출 하면 안되는 데이터 및 검증 부분들이 들어가야 하는 부분으로 이해가 되었다
    • 그러하니 가능한 OSI 7계층의 3단계, TCP/IP의 2단계 이후는 따로 조사를 하여 기억 해 둘 필요가 있을거 같다

'CS' 카테고리의 다른 글

5. 소프트웨어 문서  (0) 2024.07.31
4. 빅데이터 및 인공지능  (1) 2024.07.30
2. 소프트웨어 설계  (0) 2024.07.28
1. 컴퓨터 구조와 운영체제  (0) 2024.07.26

+ Recent posts