20/12/29 TL. 백준 16507, Introduction to Cloud Computing 1주차
-
오늘 할 일
인프라 엔지니어 교과서 - 3장(운영체제), 4장(네트워크), 5장(스토리지)
모각코 -> Introduction to Cloud Computing 1주차
내일 할 일
인프라 엔지니어 교과서
Introduction to Cloud Computing 2주차
매일 할 일
백준 알고리즘 검토, 문제 풀이
영어 쉐도잉
5 essential characteristics 1. On-demand self-service 각 서비스 공급자와의 상호 작용 없이 간단한 인터페이스를 사용하여 필요한 처리 능력, 스토리지 및 네트워크와 같은 클라우드 리소스에 액세스할 수 있음. 2. Broad network access 휴대폰, 태블릿 등 표준 메커니즘과 플랫폼이 관계해 네트워크를 통해 클라우드 컴퓨팅 리소스에 액세스할 수 있다. 3. Resource Pooling 클라우드 제공자가 고객에게 동적으로 요금을 청구한하여 비용 효율적이다. 4. Rapid Elastical 자원이 탄력적으로 제공, 배포할 때 더 많이 액세스하고, 사용하지 않을 땐 축소할 수 있다. 5. Essential Characterustics 사용한 만큼만 지불하거나, 사용한 만큼 예약한다.
3 deployment models 1. public : 클라우드 공급자가 가지는 HW를 인터넷으로 접근하지만, 사용은 다른 회사들에서 한다. 2. private : 한 조직에서 독점적으로 사용할 수 있도록 클라우드 인프라를 제공한다. (On-Premise에서 실행되거나, 클라우드 공급자가 소유, 관리 운영 가능) 3. hybrid : public과 private 클라우드를 혼합
3 service models 1. 소프트웨어 (SaaS) : On-demand 소프트웨어 2. 플랫폼 (PaaS) : HW 및 SW 도구에 액세스 가능 3. 인프라 (IaaS) : 물리 공간에 액세스
클라우드 컴퓨팅의 발전과정 1950년대 메인프레임의 활용(time sharing, resource pooling)이 사용되며, 여러 사용자가 모든 터미널에서 동일한 데이터 스토리지 계층과 CPU 전원에 액세스 가능해졌다. 1970년대에는 VM의 사용으로, 메인프레임이 1개의 물리적 노드에 여러 가상 머신을 가질 수 있게 됐다. 이는 공유 액세스 애플리케이션을 발전시켰다. HW는 비싸므로, 인터넷이 발전하면서 가상 머신이 제공하는 공통 타입으로 서버를 공유 호스팅 환경, 가상 사설 서버 및 가상 전용 서버로 가상화했다. 이는 하이퍼바이저에 의해 활성화됐는데, 하이퍼바이저는 가상 컴퓨터를 논리적으로 분리해서 가상 시스템이 서로 간섭하는 걸 방지한다. 이를 기반으로 클라우드가 발전했다.
클라우드 컴퓨팅에 대한 핵심 고려사항 1. 인프라, 워크로드 인프라를 구축하는 것은 비쌀 수 있다. 모든 워크로드가 클라우드에 준비돼있는 건 아니다. 2. SaaS 및 개발 플랫폼 어플리케이션 액세스 비용 vs 상용 SW 구입 비용 3. 속도, 생산성 4. 위험성
클라우드 인프라는 On-demand 방식으로 확장되어 변화하는 워크로드를 지원하고, as-a-Service 옵션으로 원하는 옵션을 구축할 수 있다. 가상 개인 클라우드, 암호화 및 API 키를 통해 보안도 챙길 수 있고, 거의 모든 인터넷 연결 장치에서 액세스할 수 있으므로 효율성도 좋다. HW 장애로 데이터 손실도 없고, 관리도 따로 해준다. 이처럼 클라우드에는 많은 장점이 있다.
ex) American Airlines는 모노리딕 코드를 기반으로 클라우드 네이티브 기반 MSA로 고객 대상 어플리케이션의 개발 및 출시 속도를 높였다. ex) UBANK는 Paas 클라우드 개발 모델을 연구했는데, IBM Watson을 통합하여 개발 간소화와 제품 개발 팀의 역량을 높였다. ex) Bitly는 25억개의 URL 데이터를 클라우드 인프라로 이전해 리소스를 신제품 개발에 집중할 수 있게 했다. ex) ActivTrades는 세 가지 주요 거래 시스템을 On-Premise infra에서 VMware용 IBM cloud로 전이하여, 최대 3배의 성능 향상을 얻었다.
IoT는 엄청난 양의 데이터를 수집하고 AI는 해당 데이터를 통해 데이터를 통합 분석하여 클라우드의 확장성과 처리 능력을 활용하여 사용자에게 제공한다. 블록체인은 신뢰성 있고 분산 된 소스를 제공하고, AI는 데이터를 통해 분석 및 의사결정 하여 클라우드를 통해 분산, 확장하여 처리 능력을 제공한다.
백준 16507번 - 내 풀이
import sys
def run():
inp = sys.stdin.readline().split()
row_size, column_size, target = [int(x) for x in inp]
# src 만들기
src = list()
for _ in range(row_size):
token = sys.stdin.readline().split()
src.append([int(i) for i in token])
# integral image (prefix sum)
integral = [[0 for col in range(column_size)] for row in range(row_size)]
for r in range(row_size):
sum_tmp = 0
for c in range(column_size):
sum_tmp += src[r][c]
integral[r][c] = integral[r-1][c] + sum_tmp
for _ in range(target):
tar = sys.stdin.readline().split()
# 1,1부터 세므로 1을 빼서 넣는다.
r1, c1, r2, c2 = [int(x) - 1 for x in tar]
A, B, C, D = integral[r1-1][c1-1], integral[r1-1][c2], integral[r2][c1-1], integral[r2][c2]
if r1 == 0:
A, B = 0, 0
if c1 == 0:
A, C = 0, 0
val_sum = A + D - B - C
val_num = (r2 - r1 + 1) * (c2 - c1 + 1)
output = val_sum // val_num
print(output)
if __name__ == '__main__':
run()
누적합을 이용해야한단 걸 몰라서 계속 시간 초과가 나다가, 누적합으로 접근해보라는 조언을 들었다. 생각해 보니 input 형태가 컴퓨터 그래픽스 수업 시간 때 배운 integral image를 이용할 수 있겠다는 생각이 들어서 이용해 보았다. 기말고사 때 그 문제를 틀렸기 때문에 다시 한 번 더 보아야겠다는 생각도 어느정도 들었다.
일반 누적합보다 더 좋은 성능을 보였는데, 성능을 굳이 올리고 싶은 사람이 아니라면, 추천하고 싶은 방법은 아니라는 생각이 든다. 다른 사람의 코드 분석은 늦었으므로 내일 하려고 한다...