애플리케이션 계층 - 1

이윤설·2024년 8월 20일

1. 네트워크 애플리케이션의 원리

네트워크 애플리케이션 개발의 중심은 다른 위치의 종단 시스템에서 동작하고 네트워크를 통해 서로 통신하는 프로그램을 작성하는 것이다.

예를 들어, 웹 애플리케이션에는 서로 통신하는 서버클라이언트로 구별되는 두 가지 프로그램이 있다.

중요한 것은 우리가 라우터나 링크 계층 스위치처럼 네트워크 코어 장비에서 실행되는 소프트웨어까지 작성할 필요는 없다는 점이다.

네트워크 애플리케이션 구조

애플리케이션 구조와 네트워크 구조는 확실히 다른 개념이다.

  1. 네트워크 구조:

    • 애플리케이션 개발자 입장에서는 이미 주어진 환경이다.
    • 마치 도로망처럼, 기본적인 통신 경로와 서비스를 제공한다.
    • 개발자는 이 구조를 변경할 수 없고, 주어진 대로 사용해야만 한다.
  2. 애플리케이션 구조:

    • 개발자가 직접 설계하고 만들어가는 부분이다.
    • 여러 컴퓨터나 기기(종단 시스템)에서 애플리케이션이 어떻게 동작해야 하는지를 결정한다.
    • 마치 도로망 위에 건물을 짓는 것처럼, 네트워크 구조 위에 애플리케이션을 구현하는 방식을 정한다.

요약하면, 네트워크 구조는 개발자에게 주어진 '기반 시설'이고, 애플리케이션 구조는 개발자가 그 위에 설계하는 '건축물'이라고 볼 수 있다.

잘 알려진 애플리케이션 구조 2가지

  1. 클라이언트-서버 구조:
    • 서버: 항상 켜져 있는 중심 컴퓨터
    • 클라이언트: 서버에 요청을 보내는 다른 컴퓨터들
    • 특징:
      • 클라이언트들은 서로 직접 통신하지 않고, 항상 서버를 통해 소통한다.
      • 서버는 변하지 않는 고정 주소를 갖는다.
      • 너무 많은 요청이 올 경우, 여러 대의 컴퓨터로 구성된 데이터 센터가 하나의 강력한 서버처럼 작동한다.
    • example: 유튜브, 구글
  2. P2P (Peer-to-Peer) 구조:
    • 중앙 서버에 거의 의존하지 않거나 아예 의존하지 않는다.
    • 'Peer'라 불리는 개별 컴퓨터들이 서로 직접 통신한다.
    • 특징:
      • Peer는 보통 일반 사용자의 컴퓨터나 노트북이다.
      • 시스템이 자동으로 규모를 조절한다. 예를 들어, 파일 공유 시 각 peer가 파일을 요청하면서 동시에 다른 peer에게 파일을 제공한다.
      • 별도의 대규모 서버 시설이 필요 없어 비용이 적게 든다.
    • example: 토렌트

프로세스 간 통신

  • 프로세스란 무엇인가?

    • 프로세스는 컴퓨터에서 실행 중인 프로그램이다.
    • 즉, 프로그램이 메모리에 올라가 동작하고 있는 상태이다.
  • 프로세스 간 통신이란?

    • 서로 다른 컴퓨터에서 실행 중인 프로그램들이 정보를 주고받는 것이다.
    • 이 통신은 컴퓨터 네트워크를 통해 이루어진다.
  • 통신 과정:

    1. 보내는 쪽(송신 프로세스)이 메시지를 만들어 보낸다.
    2. 받는 쪽(수신 프로세스)이 그 메시지를 받는다.
    3. 받은 쪽에서 필요하다면 다시 메시지를 보내 응답한다.

쉽게 말해, 프로세스 간 통신은 마치 두 사람이 편지를 주고받는 것과 비슷하다.
한 사람이 편지를 쓰고 보내면, 다른 사람이 그 편지를 받고 필요하다면 답장을 보내는 것과 같은 원리라고 보면 된다.

클라이언트 프로세스, 서버 프로세스

요청을 보내는 쪽의 프로세스를 보통 클라이언트라고 하고, 요청을 받는 쪽을 서버라고 한다.

당연히 P2P 구조에서 봤듯이, 클라이언트도 서버 프로세스가 될 수 있고, 서버도 클라이언트 프로세스가 될 수 있다.

그냥 보통 어떻게 부르는지에 대한거니까 가볍게 읽자.

프로세스와 컴퓨터 네트워크 사이의 인터페이스(중요)

  1. 소켓(Socket)이란?

    • 프로그램이 네트워크를 통해 데이터를 주고받을 때 사용하는 통로이다.
    • 집에 비유하면, 프로그램은 집이고 소켓은 그 집의 문이라고 생각하면 된다.
  2. 소켓의 역할

    • 프로그램(애플리케이션)과 네트워크 사이의 중개자 역할을 한다.
    • 프로그램이 네트워크로 데이터를 보내거나 받을 때 사용하는 도구이다.
  3. 개발자의 소켓 사용

    • 개발자는 소켓을 통해 프로그램이 어떻게 데이터를 주고받을지 결정할 수 있다.
    • 하지만 데이터가 네트워크를 통해 어떻게 전송되는지에 대해서는 제한적으로만 관여할 수 있다.
  4. 개발자가 할 수 있는 일

    • 데이터 전송 방식(프로토콜) 선택
    • 데이터 전송과 관련된 일부 세부 설정 조정

쉽게 말해, 소켓은 프로그램이 네트워크와 소통할 수 있게 해주는 특별한 '문'이라고 생각하면 된다.

개발자는 이 문을 어떻게 사용할지 결정할 수 있지만, 문 밖의 배달 과정은 대부분 네트워크 시스템이 알아서 처리한다.

서버와 클라이언트 간의 통신 과정 심화

  1. 서버 준비:

    • 서버 애플리케이션이 시작되면, 특정 포트 번호(예: 80번)에 소켓을 열어둔다.
    • 이 소켓은 클라이언트의 연결 요청을 기다리는 '문'과 같다.
  2. 클라이언트 요청:

    • 클라이언트 애플리케이션(예: 웹 브라우저)이 서버에 연결하고자 한다.
    • 클라이언트는 자신의 소켓을 생성하고, 서버의 IP 주소와 포트 번호를 이용해 연결을 요청한다.
  3. 연결 수립:

    • 서버가 클라이언트의 요청을 받아들이면, 양쪽에서 연결이 수립된다.
    • 이제 두 애플리케이션은 각자의 소켓을 통해 데이터를 주고받을 수 있다.
  4. 데이터 교환:

    • 클라이언트가 서버에 데이터(요청)를 보낸다.
    • 서버는 이 요청을 받아 처리하고, 응답 데이터를 준비한다.
    • 서버는 준비된 데이터(응답)를 클라이언트에게 보낸다.
  5. 통신 종료:

    • 데이터 교환이 완료되면, 클라이언트나 서버 중 하나가 연결 종료를 요청할 수 있다.
    • 양쪽에서 연결 종료에 동의하면, 소켓이 닫히고 통신이 종료된다.

추가 개념:

  • 프로토콜: 클라이언트와 서버가 데이터를 주고받을 때 따르는 규칙 (예: HTTP, FTP)
  • 방화벽: 네트워크 보안을 위해 특정 포트나 IP의 통신을 제한할 수 있는 시스템
  • 로드 밸런서: 여러 서버에 클라이언트의 요청을 분산시켜 과부하를 방지하는 시스템

인터넷 전송 프로토콜이 제공하는 서비스

TCP: 연결을 만들고, 데이터를 안전하게 전달하며, 네트워크 혼잡을 관리함
UDP: 간단하고 빠르지만, 데이터 전달을 보장하지 않음

인기 있는 인터넷 애플리케이션

애플리케이션 계층 프로토콜

애플리케이션 계층 프로토콜

  1. 정의:
    서로 다른 컴퓨터에서 실행되는 프로그램들이 메시지를 주고받는 방법을 정의한다.

  2. 주요 정의 내용:

    • 메시지의 종류
    • 메시지의 문법 (어떻게 구성되는지)
    • 메시지 내용의 의미
    • 메시지를 언제, 어떻게 주고받을지에 대한 규칙
  3. 프로토콜의 공개 여부:

    • 공개 프로토콜: RFC에 명시되어 누구나 볼 수 있음 (예: HTTP)
      • RFC(Request for Comments) : 비평을 기다리는 문서라는 의미로, 컴퓨터 네트워크 공학 등에서 인터넷 기술에 적용 가능한 새로운 연구, 혁신, 기법 등을 아우르는 메모를 나타낸다.
    • 비공개 프로토콜: 특정 회사나 단체만 사용 가능
  4. 사용 예시:
    웹 브라우저가 HTTP 규칙을 따르면, 같은 규칙을 따르는 모든 웹 서버와 통신 가능

  5. 애플리케이션에서의 역할:

    • 프로토콜은 네트워크 애플리케이션의 여러 요소 중 하나이다.
    • 예: 웹 애플리케이션은 문서 형식, 브라우저, 서버, HTTP 프로토콜 등으로 구성된다.

2. 웹과 HTTP

HTTP (Hypertext Transfer Protocol)

HTTP는 웹에서 데이터를 주고받기 위한 애플리케이션 계층 프로토콜이다.

주요 특징:

  • 클라이언트-서버 모델: 클라이언트(주로 웹 브라우저)가 서버에 요청을 보내고, 서버가 응답한다.
  • 무상태(Stateless) 프로토콜: 각 요청은 독립적이며, 서버는 이전 요청의 정보를 저장하지 않는다.
  • 요청 메서드: GET, POST, PUT, DELETE 등 다양한 메서드를 사용하여 서버에 원하는 동작을 지시한다.
  • 상태 코드: 200 (성공), 404 (not found), 500 (서버 오류) 등 서버의 응답 상태를 나타낸다.

보안:

  • HTTPS는 SSL/TLS를 사용하여 HTTP 통신을 암호화한다.

쿠키 (Cookies)

쿠키는 웹사이트가 사용자의 브라우저에 저장하는 작은 데이터 조각이다.

주요 특징:

  • 상태 유지: HTTP의 무상태성을 보완하여 사용자 세션을 관리한다.
  • 사용자 인증, 사용자 설정 저장, 행동 추적 등에 사용된다.

종류:

  • 세션 쿠키: 브라우저 종료 시 삭제
  • 영속 쿠키: 지정된 만료 날짜까지 유지

법적 고려사항:

  • 많은 국가에서 쿠키 사용에 대한 사용자 동의를 요구한다.

캐시 (Cache)

캐시는 자주 사용되는 데이터를 임시로 저장하여 빠른 접근을 가능하게 하는 기술이다.

웹에서의 캐시 종류:

  • 브라우저 캐시: 사용자의 로컬 기기에 저장된다.
  • 프록시 캐시: 네트워크 중간에 위치한 서버에 저장된다.
  • 서버 캐시: 웹 서버나 애플리케이션 서버에서 관리한다.

HTTP 캐시 제어:

  • Cache-Control 헤더: max-age, no-cache, no-store 등의 지시자로 캐시 동작을 제어한다.
  • ETag: 리소스의 특정 버전을 식별하는 데 사용된다.
  • Last-Modified: 리소스의 마지막 수정 시간을 나타낸다.

캐시 전략:

  • Cache-Aside, Read-Through, Write-Through, Write-Back 등 다양한 전략이 존재한다.

주의사항:

  • 캐시 무효화(invalidation): 오래된 데이터가 서비스되지 않도록 적절한 캐시 무효화 전략이 필요하다.
  • 보안: 민감한 정보가 캐시에 저장되지 않도록 주의해야 한다.
profile
화려한 외면이 아닌 단단한 내면

0개의 댓글