CGI, Common Gateway Interface

Mixer·2023년 6월 27일
0

CGI

  • 웹 서버와 애플리케이션 사이에 데이터를 주고받는 규약

  • CGI 규칙에 따라서 만들어진 프로그램을 CGI 프로그램이라 한다.

대표적인 애플리케이션으로는 전자게시판, 접속 카운터, 위키, 블로그 시스템이 있다.

  • CGI 프로그램 종류로는 컴파일 방식 (C, C++, JAVA 등)과 인터프리터 방식 (PHP, Python) 이 있다.
  1. CGI 프로그램과 서블릿

Servlet(Server + Applet의 합성어)

자바에서 웹 애플리케이션을 만드는 기술, 즉 자바에서 동적인 웹 페이지를 구현하기 위한 표준이다.

ServletContainer

서블릿의 생성부터 소멸까지의 라이프사이클을 관리하는 역할을 가지고 있으며,
서블릿 컨테이너는 웹 서버와 소켓을 만들고 통신하는 과정을 대신 처리해준다.
그로인해 개발자는 비즈니스 로직에만 집중하면 되는 이점을 가지게 된다.

  • 서블릿 객체를 싱글톤으로 관리한다 (인스턴스 하나만 생성하여 공유하는 방식)
    - 상태를 유지 stateful 하게 설계하면 안된다
    • Thread safety 하지 않다.
Thread safety 하지않다를 위한 코드

 package org.example.counter;

public class Counter implements Runnable {

    // 상태 유지를 하기위해 상대값을 설정
    private int count = 0;

    public void increment() {
        count++;
    }

    public void decrement() {
        count--;
    }

    public int getValue() {
        return count;
    }

    @Override
    public void run() {
        this.increment();
        System.out.println("Value for Thread After increment " + Thread.currentThread().getName() + " " + this.getValue());
        this.decrement();
        System.out.println("Value for Thread at last " + Thread.currentThread().getName() + " " + this.getValue());
    }
}
package org.example.counter;

public class RaceConditionDemo {
    public static void main(String[] args) {
       Counter counter = new Counter();
       Thread t1 = new Thread(counter, "Thread1");
       Thread t2 = new Thread(counter, "Thread2");
       Thread t3 = new Thread(counter, "Thread3");

       t1.start();
       t2.start();
       t3.start();
    }
}

Counter counter = new Counter(); Singleton 객체이며,

Thread t1 = new Thread(counter, "Thread1");
Thread t2 = new Thread(counter, "Thread2");
Thread t3 = new Thread(counter, "Thread3");
멀티쓰레드 환경에서 하나의 객체(자원)을 공유하게 되면
우리가 뜻하지않는 RaceCondition, 즉 뜻하지않는 결과를 반환할 수 있다.

RaceCondition 이란?
여러 프로세스 혹은 스레드가 하나의 자원에 동시에 접근하기위해 경쟁을 하면서 우리가 원하지않는 결과가 나올수 있다는 상황을 뜻한다.

main()

Value for Thread After increment Thread2 2
Value for Thread After increment Thread1 1
Value for Thread After increment Thread3 3
Value for Thread at last Thread2 2
Value for Thread at last Thread1 1
Value for Thread at last Thread3 0

WAS vs ServletContainer

  • WAS는 서블릿 컨테이너를 포함하는 개념이며, 거의 동일하다고 보아도 무방하다.
  • WAS는 매 요청마다 스레드 풀에서 기존 스레드를 사용한다.
  • WAS의 주요 튜닝 포인트는 max thread 수 이며, 대표적인 WAS로는 Tomcat이 있다.


출처
https://ko.wikipedia.org/wiki/%EA%B3%B5%EC%9A%A9_%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4

profile
Minthug'life

0개의 댓글