두 개의 날짜를 비교하는 문제로 문자열을 연/월/일 로 끊어서
하나하나 비교할 수 있지만 계산해야하는 단위가 달라지기 때문에 (1달 = 28일, 1년 = 12달)
간단한 비교이지만 꽤 복잡한 로직이 될 수 있다.
따라서 이럴 때는 일단위 혹은 월단위 처럼 단위를 하나로 고정해서 계산하는 것이 좋을 수 있다.
위의 문제에서는 1달이 28일로 고정되어 있으므로 이를 이용해서 모두 일 단위로 바꿔서 진행한다.
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
using namespace std;
vector<int> solution(string today, vector<string> terms, vector<string> privacies) {
vector<int> answer;
int year_to_day = 12 * 28 * stoi(today.substr(0, 4));
int month_to_day = 28 * (stoi(today.substr(5, 2)) - 1);
int total_day = year_to_day + month_to_day + stoi(today.substr(8, 2));
map<char, int> term_value;
for (string term : terms)
{
stringstream ss(term);
char t;
int m;
ss >> t >> m;
term_value[term[0]] = m;
}
for (int i = 0; i < privacies.size(); i++)
{
int term_v = term_value[privacies[i].back()];
int privacy_year_to_day = 12 * 28 * stoi(privacies[i].substr(0, 4));
int privacy_month_to_day = 28 * (stoi(privacies[i].substr(5, 2)) - 1) + term_v * 28 - 1;
int privacy_total_day = privacy_year_to_day + privacy_month_to_day + stoi(privacies[i].substr(8, 2));
if (total_day > privacy_total_day)
answer.push_back(i + 1);
}
return answer;
}
(sstream 의 사용도 다시 익숙해지자!)
다루고자 하는 파일의 생명주기가 파드보다 짧다면 emptyDir 을 생성하여
임시 파일을 저장소로 활용할 수 있다.
예시로는 다운로드를 제공하는 경우로 애플리케이션이 요청한 사용자에게 파일의 전달이 끝나면
해당 파일은 파드 입장에서는 더 이상 쓸모가 없으므로 파드가 종료될 때 같이 사라져도 무방하다.
또는 파드 안에 여러 컨테이너가 있는 경우 서로 파일을 이용하여 데이터를 주고 받을 때
유용할 수 있따.
컨테이너를 통해 실행되는 애플리케이션이 저장하는 파일에 영속성을 주기 위해
Worker Node 에 저장하는 방식이다.
이 경우에는 hostPath 방식의 볼륨을 사용하고 이는 파드가 종료되어도 파일이 사라지지 않는다.
이때 문제점은 hostPath 로 지정할 시 노드의 루트나 시스템 파일에 접근이 가능해지는 경우를
조심해야하며 클러스터에 여러 개의 노드가 존재하는 경우 파드가 재시작 되면서 기존과는
다른 노드에 생성되는 경우 문제가 발생할 수 있다.
쿠버네티스에서 영속성을 가지기 위해서는 Persistent Volume 을 사용한다.
이때 사용되는 것은 NFS 드라이버나 클라우드 서비스의 블록 스토리지 (AWS EBS 등등) 가 있다.
그러나 정적 저장공간을 할당하는 것의 문제는 쿠버네티스가 가지는 특성에서 문제가 발생할 수 있다.
Persistent Volume 의 리소스를 생각해서 파드에게 할당을 해야하기 때문에
만약 Persistent Volume 가 모두 할당된 경우에는 새로운 볼륨이 파드에게 할당되지
않고 Pending 이 되는 문제가 발생할 수 있다.
쿠버네티스의 특징인 유연성에 맞게 파드의 볼륨에 대한 수요를 미리 예측하지 않고 동적 할당을 위해서는 StorageClass 를 활용한다.