포워드 프록시(Forward Proxy)란포워드 프록시는 클라이언트 앞에 위치하여, 클라이언트가 서버로 요청을 보낼 때 포워드 프록시 서버가 해당 요청을 대신 받아서 서버에게 전달해 줍니다. 이후에 서버의 응답을 포워드 프록시가 대신 받아 클라이언트에게 전달해줍니다. 간단히, 사용자들은 서버에게 요청을 보내면 이 요청들은 포워드 프록시가 받아서 원하는 외부 서버에 전달해 주고 응답 값을 대신 받아 전달해 주는 역할을 합니다.장점온라인상에서 클라이언트 신원 보호가 가능하다.캐싱 및 사용자 기능을 향상시킨다. (어느 서버에 요청을 보내야 하는지 알 필요 없음)특정 콘텐츠에 대한 액세스 차단 (방화벽 : 포워드 프록시 앞에 방화벽을 두어 민감한 콘텐츠인 경우 사전에 차단할 수 있다) 리버스 프록시(Revers..
WAS(Web Application Server)를 이해하기 전에 예전부터 사용하고 있던 Web Server는 무엇이고, 어떤 기능을 수행했는지 파악한 다음에 WAS 서버가 왜 생기게 됐는지 순으로 정리하겠습니다. 웹서버란 HTTP 프로토콜을 기반으로 클라이언트가 웹 브라우저에서 어떠한 요청을 하면 그 요청을 받아 정적 컨텐츠를 제공하는 서버입니다. 💡 정적 컨텐츠란 단순 HTML 문서, CSS, 이미지, 파일 등 즉시 응답 가능한 컨텐츠입니다. 이때 웹 서버가 정적 컨텐츠가 아닌 동적 컨텐츠를 요청받으면 WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달하는 역할도 해줍니다. 이러한 웹 서버에는 Apache, NginX 등이 있습니다. Web Server의 개념 소프트웨어와 ..
소수 구하기 - 에라토스테네스의 체 1부터 N까지의 수 중에서 소수를 찾으려고 할 때 모든 수를 2부터 N-1까지의 수로 나누어 결과를 찾으면 시간 초과에 걸릴 가능성이 높습니다. 소수 여부를 알 수 있는 대표적인 에라토스테네스의 체 방법을 이용해 시간 초과를 피할 수 있습니다. 2부터 N까지의 모든 자연수를 나열합니다. (1은 소수가 아님) 남은 수 중에서 아직 처리하지 않은 가장 작은 수 i를 찾습니다. (처음 i는 2) 남은 수 중에서 i의 배수를 모두 제거합니다. (i의 배수이므로 소수가 아님 / i는 제거하지 않음) 더 이상 반복할 수 없을 때까지 2와 3번을 반복합니다. n = 100 sosu = [True]*(n+1) # 초기에는 소수로 설정 # 에라토스테네스의 체 구현 for i in ra..
데이터베이스의 기본 원칙과 RDBMS와 NoSQL 차이를 이해하여 프로젝트 유형에 따라 어느 데이터베이스를 고르는 것이 효율적인지 파악하고자 합니다. 데이터베이스의 원칙 무결성 : 데이터의 정보가 변경되거나 오염되지 않도록 하는 원칙 Accuracy 데이터에 오류가 없어야 합니다. 사용자가 저장하고자 하는 내용 모두가 잘 저장되어야 합니다. Consistency 데이터베이스는 일관성이어야 합니다. 안정성 오류 발생 시 회복력(복구력)이 좋아야 합니다. 고장이 잘 나지 않아야 합니다. 확장성 Scale Up - 서버 컴퓨터 기능 향상 하기 Scale Out - 여러 서버 분산하여 처리하기 Transaction 트랜잭션을 통해 작업의 완전성을 보장합니다. 사용자의 작업셋을 모두 완벽하게 처리하거나 처리하지 ..
지연로딩(LAZY Loading)이란 : 지연로딩은 연관된 엔티티를 실제로 사용할 때까지 데이터베이스에서 로딩을 지연시키는 기법입니다. 예를 들어 엔티티 A와 B가 일대다 관계를 가지고 있을 때, A 엔티티를 조회하더라도 B 엔티티를 바로 로딩하지 않고, 실제로 B엔티티의 내용이 필요한 시점에 해당 엔티티를 데이터베이스에 가져오는 방식입니다. 지연로딩의 장점 및 사용하는 이유 : 불필요한 데이터를 미리 로딩하지 않아 메모리를 절약하고, 성능 향상을 이룰 수 있습니다. 주의할 점 지연로딩을 사용하면서 영속성 컨텍스트가 유지되는 시점에서 연관된 엔티티를 로딩하지 않고 사용하려고 할 때, LazyInitializaionException이 발생할 수 있습니다. 영속성 컨텍스트가 사라질 경우, Proxy 엔티티를..
문제 에러 코드 from collections import deque t = int(input()) # 테스트 케이스 개수 for i in range(t): p = input() # 수행할 함수 n = int(input()) # 배열의 개수 arr = input() # 배열 # '[', ']', ',' 특수 문자 제거 후 자료형 변환 num = deque(arr.split('[')[1].split(']')[0].split(',')) if num[0]=='': print('error') break for i in p: if i == 'R': num.reverse() elif i =='D': if len(num) == 0: print('error') break else: num.popleft() if num..
문제 0번째에 위치한 인덱스가 우리가 찾고 있는 숫자이면 삭제 및 출력한다. 우리가 찾는 인덱스가 아닌 경우 왼쪽으로 이동하거나 오른쪽으로 이동시켜 큐의 위치를 변경한다. 양쪽으로 입력과 출력이 일어나므로 덱의 자료구조인 deque를 사용하면 좋습니다. 코드 from collections import deque import sys input = sys.stdin.readline n, m = map(int, input().split()) # 큐의 크기 n 과 뽑으려는 숫자의 개수 m pos = list(map(int, input().split())) # 뽑아내려고 하는 수의 위치 q = deque(i for i in range(1, n+1)) # 큐 설정 cnt = 0 # 카운트 변수 for i in po..