Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 시스템콜
- Flutter
- 오블완
- JavaScript
- HTML
- 크래프톤정글
- pintos
- TiL
- 사이드프로젝트
- 모션비트
- 티스토리챌린지
- userprog
- corou
- CSS
- 크래프톤 정글
- 4기
- 큐
- defee
- 나만무
- 소켓
- 자바스크립트
- Vue.js
- 알고리즘
- 스택
- 리액트
- 코드트리
- 핀토스
- Java
- 백준
- 자바
Archives
- Today
- Total
미새문지
크래프톤 정글 week06, day51 - CGI, WebServer, MIME Type, Proxy, 잔디심기 본문
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)
- 포워드 프록시와 마찬가지로 요청과 응답이 프록시 서버로 이동한다.
- 하지만 포워드 프록시와 다르게 서버들이 주로 내부망으로 구성되고 프록시에게만 연결을 허용한다.
- 서비스를 위한 보안 채널을 구축한다.
- 클라이언트의 정보를 감추는 포워드 프록시 처럼 리버스 프록시는 서버를 감춘다.
- 포워드 프록시(Forward 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
'크래프톤 정글 > TIL' 카테고리의 다른 글
크래프톤 정글 week07, day53 - CPU 스케줄링 알고리즘, 잔디심기 (6) | 2024.03.01 |
---|---|
크래프톤 정글 week06, day52 - Tiny Server Code, 잔디심기 (2) | 2024.02.29 |
크래프톤 정글 week06, day50 - Telnet, 잔디 심기 (2) | 2024.02.27 |
크래프톤 정글 week06, day49 - 망의 구성 형, 잔디 심기 (2) | 2024.02.26 |
크래프톤 정글 week06, day48 - Datagram Socket vs Stream Socket, HTTP, 클라이언트-서버 트랜잭션, 잔디 심기 (2) | 2024.02.25 |