오늘은 컴활 2급 필기 시험이 있어 1부 강의를 수강하지 못하였으나 2부 강의는 수강을 할 수 있었다.

2부에서 다룬 내용은 웹 서버의 역할에 대하여 깊게 다루었다.

그 중 웹 서버 소프트웨어중 이제 우리가 주로 사용할 Nginx 대하여 간략히 설명을 해주셨다.

 

일단 Nginx은 내가 웹 개발을 했을 때 가끔식 듣기는 했으나 주로 사용했던 것이 Apache였다. 그래서 Apache와 Nginx에 대하여 검색 해보니 아래와 같은 차이점이 존재하였다.

 

Apache

  • 웹 서버에서 정적 파일을 제공을 목적으로 만들어진 소프트웨어
  • 프로세스 기반 접근 방식 으로 하나의 스레드가 하나의 요청을 처리하는 구조
  • 매 요청마다 스레드를 생성 및 할당해야 하기 때문에 리소스를 많이 잡아먹음

Nginx

  • 대용량 트래픽을 처리하기 위해 가벼움과 높은 성능을 목표로 하는 제작된 소프트웨어
  • 이벤트 중심 접근 방식 으로 하나의 스레드 내에서 여러 요청을 처리하는 구조
  • 비동기 Event-Driven 구조 : Event Handler에서 비동기 방식으로 먼저 처리되는 요청을 진행
  • 코어 모듈이 Apache보다 적은 리소스로도 많은 트래픽을 효율적으로 처리 가능

 

대략적으로 왜 Nginx를 사용하는지 알게 되었으니 이제 다시 강의 내용으로 돌아와서 튜터님께서 Nginx에 대해 설명을 해주셨을 때 Nginx에대해 자세한 기능적인 설명을 하기 보다는 우리가 서버에게 요청을 보냈을 때 어떻게 서버가 요청을 인식하는 지에 대한 설명을 해 주셨다.

 

우리가 일반적으로 웹 브라우져에서 웹 페이지(예를 들어 www.naver.com)를 를 요철을 했을 때 DNS 부분을 제외하고 서버로 넘어가는 부분만 이야기를 하자면 IP로 변경된 주소로 서버의 위치를 찾아 그곳에 가면 Apache 또는 Nginx 같은 소프트웨어가 해당 주소를 확인하여 설정 된 부분으로 넘겨주는 역할을 진행을 한다

 

이때 프로토콜이 http인지 https인지를 확인하여 해당 포트번호(http: 80, http: 443)로 넘겨준다.

 

이때 넘겨 받는 부분은 Django 같은 프레임워크로 넘겨 주고 넘겨 받은 요청을 이제 우리 같은 개발자 작성해 놓은 부분에서 찾아 응답을 해주게 되는 것이다

 

이부분이 전반적인 클라이언트/서버 통신의 대략적인 내용이 된다

 

이렇게 어제와 오늘의 특강에서 가장 중요하게 다룬 내용일 클라이언트/서버 통신에 대한 내용이였던거 같다. 아무래도 AI 웹 개발이다보니 AI는 일단 제쳐두더라도 웹 개발을 어떤식으로 진행하고 우리가 개발 웹이 어떤식으로 사용자가 다루는지 확실 아는게 중요하다 보니 계속 반복해서 강조하는 것 같다.

 

다시 돌아와 오늘 진행했던 내용 중 확실히 개념을 잡아야 될 부분(2개)과 알아 두면 좋은 것(1개)에 대하여 글로 남겨 둘려고 한다.

 

확실히 개념을 잡아할 부분으로는

  1. 세션과 쿠키
  2. RESTful API 지원하는 URI

알아 두면 좋은 좋은 것으로는

  1. Django의 웹정보 보안은 어떻게 하는가?

이 있다

 

그럼 먼저 개념 부터 알아보도록 하자

  1. 세션과 쿠키
    • 세션(session)
      • 반영구적이고 상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 보안적인 다이얼로그(dialogue) 및 시간대를 가리킨다. 따라서 세션은 연결상태를 유지하는 것보다 연결상태의 안정성을 더 중요시 하게 된다.(출처: 위키백과)
    • 쿠키(cookie)
      • 웹 서버에 의해 사용자의 컴퓨터에 저장되는, '이름을 가진 작은 크기의 데이터'(출처: 위키백과)
      • 사용자가 어떠한 웹사이트를 방문할 경우 사용자의 웹 브라우저를 통해 인터넷 사용자의 컴퓨터나 다른 기기에 설치되는 작은 기록 정보 파일, 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀐다 (출처: 위키백과)
    • 뭔가 장황하나 결국은 쿠키의 경우에는 사용자(클라이언트)에게 기록을 하게 하는 것이며 세션은 서버쪽에서 클라이언트와 연결이 되면 생성되어 관리하게 되는 것이다.
    • 즉 주체가 서로 다른 것이다.
  2. RESTful API 지원하는 URI(참조: https://www.elancer.co.kr/blog/view?seq=74)
    • URI( Uniform Resource Identifier, 통합 자원 식별자 )
      • Uniform은 리소스를 식별하는 통일된 방식
      • Resource란, URI로 식별이 가능한 모든 종류의 자원(웹 브라우저 파일 및 그 이외의 리소스 포함)을 지칭
      • Identifier는 다른 항목과 구분하기 위해 필요한 정보
      • URI는 인터넷상의 리소스 자원 자체 를 식별하는 고유한 문자열 시퀀스
    • URL( Uniform Resource Locator, 파일식별자, 유일자원지시기 )
      • 네트워크상에서 통합 자원(리소스)의 위치 를 나타내기 위한 규약
      • 웹 사이트 주소 + 컴퓨터 네트워크 상의 자원
      • 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크 상의 자원을 모두 나타내는 표기법
      • 특정 웹 페이지의 주소에 접속하기 위해서는 웹 사이트의 주소뿐만 아니라 프로토콜(https, http, sftp, smp 등)을 함께 알아야 접속이 가능
    • 네이버를 이용하여 간단하게 URI와 URL의 표현을 확인 해 보자
    • 위의 방식을 보면 URL은 결국 프로토콜 + 식별자 만 가능한 방면 URI는 식별자가 들어간 모든 경우를 포함 되는 것을 확일 할 수 있다
    • 즉 URL은 URI 보다는 작은 개념인것이다
    • 이때 같이 알아 두기 좋은 내용은 URN이 있는데 이것은 식별자(도메인) 이후에 있는 부분을 말하는 것으로 알아두면 좋다
    • 이제 URI는 확실히 알게 되었는데 그렇다면 RESTful API란 무엇인지를 알아 볼 필요가 있다
    • 우리는 CS를 공부하다보면 API, API 문서등의 단어를 만날 수 있다
    • API란?
      • 소프트웨어 간의 상호작용을 가능하게 하는 인터페이스
      • 웹 API는 HTTP를 통해 클라이언트와 서버 간의 데이터 교환 가능
      • 예시: Twitter API, Google Maps API, OpenWeather API
    • API 문서란?
      • API는 어떠한 기능들의 집합이 되기에 이를 활요하기 위해서는 해당 부분에 대한 이해가 필요하다. 짧은 API는 보고 이해를 하면 되지만 만약 아주 큰 API를 쓰게 될경우 우리는 그것을 보고 이해하기까지 오랜 시간이 걸릴 것이다. 이때 그 시간을 단축하기 위하여 API를 제공하는 쪽에서 각각의 기능에 대한 설명을 담은 문서가 API 문서가 되는 것 이다.
      • 아래의 사진은 APP에서 사용자의 전화번호를 서버에게 전달하는 기능에 대한 API 문서이다.
      • 간략하게 설명하자면 APP에서 DataOutputStream.writeUTF 함수를 통하여 전화번호를 담은 문자열을 요청하면 서버에서 DataInputStream.readUTF 함수를 통하여 해당 전화번호를 받는것이다
      •  
      • APP과 서버와 통신하는 API 문서인데 이것을 웹 개발쪽으로 적용한다면 우리는 어떠한 명칭이 URI 주소가 될것이 될것이고 인자는 Form 데이터의 양식이 될것이다. 또한 반환값에는 어떠한 주소가 될수도 있고 검색한 데이터들이 넘겨줄 수 있는 것이다
    • 자 이제 API 문서까지는 이해가 끝났다. 그렇다면 RESTful은 무엇인가?
      • 웹 서비스 디자인 아키텍처로, 클라이언트와 서버 간의 상호작용을 정의
      • RESTful API는 자원을 URI로 표현하며, HTTP 메서드(GET, POST, PUT, DELETE)를 사용하여 자원에 대한 작업을 수행
      • 원칙: 무상태성, 캐시 가능성, 계층화된 시스템, 통일된 인터페이스
    • 교재에서는 위와 같이 설명을 하고 있다. 즉 API 문서는 통일된 인터페이스를 가지게 되고 이때 인터페이스 명에 URI가 들어가고 인자위치에 From 데이터 들어가는 대 추가로 메서드 항목이 생성되어 HTTP 메서드를 표시해 주어야 한다. 기능의 경우는 삭제 또는 유지가 될 수 있고 반환값 위치에는 주소 혹은 요청한 데이터의 검색 결과 데이터가 주어질 수도 있다.
    • 이렇게 REST 기반의 다양한 HTTP 메서드들을 활용하여 제작된 API를 RESTful API라고 하며 만약에 HTTP 메서들이 각자의 역활맞게 주어지지 않았다면 그것은 RESTful API가 아닌 REST API라고 한다
  3. Django의 웹정보 보안은 어떻게 하는가?
    • 주요 웹 보안 위협 요소
      • XSS(교차 사이트 스크립팅)
        • 악의적인 스크립트를 삽입하여 사용자 정보를 탈취하거나 웹 페이지를 변조
      • CSRF(교차 사이트 요청 위조)
        • 사용자가 의도하지 않은 요청을 보내게 하여 피해를 입힘
      • SQL Injection(SQL 인젝션)
        • SQL 쿼리에 악의적인 코드를 삽입하여 데이터베이스를 조작하거나 데이터를 탈취
      • Click Jacking(클릭 재킹)
        • 사용자가 의도하지 않은 클릭을 하도록 유도하여 악성 사이트로 이동시키거나 악성 행위를 수행하게 함
    • Django
      • XSS(교차 사이트 스크립팅)
        • from django.utils.html import escape
        • escape :  <, >, &, \, "  같은 문자열을 안전한 문자열로 바꿔주는기능
      • CSRF(교차 사이트 요청 위조)
        • from django.views.decorators.csrf import csrf_exempt, csrf_protect
        • <form action="" method="POST">
          	{% csrf_token %}
            <table>
              {{form.as_p}}
            </table> 
            <input type="submit">
          </form>
        • from 안에 Django에서 제공하는 임의 토큰 값을 통하여 CSRF 방어
      • SQL Injection(SQL 인젝션)
        • 따론 원시적(select * from users where id=id) 형태로 하는게 아닌 raw() 혹은 execute()를 이용하여 직접적으로 전달하지 않고 raw('select * from user where id=%s',[id]), execute('select * from user where id=%s',[self.id]) 처럼 검색할 조건 값을 전달
      • Click Jacking(클릭 재킹)
        • 기본적으로  config/settings.py 의middleware쪽에서 해당 부분을 설정하여 방지
        • 코드로 해당 부분을 방지하는 부분 또한 제공하고 있다
        • from django.http import HttpResponse
          from django.views.decorators.clickjacking import xframe_options_deny, xframe_options_sameorigin
          
          
          @xframe_options_deny
          def view_one(request):
              return HttpResponse("I won't display in any frame!")
          
          @xframe_options_sameorigin
          def view_two(request):
              return HttpResponse("Display in a frame if it's from the same origin as me.")

'CS > 더 깊게 깊게' 카테고리의 다른 글

HTTP/HTTPS  (0) 2024.08.06
OSI 7계층 및 알아 두면 좋은 프로토콜  (0) 2024.07.30
객체지향 프로그래밍  (0) 2024.07.29
개발 방법론 정리  (0) 2024.07.29
  • HTTP
    • 개요
      • Hypertext Transfer Protocol 의 약자
      • 통신을 주고받게 하는 가장 기본적인 프로토콜
      • 서버에서 브라우저로 데이터를 전송하는 용도로 가장 많이 사용
      • 전송 되는 기간 동안 데이터의 도난의 위험이 존재
    • 특징
      • 단방향성 : 클라이언트가 요청을 보내야만 응답( HTTP 2버전 이전)
      • 비연결성 : 서버와 연결된 후, 요청에 대한 응답의 데이터를 전송하면 연결을 종료
      • 실시간 통신이 안된다
    • 발전
      • 버전
        • v1.0 -> v1.1 -> v2.0 -> v3.0
        • 현재를 기준으로 v1.1을 가장 많이 사용하고 있는 중
      • v1.0
        • 연결에 성공을 하였어도 1회성으로 만사용이 가능 하다는 문제점이 발생
      • v1.1
        • v1.1의 1회성 문제를 해결 하기위하여 연결의 재사용
        • 연결을 생성하면 지정한 시간(timeout)동안은 재사용하는 방식
      • v2.0
        • Head Of Line Blocking 문제 해결
          • Head Of Line Blocking 문제란 요청이 병렬로 오면 병렬로 온 요청을 모두 확인하여 동시에 응답해야 하는 문제를 말한다. 
          • 간단하게 내가 1+1, 1+2, 1+3을 서버에게 물어봤을때 서버는 2, 3, 4를 모두 계산을 하고 난 뒤에 응답을 해주는 문제가 발생
          • v2.0에서는 요청을 프레임으로 쪼개서 순서 상관없이 처리하도록 하여 해결
        • Server Push
          • 연결 생성 후에 클라이언트 요청없이도 서버가 응답
          • 단순하게 생각하면 카카오톡의 알림이나 배달의 민족 알림 같은 우리가 따로 서버에게 요청없이 서버가 새로운 소식을 우리에게 알려주는 기능
        • HTTP/2 점유율은 40%
      • v3.0
        • 앞의 버전과는 다르게 TCP가 아 UDP기반
        • 아직까지는 사용하는 곳이 많지 않고 구글웹페이지가 v3.0을 사용하고 있는 중이다
    • 실시간 통신의 경우에는 웹소켓(WebSoket)을 주로 사용하나 웹소켓을 지원되지 않는 환경에서는 HTTP를 통하여 폴링(polling), 롱폴링(long-polling), 스트리밍(streaming) 등의 실시간 통신처럼 보일 수 있게끔하는 방식을 사용
    • HTTP 메소스
      • GET : 보통 리소스를 조회할 때 사용하며, 서버에 전달하고 싶은 데이터는 query를 통해서 전달한다. 메시지 바디를 사용해서 데이터를 전달할 수는 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.
      • POST : 주로 리소스를 새롭게 생성할 때 사용하며, 서버에 전달하고 싶은 데이터는 메시지 바디를 통해 전달한다.
      • PUT : 리소스가 있으면 대체하고 리소스가 없으면 생성한다. 즉, 데이터를 덮어쓴다.
      • PATCH : PUT과 마찬가지로 리소스를 수정할 때 사용하지만, PATCH는 리소스를 일부분만 변경할 때 사용한다.
      • DELETE : 리소스를 제거할때 사용한다.
    • HTTP 상태코드
      • 100번대 (Informational) : 요청이 수신되어 처리중
      • 200번대 (Successful) : 처리 성공
      • 300번대 (Redirection) : 다른 곳으로 유도(요청을 완료하면 추가 행동이 필요,민원처리 생각하면 될 거 같다 )
      • 400번대 (Client Error) : 클라이언트측 문제(잘못된 요청)
      • 500번대 (Server Error) : 서버측 문제(서버 에러 혹은 서버 다운등)
  • HTTPS
    • 개요
      • Hypertext Transfer Protocol Secure 의 약자
      • HTTP의 정보 도난의 위험을 해결 하기 위해 SSL(Secure Sockets Layer, 보안 소켓 계층)을 사용
        • 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버와 브라우저가 보안정보를 주고받을때 해당 정보가 도난당하는 것 방지
        • 대칭키와 비대칭키 기반으로 사용
      • TLS: 전송 계층 보안(Transport Layer Security)
        • TLS은 SSL의 향상된, 더욱 안전한 버전
        • SSL이 더욱 일반적인 용어이기 때문에 DigiCert는 보안 인증서를 여전히 SSL로 언급하지만 DigiCert에서 SSL을 구입하면 가장 신뢰할 수 있는 최신 TLS 인증서를 얻을 수 있다
      • 웹사이트가 SSL/TLS 인증서로 보호되는 경우 HTTPS가 URL에 표시
      • 사용자는 브라우저 표시줄의 자물쇠 기호를 클릭해 발급 기관 및 웹사이트 소유자의 상호를 포함한 인증서의 세부 정보를 확인 가능
    • SSL Handshake
      • TCP/IP 연결할때 3-way Handshake 로 연결을 확인하는것처럼 HTTPS 연결할때는 SSL Handshake 를 통해 추가적인 인증을 확인
      • 칭키/비대칭키 방식을 모두 사용하여 요청/응답 정보를 모두 암호화 하며, 외부 인증기관(외부 서버)가 사이트가 유효한지(신뢰할만 한지) 보증인 역할
      • 순서
        1. 서비스를 서빙하는 서버가 CA 로부터 CA 인증서를 발급(인증서 기간 만료까지 1회성)
        2. 서비스를 서빙하는 서버는 CA에 자신의 도메인 정보와 서버 측 공개 키 전송
        3. 인증기관은 받은 두 데이터를 자신의 개인키로 암호화한 CA 인증서를 서버로 전송
        4. 브라우저에서 도메인을 쳐서 요청을 보내 클라이언트(브라우저)와 서버가 TCP 연결
        5. 서버는 브라우저가 보내준 Cipher Suite 중 하나를 고르고, 자신의 SSL/TLS 프로토콜 버전을 브라우저에게 알리면서, 서버 자신의 도메인에 대한 CA 인증서 전송
        6. 브라우저는 브라우저에 내장된 CA의 공개 키를 이용하여 CA 인증서를 복호화하여 인증서가 유효한지 검증한 후, 서버 측의 공개 키 획득
        7. 브라우저는 앞으로 서버와 통신하는데 있어 암호화를 위해 사용할 대칭 키를 만들고, 그 대칭 키를 사이트 공개 키로 암호화하여 서버 전송
        8. 서버는 자신의 개인 키를 사용하여 암호화된 것을 복호화하여 사용자 대칭 키 획득
        9. 획득한 대칭 키를 활용하여 서버와 클라이언트가 서로 데이터를 안전하게 암/복호화 하면서 통신
  • OSI 모형( Open Systems Interconnection Reference Model )
    • 국제표준화기구(ISO)에서 개발한 모델
    • 컴퓨터 네트워크 프로토콜 디자인과 통신계층으로 나누어 설명
    • 일반적으로 OSI 7 계층이라 표현
    • 프로토콜을 기능별로 나눈 것
    • 각 계층은 하위 계층의 기능만을 이용하고, 상위 계층에게 기능을 제공
    • 계층 기능
      • 계층 1: 물리 계층
        • 네트워크의 기본 네트워크 하드웨어 전송 기술
        • 논리 데이터 구조를 기초로 하는 필수 계층
        • OSI 아키텍처에서 가장 복잡한 계층
        • RS-232, V.35, V.34, Q.911, T1, E1, 10BASE-T, 100BASE-TX, ISDN, SONET, DSL
      • 계층 2: 데이터 링크 계층
        • 포인트 투 포인트(Point to Point) 간 신뢰성있는 전송을 보장하기 위한 계층
        • CRC 기반의 오류 제어와 흐름 제어가 필요
        • 물리 계층에서 발생할 수 있는 오류를 찾아 내고, 수정하는 데 필요한 기능적, 절차적 수단을 제공
        • 주소 값은 물리적으로 할당
        • 네트워크 카드가 만들어질 때부터 맥 주소(MAC address)가 정해져 있다는 뜻
        • 주소 체계는 계층이 없는 단일 구조
        • 이더넷, 토큰링, FDDI, PPP, HDLC, Q.921, 프레임 릴레이, ATM, Fibre Channel
      • 계층 3: 네트워크 계층
        • 여러개의 노드를 거칠때마다 경로를 찾아주는 역할을 하는 계층
        • 다양한 길이의 데이터를 네트워크들을 통해 전달
        • 전송 계층이 요구하는 서비스 품질(QoS)을 제공하기 위한 기능적, 절차적 수단을 제공
        • 라우팅, 흐름 제어, 세그멘테이션(segmentation/desegmentation), 오류 제어, 인터네트워킹(Internetworking) 등을 수행
        • 논리적인 주소 구조(IP), 곧 네트워크 관리자가 직접 주소를 할당
        • NetBEUI, Q.931, IP, ICMP, IPsec, ARP, RIP, BGP
      • 계층 4: 전송 계층
        • 종단간(end-to-end) 통신을 다루는 최하위 계층으로 종단간 신뢰성 있고 효율적인 데이터를 전송
        • 오류검출 및 복구와 흐름제어, 중복검사 등을 수행
        • 시퀀스 넘버 기반의 오류 제어 방식을 사용
        • 특정 연결의 유효성을 제어
        • 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송
        • NetBEUI, TCP, UDP, RTP, SCTP
      • 계층 5: 세션 계층
        • 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공
        • 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)의 통신
        • 체크 포인팅과 유휴, 종료, 다시 시작 과정 등을 수행
        • TCP/IP 세션을 만들고 없애는 책임
        • 통신하는 사용자들을 동기화
        • 오류복구 명령들을 일괄적으로 다룬다
        • FIFO(파이프), 넷바이오스, SAP, SDP, SSL, TLS, TCP 의 세션 관리 부분
      • 계층 6: 표현 계층
        • 코드 간의 번역을 담당
        • MIME 인코딩이나 암호화 등의 동작이 이 계층에서 이루어진다
        • TDI, ASCII, EBCDIC, MIDI, MPEG, XDR
      • 계층 7: 응용 계층
        • 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행
        • 응용 서비스는 관련된 응용 프로세스들 사이의 전환을 제공
        • HL7, Modbus, SIP, HTTP, SMTP, SNMP, FTP, 텔넷, NFS, NTP

 

 

 

  • 프로토콜
    • 3 계층
      • IP(IP, Internet Protocol)
        • 송신 호스트와 수신 호스트가 패킷 교환 네트워크(패킷 스위칭 네트워크, Packet Switching Network)에서 정보를 주고받는 데 사용하는 정보 위주의 규약
        • 호스트 인터페이스 주소 지정, 데이터를 데이터그램(단편화 및 재조합 포함)으로 캡슐화, 하나 이상의 IP 네트워크를 통해 소스 호스트 인터페이스에서 대상 호스트 인터페이스로 데이터그램 라우팅을 담당
        • 각 데이터그램에는 헤더 (컴퓨팅)와 페이로드 (컴퓨팅)라는 두 가지 구성 요소
        • IP 헤더에는 소스 IP 주소, 대상 IP 주소 및 데이터그램을 라우팅하고 전달하는 데 필요한 기타 메타데이터가 포함
        • 페이로드는 전송되는 데이터
        • 헤더가 있는 패킷에 데이터 페이로드를 중첩하는 이 방법을 캡슐화
        • IPv4
        • IPv6
      • ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)
        •  네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메시지(Requested service is not available 등)를 전송받는 데 주로 쓰이며 인터넷 프로토콜의 주요 구성원 중 하나
        • 프로토콜 번호 1로 할당되고 시스템 사이에 데이터를 교환하지 않거나 최종 사용자에 적용되지 않는다
        • IP 동작(RFC 1122에 규정)에서 진단이나 제어로 사용되거나 오류에 대한 응답으로 만들어진다
      • IPsec(Internet Protocol Security)
        • 통신 세션의 각 IP패킷을 암호화하고 인증하는 안전한 인터넷 프로토콜(IP) 통신을 위한 인터넷 프로토콜 스위트
        • 보안은 통신 세션의 개별 IP 패킷을 인증하고 암호화함으로써 처리
      • 주소 결정 프로토콜(Address Resolution Protocol, ARP)
        • 네트워크 상에서 IP 주소를 물리적 네트워크 주소로 대응(bind)시키기 위해 사용되는 프로토콜
        • 물리적 네트워크 주소는 이더넷 또는 토큰링의 48 비트 네트워크 카드 주소
      • 라우팅 정보 프로토콜(Routing Information Protocol, RIP)
        • UDP/IP 상에서 동작하는 라우팅 프로토콜
        • 경유할 가능성이 있는 라우터를 홉수로 수치화
        • DVA(Distance Vector Algorithm)라는 알고리즘으로 인접 호스트와의 경로를 동적으로 교환
        • 패킷이 목적 네트워크 주소에 도착할 때까지의 최단 경로를 결정
        • 유효 경로를 2개까지 채택하며 고정 수치를 주어 동일 홉수의 경로가 있는 경우에 우선하는 경로를 제어하는 것이 가능
    • 4 계층
      • 전송 제어 프로토콜(Transmission Control Protocol, TCP)
        • IP 의 핵심 프로토콜 중 하나
        • IP와 함께 TCP/IP라는 명칭
        • 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러없이 교환
        • 웹 브라우저들이 월드 와이드 웹에서 서버에 연결할 때 사용되며, 이메일 전송이나 파일 전송에도 사용
        • 안정성을 필요로 하지 않는 애플리케이션의 경우 일반적으로 TCP 대신 비접속형 사용자 데이터그램 프로토콜(User Datagram Protocol)을 사용
      • 사용자 데이터그램 프로토콜(User Datagram Protocol, UDP)
        • 전송 방식은 너무 단순해서 서비스의 신뢰성이 낮고, 데이터그램 도착 순서가 바뀌거나, 중복되거나, 심지어는 통보 없이 누락시키기도 한다
        • 일반적으로 오류의 검사와 수정이 필요 없는 애플리케이션에서 수행할 것으로 가정
        • 도메인 이름 서비스 (DNS), IPTV, 음성 인터넷 프로토콜 (VoIP), TFTP, IP 터널, 그리고 많은 온라인 게임 등에서 사용
      • 실시간 전송 프로토콜(Real-time Transport Protocol, RTP)
        • IP 네트워크 상에서 오디오와 비디오를 전달하기 위한 통신 프로토콜
        • 전화, WebRTC, 텔레비전 서비스, 웹 기반 푸시 투 토크 기능을 포함한 화상 통화 분야 등의 스트리밍 미디어를 수반하는 통신, 엔터테인먼트 시스템에 사용
        • RTP는 일반적으로 사용자 데이터그램 프로토콜(UDP)로 동작
      • 스트림 제어 전송 프로토콜(Stream Control Transmission Protocol, SCTP)
        • 전송 제어 프로토콜(TCP), 사용자 데이터그램 프로토콜(UDP)와 비슷한 역할을 수행
        • TCP와 UDP의 동일한 서비스 기능들 가운데 일부를 제공
        • TCP처럼 연결지향적 프로토콜이며 혼잡 제어를 통해 신뢰성 있는 순차적 메시지 전송을 보장

    • 7 계층
      • 세션 개시 프로토콜(Session Initiation Protocol, SIP)
        • 음성과 화상 통화 같은 멀티미디어 세션을 제어하기 위해 널리 사용
        • 통신하고자 하는 지능형 단말(전화, 인터넷 콘퍼런스, 인스턴트 메신저 등)들이 서로를 식별하여 그 위치를 찾고, 그들 상호 간에 멀티미디어 통신 세션을 생성하거나 삭제 또는 수정하기 위한 절차를 명시한 응용 계층의 시그널링 프로토콜
        • 수정은 포트의 주소 변경, 더 많은 참여자의 초대, 멀티미디어 스트림의 추가 또는 삭제를 의미
        • 화상 회의, 스트리밍 동영상 유통, 메신저, 가입자 상태 정보, 파일 전송과 온라인 게임에 응용 가능
        •  TCP와 UDP에 모두 사용
      • HTTP(HyperText Transfer Protocol)
        • 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜
        • 주로 HTML 문서를 주고받는 데 사용
        • HTTP를 통해 전달되는 자료는 http:로 시작하는 URL(인터넷 주소)로 조회
      • 간이 전자 우편 전송 프로토콜(Simple Mail Transfer Protocol, SMTP)
        • 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜
        • 텍스트 기반의 프로토콜로서 요구/응답 메시지뿐 아니라 모든 문자가 7bit ASCII로 되어있어야 한다고 규정
        • 문자 표현에 8비트 이상의 코드를 사용하는 언어나 첨부파일과 자주 사용되는 각종 바이너리는 마임(MIME)이라고 불리는 방식으로 7비트로 변환되어 전달
      • 간이 망 관리 프로토콜(Simple Network Management Protocol, SNMP)
        • IP 네트워크상의 장치로부터 정보를 수집 및 관리 및 정보를 수정하여 장치의 동작을 변경하는 데에 사용되는 인터넷 표준 프로토콜
        • 네트워크 모니터링의 목적으로 네트워크 관리에서 널리 사용
        • 관리 정보 베이스(Management Information Base) 상에 관리 중인 시스템의 상태와 설정을 변수의 형태로 관리
      • 파일 전송 프로토콜(File Transfer Protocol, FTP)
        • TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송을 하기 위한 프로토콜
        • 파일 전송 프로토콜은 TCP/IP 프로토콜 테이블의 응용 계층에 속하며, 역사는 오래 되었지만 지금도 인터넷에서 자주 사용
      • 텔넷(TELNET)
        • 인터넷이나 로컬 영역 네트워크 연결에 쓰이는 네트워크 프로토콜
        • telnet이라는 용어는 프로토콜의 클라이언트 일부 기능이 추가된 소프트웨어를 일컫는다
        • 텔넷의 보안 문제 때문에 사용률이 감소하여 원격 제어를 위해 SSH로 대체

 

 

참조 사이트: https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95

 

OSI 모형 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. OSI 모형의 통신 (3-5계층의 예) OSI 모형(Open Systems Interconnection Reference Model)은 국제표준화기구(ISO)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신

ko.wikipedia.org

 

'CS > 더 깊게 깊게' 카테고리의 다른 글

내일배움캠프 특강) 웹 심화를 듣고  (1) 2024.08.13
HTTP/HTTPS  (0) 2024.08.06
객체지향 프로그래밍  (0) 2024.07.29
개발 방법론 정리  (0) 2024.07.29
  • 객체지향  프로그래밍(OOP, object-oriented programming )
    • 명령형 프로그램에 속한 프로그램 설계 방법론의 일종
    • 단순히 데이터와 처리 방법으로 나누는 것이 아닌 수많은 객체(object)라는 기본 단위로 나누고 이들의 상호 작용으로 개발하는 방식
    • 개체는 메소드와 변수를 가지며 특정 역할을 수행 할 수 있도록 개발자가 정의한 추상적인 개념
  • 프로그램 방식
    • 절차적 프로그래밍 ->객체지향 프로그래밍
    • 초기의 절차적 프로그래밍 방식의 경우 입력을 받아 명시된 순서대로 처리한 다음 그 결과를 나태는 방식으로 간단한 알고리즘이라면 모를까 조금만 복작해지면 순서도를 나타내는게 표현 하기 힘든 방식
    • 다른 사람이 보고 이해하는게 거의 불가능 할 뿐만 아니라 본인조차 유지보수에 어려움
    • 이를 해결 하기 위하여 코드의 중복을 줄이고 입력 코드, 계산 코드, 결과 출력 코드 등의 역할 분담을 통하여 가독성 상승
  •  요소
    • 추상화
      • 불필요한 부분을 제거함으로써 필요한 핵심만 나타내는 것
      • 복잡성을 낮추기 위해서 사용
    • 캡슐화
      • 변수와 함수를 하나의 단위로 묶는 것
      • 데이터의 번들링
      • 대개 프로그래밍 언어에서 번들링이 클래스를 통해 구현 되며 해당 클래스의 인스턴스 생성을 통해 클래스 안에 포함된 멤버 변수와 메소드를 쉽게 접근
      • 캡슐화를 통하여 정보의 은닉이 가능 하지만 꼭 캡슐화를 한다고 정보은닉이 되는건 아니다
    • 상속
      • 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려 받는것
    • 다향성
      • 상속 때 받은 기능의 일부분을 변경해야 할 경우
        • 자식 클래스에서 동일한 함수에 매개변수만 변경하여 다시 정의 해서 사용(오버로딩)
        • 자식 클래스에서 해당 기능만을 수정해서 다시 정의해서 사용(오버라이딩)
  • 객체지향 5원칙(SOLID)
    • SRP( Single Responsibility Principle ), 단일 책임 원칙
      • 객체는 오직 하나의 책임을 가져야 한다
      • 클래스의 목적을 명확히 함으로써 구조가 난잡해지거나 수정 사항이 불필요하게 넓게 퍼지는 것을 예방하고 기능을 명확히 분리
    • OCP( Open-Closed Principle ), 개방-폐쇄 원칙
      • 객체는 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야 한다는 원칙
      • 객체 기능의 확장을 허용하고 스스로의 변경은 피해야 한다
    • LSP( Liskov Substitution Principle ), 리스코프 치환 원칙
      • 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다는 원칙
    • ISP( Interface Segregation Principle ), 인터페이스 분리 원칙
      • 클라이언트에서 사용하지 않는 메서드는 사용해선 안 된다
      • 인터페이스의 SRP
    • DIP( Dependency Inversion Principle ), 의존성 역전 원칙
      • 추상성이 높고 안정적인 고수준의 클래스는 구체적이고 불안정한 저수준의 클래스에 의존해서는 안 된다

 

 

참조 사이트 : https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%9B%90%EC%B9%99

 

객체 지향 프로그래밍/원칙

객체지향 5원칙(SOLID). 객체지향에서 꼭 지켜야 할 5개의 원칙을 통틀어 객체지향 5원칙이라 칭한다. 일단 한

namu.wiki

 

 

객체 지향 프로그래밍

object-oriented programming(OOP) 프로그램 설계 방법론의 일종으로, 명령형 프로그래밍

namu.wiki

 

'CS > 더 깊게 깊게' 카테고리의 다른 글

내일배움캠프 특강) 웹 심화를 듣고  (1) 2024.08.13
HTTP/HTTPS  (0) 2024.08.06
OSI 7계층 및 알아 두면 좋은 프로토콜  (0) 2024.07.30
개발 방법론 정리  (0) 2024.07.29
  1. 활동과 단계
    • 요구사항 분석 : 새로운 제품이나 변경된 제품에 부합하는 요구와 조건을 결정 하는 단계
    • 기능 명세 : 분석한 요구사항을 기능 별로 구분하여 문서화 단계
    • 구조 & 설계 : 기능 명세에서 만들어진 무서를 토대로 제품의 구조 혹은 설계 방향 결정 하는 단계
    • 구현 & 테스팅 : 구조 & 설계를 바탕으로 직접 제품을 제작 후 테스트하는 단계
    • 배치(배포) & 유지보수 : 테스트까지 완료된 제품을 배치(배포) 후 유지보수 하는 단계
  2. 개발모형
    • 애자일 소프트웨어 개발 & 애자일 개발 프로세스
      • 프로젝트의 생명주기동안 반복적으로 개발 촉진
      • 문서를 통한 방법 이 아닌 실질적인 코딩을 통한 방법론
      • 앞으로 예측하며 개발을 하지 않고, 일정한 주기를 가지고 끊임없이 프로토 타입을 만들어 내어 그때 그때 필요한 요구사항을 더하고 수정하여 하나의 커라다란 소프트웨어를 개발 해 나가는 것
    • 동적 시스템 개발 방법 (DSDM : Dynamic systems development method)
      • 점진적 제공, 유연성, 협업 및 효율성의 원칙에 기반을 둔 민첩한 프로젝트 관리 및 소프트웨어 개발 프레임워크
      • 기능적 소프트웨어 시스템의 지속적인 협업, 유연성 및 가속화된 제공을 강조하는 프레임워크를 만드는 것
      • 8가지 필수 원칙을 기반
        • 비즈니스 요구 사항에 집중
        • 정시에 배달
        • 협업
        • 품질에 대해서는 절대 타협하지 마세요
        • 확고한 기반을 바탕으로 점진적으로 구축
        • 반복적으로 개발
        • 지속적이고 명확하게 의사소통하라
        • 통제력 입증
      • 타당성 조사, 비즈니스 연구, 기능 모델 반복, 설계 및 구축 반복, 구현이라는 5가지 순차적 단계
    • 나선 모형
      • 고전적인 소프트웨어 개발 방법론 중 하나
      • 다음의 사항을 나선 모양을 그리며 반복
        • 요구 사항 및 위험 분석
        • 계획 및 건축가 반복
        • 구현
        • 테스트 및 확인
      • 매번 반복을 하기전에 위험요소를 알아내고 사전에 제거
      • 매번 다음 단계의 반복을 진행 시킬때마다, 기능적, 성능적 측면에서 가장 위험요소가 높은 부분을 먼저 진행하고 없애나간다
      • 가장 위험요소가 큰 부분 혹은 버그가 발생하기 쉬운 측면을 절대로 개발의 마지막 단계까지 미루지 않는다는 것이 키워드
    • 폭포수 모델
      • 개발의 흐름이 마치 폭포수처럼 지속적으로 아래로 향하는 것처럼 보이는 데서 이름이 붙여졌다
      • 소프트웨어 요구사항 분석 단계에서 시작하여, 소프트웨어 설계, 소프트웨어 구현, 소프트웨어 시험, 소프트웨어 통합 단계 등을 거쳐, 소프트웨어 유지보수 단계
      • 완전히 순차적으로 한 단계, 한 단계를 진행
      • 전 단계가 수행되어 완료되기 전에는 다음 단계로 진행할 수 없도록 제한
      • 대규모 프로젝트에 자주 사용
    • 고속 응용 프로그램 개발 (RAD, Rapid Application Developement)
      • 빠르고 쉽게 응용 프로그램을 만들 수 있는 시각적 도구
      • 통합 개발 환경과 같은 높은 기능의 개발 환경을 사용하는 프로그래밍의 자동화나, 시각적인 사용자 인터페이스의 설계, 모듈개발 등의 기능을 포함
      • 많은 소프트웨어에 공통으로 처리하는 소스를 직접 짜지 않아도 자동으로 기능을 추가해 주는 것이 고속 개발 도구이며, 프로그래머는 각 소프트웨어에 필요한 저만의 기능에 대한 소스만을 짜면 된다
      • 프로그램의 개발이 쉬워진다
      • 개발된 소프트웨어의 동작 속도가 느려지거나 실행 파일의 크기가 커질 수 있다
    • 래셔널 통합 프로세스(RUP, Rational Unified Process)
      • IBM의 래셔널 소프트웨어 부서에서 만든 객체 지향 개발 방법론
      • 하나로 고정되어 쓰인 프로세스가 아니라, 적응이 가능한 프로세스 프레임워크
      • 개발 조직과 소프트웨어 프로젝트 팀이 필요한 바에 따라서 프로세스의 요소들을 선택하여 조절할 수 있도록 설계
      • 6 가지 기준
        • 발견된 위험 요소를 원동력으로 반복적으로 개발
        • 필수사항을 관리
        • 컴포넌트 기반의 구조를 도입
        • 소프트웨어를 시각화
        • 품질을 지속적으로 확인
        • 변화를 통제
    • 테스트 주도 개발(TDD, Test-driven development)
      • 매우 짧은 개발 사이클을 반복
      • 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성
      • 테스트 케이스를 통과하기 위한 최소한의 코드를 생성
      • 작성한 코드를 표준에 맞도록 리팩토링
        • 리팩토링 : 결과의 변경 없이 코드의 구조를 재조정함

 

 

참고 사이트 : https://ko.wikipedia.org/wiki/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EA%B0%9C%EB%B0%9C_%EB%B0%A9%EB%B2%95%EB%A1%A0

https://appmaster.io/ko/glossary/dongjeog-siseutem-gaebal-bangbeob-dsdm

 

동적 시스템 개발 방법(DSDM) | AppMaster

DSDM(동적 시스템 개발 방법)은 점진적 제공, 유연성, 협업 및 효율성의 원칙에 기반을 둔 민첩한 프로젝트 관리 및 소프트웨어 개발 프레임워크입니다. 포괄적이고 반복적인 접근 방식으로서 개

appmaster.io

 

 

소프트웨어 개발 방법론 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

 

'CS > 더 깊게 깊게' 카테고리의 다른 글

내일배움캠프 특강) 웹 심화를 듣고  (1) 2024.08.13
HTTP/HTTPS  (0) 2024.08.06
OSI 7계층 및 알아 두면 좋은 프로토콜  (0) 2024.07.30
객체지향 프로그래밍  (0) 2024.07.29

+ Recent posts