전체 글


Cache가 왜 필요한가? 네트워크 요청을 통해 리소스를 받는 것은 느리며 불필요한 요청은 비용을 증가시킵니다. 큰 리소스의 경우 비용은 그에 비례하게 됩니다. 이를 해결해줄 수 있는 방법 중 하나는 Cache를 구현하는 것입니다. Cache에 데이터를 미리 복사해놓으면 불필요한 요청 없이 바로 데이터에 접근할 수 있습니다. 그리고 HTTP Cache는 모든 브라우저에서 지원되며 많은 작업이 필요없습니다. 이제부터 효과적인 HTTP Cache 구현에 대해 알아보겠습니다. HTTP Cache 작동 방식 HTTP 요청이 먼저 브라우저 캐시로 라우팅 유효한 캐시 응답이 있는지 확인 일치하는 항목이 있으면 캐시에서 응답을 읽어 네트워크 대기시간과 전송 데이터 비용을 모두 제거 HTTP Cache는 Request..

클러스터 API 요청시 인증서 문제 해결 경험을 공유합니다. 문제 발생 클러스터 접근용 외부 서버에서 kube-config를 세팅해두고 context를 변경하여 2개의 k8s 클러스터 중 원하는 클러스터의 API 서버로 요청할 수 있게 설정하였습니다. kube-config 파일은 아래의 형태와 같습니다. apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0 server: https://10.10.100.100:26443 ... - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0 server: https://10.1..


1. AWS란? AWS(Amazon Web Services)는 컴퓨팅 성능, 스토리지, 데이터베이스, 분석 및 머신러닝을 포함한 광범위한 서비스를 제공하는 클라우드 컴퓨팅 플랫폼입니다. 클라우드 컴퓨팅이란? 클라우드 컴퓨팅은 인터넷을 통해 서버, 스토리지, 데이터베이스, 네트워킹, 소프트웨어, 분석, 인텔리전스 등의 컴퓨팅 서비스를 활용하는 기술입니다. 이를 통해 서버를 굳이 사지 않아도 성능이 좋은 컴퓨터를 사용할 수 있고, 일반적으로 사용한 클라우드 서비스에 대해서만 요금을 지불하므로 운영 비용을 낮추고 인프라를 보다 효율적으로 운영할 수 있습니다. AWS는 2022년 기준 전세계 클라우드 시장에서 가장 높은 점유율인 34%를 차지하고 있습니다. 2. EC2 EC2는 클라우드 서버 인스턴스(가상머신)..

문제 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 한다. 예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자. 2 0 0 0 1 1 0 0 0 1 0 1 2 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 ..

문제 N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(×) 1개, 나눗셈(÷) 1개인 경우에는 총 60가지의 식을 만들 수 있다. 예를 들어, 아래와 같은 식을 만들 수 있다. 1+2+3-4×5÷6 1÷2+3+4-5×6 1+2÷3×4-5+6 1÷2×3-4+5+6 식의 계산은 연산자 우선..

문제 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. 오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다. 백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다. 각각의 상담은 상담을 완료하는 데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다. N = 7인 경우에 다음과 같은 상담 일정표를 보자. 1일 2일 3일 4일 5일 6일 7일 Ti 3 5 1 1 2 4 2 Pi 10 20 10 20 15 40 200 1일에 잡혀있는 상담은 총 3일이 걸리며, 상담했을 때 받을 수 있는 금액은 10이다. 5일에 잡혀있는 상담은 총 2일이 걸리며, 받을 수 있는 금액은 1..

문제 접근 해당 문제는 총감독관이 감독하는 응시자를 제외하고 나머지 응시자 중에서 부감독관의 수로 나눴을 때 나머지 값에 따라 정답을 결정해주면 해결되는 문제이다. 그리고 최악의 케이스일 경우 정답이 int 범위를 벗어날 수 있으므로 long 타입을 써야한다. 코드 import java.io.*; import java.util.StringTokenizer; // https://www.acmicpc.net/problem/3190 public class Main { static StringBuilder sb = new StringBuilder(); static int N, B, C; static int[] testRooms; public static void main(String[] args) { input..

문제 접근 이 문제는 우선순위 큐와 같은 자료구조를 사용하여 특정 기준을 적용한 정렬을 구현해야 한다. 코드 import java.util.*; class Solution { public long[] solution(int[][] program) { long[] answer = new long[11]; int curTime = 0; int restRunningTime = 0; // 실행 중인 프로그램이 남은 시간 // 전체 프로그램 우선순위 큐 PriorityQueue programQueue = new PriorityQueue(); // 대기 중 우선순위 큐 PriorityQueue waitingQueue = new PriorityQueue(); for (int i=0; i 0) restRunningTi..