미새문지

크래프톤 정글 week06, day51 - CGI, WebServer, MIME Type, Proxy, 잔디심기 본문

크래프톤 정글/TIL

크래프톤 정글 week06, day51 - CGI, WebServer, MIME Type, Proxy, 잔디심기

문미새 2024. 2. 28. 01:36
728x90

CGI(Common Gateway Interface)

  • 웹 서버와 독립적인 소프트웨어 혹은 스크립트 간에 정보를 주고 받는 방식
    • 이는 사용자가 웹페이지에 입력한 정보를 서버에 전달하거나, 서버에서 처리한 데이터를 사용자에게 보여주는 등의 역할을 한다.
  • 특징
    • 언어 독립성
      • CGI 스크립트는 Java, Python, C, 등 다양한 프로그래밍 언어로 작성될 수 있으며, 이는 웹 서버와 프로그래밍 언어 간의 통신을 가능하게 한다.
    • 독립적인 프로세스
      • 각각의 CGI 요청은 별도의 프로세스로 처리된다. 이는 간단하고 안전한 동작을 가능하게 하지만, 많은 요청을 동시에 처리할 때는 오버헤드가 커질 수 있다.
    • 표준 입출력을 통한 데이터 전송
      • CGI 프로그램은 표준 입력을 통해 웹 서버로부터 정보를 받고, 표준 출력을 통해 결과를 웹 서버에게 전달한다.
    • 동적 컨텐츠 생성
      • CGI는 사용자의 입력에 따라 동적으로 웹 페이지를 생성할 수 있다. 이는 웹 사이트가 사용자마다 다른 정보를 제공하거나, 데이터베이스에서 정보를 검색하는 등의 기능을 구현하는데 사용된다.

 

WebServer

  • 웹 서버는 인터넷을 통해 웹 브라우저에서 요청하는 HTML 문서나 이미지, 데이터 등을 제공하는 컴퓨터 시스템을 일컫는다.
  • 웹 서버의 주요 기능은 클라이언트(웹 브라우저)로부터 HTTP 프로토콜을 사용하여 요청을 받고, 요청된 웹 페이지나 파일 등의 자원을 찾아서 응답한다.
  • 특징
    • 정적 파일 제공
      • 웹 서버는 HTML, CSS, JavaScript, 이미지 파일 등과 같은 정적 파일을 웹 브라우저에게 전송하는데, 이러한 파일들은 사용자의 요청에 따라 변경되지 않고 그대로 제공된다.
    • 동적 콘텐츠 생성
      • 웹 서버는 CGI, PHP, JSP 등의 기술을 이용해 동적 웹 페이지를 생성할 수 있다.
    • 보안
      • 웹 서버는 SSL/TLS 프로토콜을 이용해 웹 브라우저와의 통신을 암호화 할 수 있는데, 이는 중요한 정보가 전송되는 경우 또는 로그인과 같은 인증이 필요한 경우에 사용된다.
    • 로깅
      • 웹 서버는 모든 요청과 응답에 대한 정보를 로그 파일에 기록한다.
      • 이 로그를 분석하면 웹 서버의 성능 문제를 파악하거나, 보안 문제를 검출하는데 도움이 된다.

 

MIME Type(Multipurpose Internet Main Extensions)

  • 원래 의미는 이메일을 보낼 때 사용되는 인터넷 표준이지만, 현재는 웹에서 파일의 종류를 설명하는데 널리 사용되고 있다.
    • 웹에서는 HTTP 헤더의 ‘Content-Type’ 필드를 통해 MIME 타입을 전달한다.
  • MIME 타입은 주로 두 부분으로 구성되어 있는데,
    • 첫 번째는 데이터의 대략적인 카테고리를 나타내는 ‘타입’
    • 두 번째는 ‘서브 타입’으로, 타입보다 더 구체적인 데이터 포맷을 나타낸다.
    • 예를 들어, ‘text/html’이라는 MIME 타입은 ‘text’타입의 하위 형식으로 ‘html’을 나타내는데, 이는 HTML 형식의 텍스트 문서를 나타낸다.
    • 또 다른 예는 ‘image/jpeg’는 JPEG 형식의 이미지 파일을 나타낸다.
  • 웹 브라우저는 서버로부터 받은 MIME 타입을 통해 어떻게 데이터를 처리할지 결정한다.
    • 예를 들어 ‘text/html’이라면 HTML 문서로 해석하고 렌더링한다.
  • 이렇게 MIME 타입은 웹에서 데이터를 올바르게 처리하고 표시하는데 중요한 역할을 한다.

proxy

  • 프로토콜에 있어서 대리 응답 등으로 사용하는 개념이다.
  • Proxy는 클라이언트와 서버 사이에 존재하며, 대리로 통신을 수행하는 중계기 역할을 한다.
    • 그 기능을 하는 주체를 Proxy Server라고 한다.
  • 종류
    • 포워드 프록시(Forward Proxy)
      • 보통의 프록시가 포워드 프록시이다.
      • 클라이언트와 서버 사이에 위치해 요청을 중계하고, 요청과 응답은 프록시 서버를 거치는데 클라이언트에서 서버로 보내는 클라이언트 정보들을 프록시가 은닉하여 누군지 식별할 수 없게 한다.
    • 리버스 프록시(Reverse Proxy)
      • 포워드 프록시와 마찬가지로 요청과 응답이 프록시 서버로 이동한다.
      • 하지만 포워드 프록시와 다르게 서버들이 주로 내부망으로 구성되고 프록시에게만 연결을 허용한다.
        • 서비스를 위한 보안 채널을 구축한다.
      • 클라이언트의 정보를 감추는 포워드 프록시 처럼 리버스 프록시는 서버를 감춘다.
  • 프록시를 사용하는 이유
    • 보안
      • 프록시 서버는 내부 네트워크와 외부 네트워크 사이에 위치해 해킹이나 악성 코드를 막아준다.
      • 사용자의 IP 주소를 숨겨주고 프록시 서버의 IP 주소를 보내주기 때문에 정보 보호가 용이하다.
    • 캐싱
      • 웹 프록시는 요청된 웹 페이지나 파일을 캐시로 저장하기 때문에, 캐시를 사용하여 리소스로 접근을 빠르게 할 수 있다.
      • 즉, 네트워크 트래픽을 줄이고 응답 시간을 단축시킬 수 있다.
    • 제한된 사이트 접근
      • 일부 웹사이트는 특정 지역에서만 접근이 가능하도록 제한을 두기도 하는데, 해당 지역에 위치한 프록시 서버를 사용하면 접근이 가능하다.
    • 네트워크 성능 개선
      • 프록시 서버는 사용자의 요청을 처리하고 결과를 반환하는 역할을 하는데, 이 과정에서 네트워크 트래픽을 관리하고 최적화해 전반적인 네트워크 성능 개선이 가능하다.

오늘의 잔디심기

백준
14729
Python
실버5
칠무해
# 출처 : https://dpcalfola.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%ACPS-%EB%B0%B1%EC%A4%80-14729-%EC%B9%A0%EB%AC%B4%ED%95%B4-%EC%B5%9C%EB%8C%80%ED%9E%99-%EC%82%AC%EC%9A%A9
import sys
import heapq
input = sys.stdin.readline

def SevenBumbu():
    n = int(input().rstrip())

    sevenNewbi = []

    for _ in range(7):
        input_value: float = float(sys.stdin.readline().rstrip())
        heapq.heappush(sevenNewbi, input_value * -1)

    for _ in range(n - 7):

        max_value = sevenNewbi[0] * -1
        input_value: float = float(sys.stdin.readline().rstrip())

        if max_value > input_value:
            heapq.heapreplace(sevenNewbi, input_value * -1)

    sevenNewbi.sort(reverse=True)

    for score in sevenNewbi:
        print(f'{score * -1:.3f}')

SevenBumbu()

로직이 좀 쉬워서 금방 했다고 생각하며 제출했는데 시간초과가 떴다. 이유는 처음 받은 입력 개수가 너무 많아서 시간 에러가 발생한 것이다.

그래서 이것저것 시도해보다가 힙을 이용한 큐를 사용하려 했는데, 자바스크립트에서 힙 라이브러리를 사용하려면 npm으로 설치를 해야 하는데 백준에서 이것을 지원을 안하는 것 같아서 못했고 지피티를 이용해 깡으로 전체 힙 코드를 넣어봤는데도 시간 초과가 떠버려서 결국 파이썬으로 했다.

 

학습 시간 : 10 ~ 26시

728x90