HTTP/HTTPS Project Plan

wldbs._.·2024년 12월 10일
1

HTTP & Go

목록 보기
2/5

24.12.06(금)부터 프로젝트를 진행하는 중이다.

프로젝트 구상안은 아래와 같다. 일부만 업로드하겠다!



프로젝트 주제

: Go 언어 기반 HTTP/HTTPS 통신 시스템


프로젝트 개요

: 이 프로젝트는 Go 언어를 사용하여 HTTP/HTTPS 통신을 구현하며, 두 개의 클라이언트(Provider/Viewer)와 한 개의 서버(Tx/Rx)가 상호작용한다.
본 프로젝트의 목적은 HTTP 서버와 HTTPS 서버 간 데이터 복제가 잘 이루어짐을 확인하기 위함이다.


시스템 구성 요소

1. 클라이언트 1 (데이터 송신자, Provider)

  • 기능:
    • 명령행 인자로 작업(method)을 입력 받아 서버에게 해당 작업 요청

      • POST 작업에 요구되는 명령행 인자로 데이터의 개수(n)를 입력 받음

      • PUT 작업에 요구되는 명령행 인자로 아이디(id), 이름(name) 입력 받음

      • DELETE 작업에 요구되는 명령행 인자로 아이디(id) 입력 받음

    • → 작업별로 필수적으로 요구되는 명령행 인자가 상이

    • 이후 프로그램이 사용자에게 수행할 작업 입력 요청

      • POST: 데이터 생성 및 대체, 생성할 데이터 개수 입력 요청
      • PUT: 기존 데이터 수정, 아이디와 수정할 이름 데이터 입력 요청
      • DELETE: 특정 데이터 삭제, 삭제할 아이디 입력 요청
    • 생성된 데이터는 id, name, address, sex 필드를 포함한 구조체 형식
      → 예시: n=3인 경우
      - id는 1, 2, 3 형태로 데이터 생성
      - name=Alex → Alex1, Alex2, Alex3 형태로 데이터 생성
      - address와 sex는 n과 무관하게 초기 데이터와 동일하게 사용

    • 전송 데이터 형식: JSON 형식으로 Tx 서버에 전송

2. 서버

하나의 코드에서 HTTP와 HTTPS를 함께 다루는 방식을 사용

  • 기능:

    • HTTPS 통신에서는 OpenSSL를 통해 자체 서명한 인증서(cert.pem) 및 키 파일(key.pem)을 사용
    • 명령행 인자로 모드(mode) 지정: Tx 서버(tx), Rx 서버(rx)
    • 명령행 인자로 프로토콜(protocol) 지정: HTTP(http), HTTPS(https)

    Go의 http 클라이언트는 자체 서명된 인증서를 신뢰하지 않기에, InsecureSkipVerify: true 설정

2-1. Tx 서버 (HTTP/HTTPS)

  • 역할: 데이터 중계 서버
  • 기능:
    • 클라이언트 1로부터 POST/PUT/DELETE 요청 처리
    • 수신한 데이터를 TCP 소켓과 Protobuf를 통해 Rx 서버로 전송
    • 송신 데이터 개수 기록 및 데이터 관리

2-2. Rx 서버 (HTTPS/HTTP)

  • 역할: 데이터 수신 및 관리.
  • 기능:
    • Tx 서버로부터 데이터를 TCP 소켓을 통해 수신(Protobuf 사용)
    • 송신 데이터의 개수와 수신 데이터의 개수를 비교
       일치하는 경우: 데이터를 갱신
       불일치하는 경우: 기존 데이터를 유지하고 수신 데이터 폐기
    • 클라이언트 2의 GET 요청에 대한 응답으로 데이터 제공

3. 클라이언트 2 (데이터 수신자, Viewer)

  • 기능:

    • Rx 서버에 10초마다 GET 요청을 보내 데이터를 수신
    • 수신한 데이터를 출력

프로젝트 과정 시각화

경우 1. HTTP가 Tx, HTTPS가 Rx

경우 2. HTTPS가 Tx, HTTP가 Rx


주요 동작 흐름

  1. 클라이언트 1 → Tx 서버
  • 데이터를 POST/PUT/DELETE 요청.
  1. Tx 서버 → Rx 서버
  • 클라이언트 1로부터 받은 요청을 처리하고 데이터를 Rx 서버로 전송 (TCP 소켓 + Protobuf 사용).
  1. Rx 서버 → 클라이언트 2
  • 송수신 개수를 비교하여 데이터를 업데이트하거나 유지
  • 클라이언트 2의 GET 요청에 응답.
  1. 클라이언트 2
  • Rx 서버로부터 데이터를 GET 요청으로 수신.
  • 수신 데이터를 출력.
profile
공부 기록용 24.08.05~ #LLM #RAG

0개의 댓글