본문 바로가기
카테고리 없음

[IT 공부] 파이프라이닝 프로토콜 완벽 비교부터 PHP 기초 배열과 DB 연결 기초까지

by Lsung 2026. 9. 7.

1. 전송 계층 프로토콜 (Transport Layer)

① Go-Back-N (GBN) vs Selective Repeat (SR)

  • Go-Back-N (GBN):
    • 타이머: 가장 오래된 미확인 패킷(send_base)에 단 1개의 타이머만 운용합니다.
    • 타임아웃 시 동작: send_base부터 윈도우 내의 모든 패킷을 전부 재전송합니다. (재전송 오버헤드 발생)
    • 수신자(Receiver): 순서에 맞지 않는(Out-of-order) 패킷은 저장하지 않고 버리며(Discard), 마지막으로 올바르게 받은 패킷의 누적 ACK를 중복 송신합니다.
  • Selective Repeat (SR):
    • 타이머: 모든 패킷이 개별 타이머를 가집니다.
    • 타임아웃 시 동작: 타임아웃이 발생한 해당 패킷만 선택적으로 재전송합니다.
    • 수신자(Receiver): 순서가 맞지 않더라도 정상 패킷이면 버퍼링(Buffering)하고 ACK를 송신합니다.
    • 단점: 대량의 타이머를 동시에 운용해야 하므로 시스템/CPU 부담이 커집니다.

② TCP (Transmission Control Protocol) 개요

  • 특징: Point-to-Point 통신, 전이중(Full Duplex), 연결 지향적(Connection-oriented), 신뢰성 있는 순서 보장 바이트 스트림(In-order byte stream).
  • 파이프라이닝과 윈도우: RTT(Round Trip Time) 대기 시간을 줄이기 위해 한 번에 여러 패킷을 보내는 Sliding Window 기법을 사용하며, 패킷의 단위는 MSS(Maximum Segment Size)를 기준으로 합니다.
  • 타이머 운용: 개념상 SR 같지만, 실제 구현은 단일 재전송 타이머누적 ACK를 사용하여 오버헤드를 낮추고, GBN과 SR의 장점을 혼합하여 사용합니다.

③ TCP 핵심 동작 메커니즘

  • 빠른 재전송 (Fast Retransmit):
    • 타임아웃 주기는 길기 때문에 지연을 줄이고자 도입되었습니다.
    • 수신자가 갭(Gap)을 발견하여 동일한 중복 ACK를 3회(총 4회) 수신하면, Sender는 타임아웃 전이라도 손실된 세그먼트를 즉시 재전송합니다.
  • 흐름 제어 (Flow Control):
    • 수신자(Receiver)가 자신의 버퍼 여유 공간인 RcvWindow 정보를 Header에 담아 송신자에게 전달함으로써, 송신자가 수신 버퍼 범람(Overflow)을 일으키지 않도록 전송 속도를 제어합니다.
  • 3-Way Handshake (연결 설정):
    • Step 1 [Client $\rightarrow$ Server]: SYN (초기 seq# 설정)
    • Step 2 [Server $\rightarrow$ Client]: SYN-ACK (서버 버퍼 할당 및 초기 seq# 설정)
    • Step 3 [Client $\rightarrow$ Server]: ACK (데이터 포함 가능)
    • 보안 참고: Step 2 과정에서 가짜 IP로 SYN만 다수 보내 메모리를 고갈시키는 SYN Flooding 공격에 악용될 수 있습니다.

2. PHP 배열(Array) 및 제어문

① PHP 배열의 분류 및 특징

  • 스칼라 배열 (Scalar Array): 첨자(Index/Key)가 0, 1, 2...와 같이 숫자로 이루어진 배열.
  • 연관 배열 (Associative Array): Key에 문자열을 사용하는 배열 (예: $row['sname'] = '관우';).
  • 주요 함수: count($ar)를 통해 배열 내 요소(Element)의 개수를 동적으로 파악하여 for문 조건식에 활용합니다.

② 알고리즘 예제: 소수(Prime Number) 판별 프로그램

PHP
 
<?php
$ar = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);

foreach($ar as $value) {
    if ($value < 2) continue; // 1은 소수에서 제외
    
    $is_prime = true;
    for ($j = 2; $j < $value; $j++) {
        if ($value % $j == 0) {
            $is_prime = false; // 약수가 존재하면 합성수
            break;
        }
    }
    
    if ($is_prime) {
        echo("소수 : {$value}<br>");
    }
}
?>

3. PHP - Oracle 데이터베이스 연동 기초

① 데이터베이스 처리 3단계 과정

  1. SQL 구문 파싱 (Parsing): 서버 프로세스가 전달받은 SQL을 기계가 실행할 수 있는 상태로 분석/조회합니다.
  2. SQL 구문 실행 (Execution): 실제 데이터베이스 엔진이 명령을 처리합니다.
  3. 결과 패치 (Fetch): SELECT 문의 경우 처리된 결과 집합을 클라이언트로 가져옵니다.

② TNS(Transparent Network Substrate) 및 Connection

  • TNS: 원격지에 있는 Oracle 데이터베이스 서버에 원활히 접속하기 위한 네트워크 서비스 식별자(네임서버 역할)입니다.
  • PHP 연동 예제 소스 (oracle.php):
PHP
 
<?php
  $server = "oracle"; // TNS 이름 또는 서버 주소
  $user = "ast17";
  $passwd = "ast17";

  // Oracle DB 접속 시도
  $conn = @oci_connect($user, $passwd, $server) or die('Could not connect to Oracle DB');
  
  echo("Oracle 19c 연결 성공 - \$conn : $conn<br>");
  
  // 서버 버전 확인
  $st = oci_server_version($conn);
  echo("Server Version: $st<br><hr>");
  
  show_source(__FILE__);
?>