새소식

인기 검색어

TL

21/01/12 TL. Introduction to Cloud Computing 4주차. 백준 10994

  • -

오늘 할 일

모각코

Introduction to Cloud Computing 4주차 수강 & 정리

알고리즘 문제 풀이

 


하이브리드 클라우드 : 온프레미스 프라이빗 클라우드 + 서드파티 퍼블릭 클라우드로 형성한 단일 인프라 컴퓨팅 환경
예를 들어 전자 메일을 공급자, CRM, 인프라로 나누어 다른 다른 클라우드 사용을 하고, 이를 혼용해 사용할 수 있다.

하이브리드 혹은 멀티 클라우드 사용 사례
꽃 배달 서비스의 1년 동안의 서비스를 시각화 하면, 시간마다(계절마다) 수익이 다를 것이다. 만약, 수익이 최고일 때(주문, 접속량이 최고일 때)를 기준으로 인프라를 확장한다면 초기 비용, 관리비가 높을 것이다.
아니라면, 클라우드 서비스를 이용해 워크로드에 응답해 규모를 확장하고, 필요하지 않을 때 리소스를 자동으로 프로비저닝 해제하는 방법을 사용할 수도 있다.

유럽에 서비스 기반을 둔 청구 API와 보상 프레임워크를 가진 웹 UI가 있다고 할 때, 유럽에서는 이 서비스가 만족되지만 미국에서는 추수감사절 같은 날에 시스템이 무너진다고 한다. 이 서비스는 여러 클라우드 환경에서 애플리케이션을 구성하여
하이브리드 클라우드 혹은 멀티 클라우드 아키텍처를 활용하기로 한다. 물론 미국의 데이터 센터를 이용한다. 그런데 보상 프레임워크가 유럽 측에 머물기를 원한다면, 청구 API와 UI기능만 북미 또는 미국의 데이터 센터로 선택한 클라우드 플랫폼으로 이동할 수 있다. 이를 통해 부분 개선해가면서 미국 공휴일에 대한 대비책을 마련할 수 있다.
이 예시에서 꽃 배달 서비스는 하이브리드 또는 멀티 클라우드 아키텍쳐를 사용하여 글로벌 수준으로 확장할 수 있다는 말이다.

AI, 현대화에도 적용되는데 하이브리드 멀티클라우드를 채택하면 특정 벤더의 클라우드 플랫폼에 종속되지 않도록 하고 필요에 따라 한 클라우드 플랫폼에서 다른 플랫폼으로 워크로드를 유연하게 움직일 수 있기 때문이다.

---------------------------------------------------------------------

마이크로 서비스 아키텍쳐
같은 팀 내에서 서로 다른 컴포넌트에 대해 다른 런타임 환경을 사용할 수 있다. 여러 개발자가 독립적으로 작업하므로 더 효율적으로 업데이트할 수 있다. 너무 많은 부하를 주는 애플리케이션은 독립적으로 확장해 전체를 확장할 필요가 없으므로 낭비와 비용을 줄일 수 있다.
예를 들어, 온라인 스포츠 스트리밍 미디어 서비스가 있다고 할 때, 그 서비스는 MSA를 사용한다고 하자. 이 프로그램을 만들 때, 처음부터 모든 코드 줄을 만들 필요가 없고, 검색, 추천, 고객 등급, 제품 카탈로그 등의 기능을 핵심 기능으로 분류해 독립적으로 개발되고, 클라우드 환경에서 함께 작동해 애플리케이션을 만든다.
컨테이너는 MSA에 대한 배포 방법으로 필요한 곳으로 코드를 전달한다. 컨테이너는 플러그 앤 플레이어라 하나의 MSA가 다른 애플레케이션에 대해 영향을 주지 않는 경우 다른 곳에 대한 영향을 생각할 필요 없이 다른 애플리케이션에 넣을 수 있다.
MSA1은 컨텐츠 카탈로그이다. 해당 개발자 팀은 컨텐츠를 설명하는 메타데이터로 컨텐츠를 구성한다. MSA2는 검색 기능이다. MSA3은 추천이다. 이 세 가지 MSA는 별도의 컨테이너에 있고, 애플리케이션을 형성한다. 그러나, 그 전에 서비스 검색을 통해 서로를 알아야 한다.
서비스 검색은 MS가 다른 MS가 서로 통신할 수 있는 로드맵을 만든다. MS가 서로를 찾으면, API를 사용하여 통신한다.(축구 팀을 검색해(MSA2) 카탈로그(MSA1)으로 넘겨준다.) 그리고 시청 기록, 선호, 지리적 지역 및 인구 통계학 등을 적용해 AI를 통한 추천(MSA3)을 해 좋아하는 팀의 최신 경기를 바로 찾아낸다.

MS 접근 방식은 개발자가 애플리케이션을 병렬로 빠르게 혁실할 수 있고, 사용자가 실제로 관심있는 것에 집중할 수 있도록 도움을 준다.

--------------------------------------------------------------------

서버리스
클라우드 공급자가 확장, 예약, 패치, 프로비저닝과 같은 일반적인 인프라 관리 작업에 대한 책임을 부담(서버를 사용하지 않는다는 것이 아님).
서버 프로비저닝, 애플리케이션 스택, SW설치, 인프라 관리 등의 운영이 필요 없고, 요청 당 주문형 코드만 실행하여 투명하게 확장된다(요청마다 새 인스턴스). 최종 사용자가 사용중인 리소스에 대해서만 비용을 지불하고, 유휴 용량에 대해서는 지불하지 않는다.

시나리오 예시 - 웹사이트의 프론트엔드와 스토리지 사이에서 서버리스 플랫폼을 구축해 개별 기능을 수행할 수 있다.
웹사이트의 텍스트 파일 -> 서버리스 앱 -> 앱에서 여러 언어로 번역 -> 클라우드 스토리지에 저장 -> 링크를 사용자에게 제공

IBM클라우드. AWS, MS Azure를 주로 사용.
서버리스가 모든 애플리케이션 시나리오에 적합한 것은 아니다. 따라서, 애플리케이션 특성을 평가하고 애플리케이션이 서버리스 아키텍쳐 패턴에 맞는지 확인해야 한다.
서버리스 아키텍쳐는 데이터, 이벤트 처리, IoT, MSA, 모바일 백엔드 등 자동 확장, 신속한 프로비저닝, 유휴 시간 동안 요금 부과 없음 등의 측면을 잘 고려해야 한다.
또, 데이터 보강, 변환, 유효성 검사, 정리, PDF 처리, 오디오 정규화와 같은 구조화된 텍스트, 이미지, 비디오, 오디오 데이터 작업에 적합하다. 
비즈니스 데이터스트림, IoT 센서 데이터, 로그 데이터, 금융 시장 데이터 등 모든 종류의 데이터 스트림(현재 말하는 듯)에 적합하다. 

서버리스의 과제
워크로드에 응답하여 확장, 축소하도록 설계되었지만 기존 서버 환경을 관리하는 장기 실행 프로세스가 더 간단하고 비용 효율적일 수 있다. 공급업체 종속성에 문제가 생길 수 있다. 워크로드에 따라 확장 및 축소되므로 0부터 시작해야 하는 경우가 있다.

-------------------------------------------------------------------

클라우드 네이티브 어플리케이션
클라우드 환경에서만 작동하거나 리팩토링되고 재구성된 앱을 말한다. 마이크로서비스로 구성되고, 자동화, 오케스트레이션 프로세스를 통해 각각을 독립적으로 확장하고 반복할 수 있다. 이러한 마이크로서비스는 컨테이너에 패키징되는 경우가 많다. 컨테이너는 어플리케이션 라이브러리가 코드에 종속되어 함께 패키징돼 어디서나 실행할 수 있다.
클라우드(안프라, 하이브리드 혹은 멀티클라우드) - 오케스트레이션(k8s, 스케줄링) - 데이터 서비스(애플리케이션, 서비스를 지원. 다른 클라우드나 온프레미스에서 사용할 수 있는 기존 서비스와 애플리케이션 코드를 통합할 수 있음.) - 어플리케이션 런타임(미들웨어) - 어플리케이션 코드
클라우드 네이티브 앱을 사용하면서 핵심 서비스의 밑 계층의 부담이 적어지고 있음. 또한 msa식으로 수행하면서 개발자 친화적이다. 따라서 대규모 엔터프라이즈, 엔지니어링에 효율적이다.

-------------------------------------------------------------------

DevOps
개발 팀 : 가능한 안정적이고 효율적으로 SW를 설계, 개발, 제공, 실행해야 한다.
운영 팀 : 모니터링, 장애 예측, 환경 관리, 문제 해결을 통해 가능한 빨리 문제를 식별하고 해결해야 한다.
개발 및 운영의 병목 현상을 모니터링 및 분석, 최적화하는 기능을 결합한다. 소유자와 개발, 운영 및 품질 보증 팀이 협력하여 SW를 지속적으로 제공하는 협업 방법을 말한다.
짧은 주기로 SW를 신속하게 업데이트하고 피드백을 반영할 수 있다.
지속적인 제공 : SW를 고객에게 제공
지속적인 통합 : 코드 변경 사항에 대해 업그레이드 된 버전으로 대체되도록 패키지 빌드룰 만든다.
지속적인 배포 : 배포 수명 주기 동안 가능한 빨리 새로운 패키지 빌드를 진행
지속적인 모니터링 : 애플리케이션을 프로덕션 환경에 배포하기 전에도 애플리케이션의 성능, 가용성을 이해하는 데 도움이 되는 도구를 제공하는
파이프라인 : 아이디어, 코딩, 건물, 배포, 관리 및 지속적인 개선 단계를 포함하는 자동화된 프로세스.
를 포함해야한다. 클라우드는 무한한 컴퓨팅 파워를 가진 플랫폼이지만, 자체적인 위험과 과제를 안고 있는데, DevOps의 도구는 그러한 위험들 중 일부를 해결하고 솔루션을 빠르고 안정적으로 제공할 수 있도록 지원하므로 둘은 공생관계이다.

DevOps와 Cloud
1. 서버 프로비저닝, 미들웨어 구축, 애플리케이션 코드 설치 등을 자동화한다.
2. DevOps의 지속적인 통합과 배포는 자동화된 배포 파이프라인을 만드는 데 도움이 된다.
3. DevOps 원칙은 사람들이 어떻게 작업하고 협업할지에 필수적이다.
4. 저비용 운영방식의 테스트 환경에서 테스트할 수 있어 생산성과 품질을 향상시킬 수 있다. 
5. 시스템 손상 시 안정적으로 재구축할 수 있다.

------------------------------------------------------------------

애플리케이션 현대화
아키텍처 : 모놀리딕 -> SOA(service-oriented architecture) -> MSA
인프라 : 물리 서버 -> VM -> 클라우드
전달 : waterfall -> agile -> DevOps

MSA를 채택하면서 SOA에서 보았던 무거운 XML 기반 통신에서 벗어났다. 그리고 독립적이여야 한다는 점에서 클라우드와 잘 맞는다. 동적으로 확장할 수 있다는 측면에서 유리하다.
또, DevOps는 속도와 탄력성 측면에서 클라우드를 채택하는 것이 좋다. 민첩하게 대응하고 애플리케이션을 더 잘 연결해야 쉽게 모니터하고 탄력적으로 사용할 수 있다.


백준 10994

 

내 코드

import sys


def run():
    result = stars(int(sys.stdin.readline()))
    for i in result:
        print(i)


def stars(num):
    if num == 1:
        return "*"
    else:
        s = stars(num-1)
        st = "****" + "*" * len(s[0])
        sp = "* " + " " * len(s[0]) + " *"
        s2 = list()
        for i in range(len(s[0])):
            s2.append("* " + s[i] + " *")
        s2.insert(0, sp)
        s2.insert(0, st)
        s2.append(sp)
        s2.append(st)
        return s2


if __name__ == "__main__":
    run()

 

다른 사람 코드

 

num = int(input())
print('*'*(1+(num-1)*4))
for i in range(1, 2*num-1):
    if i % 2:
        print('* '*((i+1)//2) + ' '*(1+(num-1)*4-(i+1)//2*4) + ' *'*((i+1)//2))
    else:
        print('* '*((i+1)//2) + '*'*(1+(num-1)*4-(i+1)//2*4) + ' *'*((i+1)//2))
for i in range(2*num-3, 0, -1):
    if i % 2:
        print('* '*((i+1)//2) + ' '*(1+(num-1)*4-(i+1)//2*4) + ' *'*((i+1)//2))
    else:
        print('* '*((i+1)//2) + '*'*(1+(num-1)*4-(i+1)//2*4) + ' *'*((i+1)//2))
if num != 1:
    print('*'*(1+(num-1)*4))

 

재귀와 반복의 차이인데, 이 사람은 반복으로 풀었으니 당연히 성능이 더 좋게 나왔다. 기본적인 접근 방법은 유사한 것 같다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.