728x90
함수 선언과 호출

강의 링크 : https://www.edwith.org/boostcourse-mo-kotlin-basic1/joinLectures/28611

함수 선언과 호출

fun sum(a:Int, b:Int): Int{ var sum = a+b return sum }
  • fun 키워드로 함수 선언
    • 매개변수 (이름 : type) 선언
    • 함수의 반환 타입 결정 (fun _ : type)
    • 반환 필요 시 return
  • 함수의 간략화된 선언 - 바로 return하는 경우
fun sum(a:Int, b:Int) : Int = a+b //매개변수를 통해 return 추론이 가능한 경우 return 자료형도 생략 가능 fun sum(a:Int, b:Int) = a+b
  • 매개변수의 기본값 : 인자가 전달되지 않을 때 기본으로 사용할 값 설정 가능
fun email(ID : String, domain : String = "naver.com") { println("your email is ${ID}@${domain}") } fun main(){ email("Kildong") //your email is Kildong@naver.com email("Kildong", "Gmail.com") //your email is Kildong@Gmail.com }
  • 반환값이 없는 함수 : Unit return
fun out(name : String) : Unit { println("name : ${name}") return Unit //return Unit은 아무것도 반환하지 않음(생략 가능) } fun outp(name : String) : Unit = println("name : ${name}") //위 함수와 동일하게 동작
  • 함수 매개변수 지정
    • 기본값이 있는 매개변수의 경우 지정하여 대입 가능
fun sum(a : Int = 1, b : Int = 2) = a+b fun main() { println("1+2 = ${sum()}") //1+2 = 3 println("1+4 = ${sum(b = 4)}") //1+4 = 5 println("3+2 = ${sum(a = 3)}") //3+2 = 5 }
  • 가변인자 : vararg 키워드로 여러 개의 인수를 받을 수 있음
    • for문을 이용하여 함수에서 처리 가능
fun varprint(vararg a : Int) { for (n in a) { println("number is ${n}") } println("===========================") } fun main() { varprint(1) varprint(1,2) varprint(1,2,3,4,5,6,7,8,9) } /*출력결과 number is 1 =========================== number is 1 number is 2 =========================== number is 1 number is 2 number is 3 number is 4 number is 5 number is 6 number is 7 number is 8 number is 9 =========================== */

함수형 프로그래밍 패러다임 (1)

  • 코틀린은 멀티 패러다임 언어 : 함수형 / 객체지향
  • 함수형 프로그래밍
    • 단순한 코드 지향
    • 코드의 테스트나 재사용성 증가
    • 람다식, 고차함수 활용 : 함수의 인자에 함수를 대입 가능
    • 순수 함수 제공
  • 순수 함수
    • 부작용이 없는 함수 : 동일 입력 - 동일 출력
    • 값의 예측이 가능
    • 함수 외부의 상태를 바꾸지 않음 : 함수에 없는 외부 객체가 사용되는 경우(함수 리턴값을 대입하는 등)
    • 람다식, 고차함수 사용을 위해 필요한 개념
    • 입력 - 내용을 분리하여 재사용성이 높음
    • 병행 작업 시 안전
    • 테스트, 디버깅 시 유리
  • 람다식
    • 익명 함수의 일종으로 이름 선언 없이 사용 가능
    • {x, y -> x+y}
    • 고차 함수에 인자로 넘기거나 결과값으로 사용할 수 있음
  • 일급 객체(First Class Citizen)
    • 함수의 인자, 반환값으로 쓰일 수 있음
    • 변수에 대입할 수 있음
    • 코틀린의 함수는 일급 객체로 다룸
  • 고차 함수
    • 함수 인자가 함수가 되는 것
fun highFunc(sum : (Int, Int) -> Int, a : Int, b : Int) : Int { //첫 번째 매개변수 : sum이라는 람다식 변수는 Int 2개를 받아 Int를 반환 return sum(a, b) } fun main() { println(highFunc({x, y -> x + y}, 10, 20)) }

함수형 프로그래밍 패러다임 (2)

  • 고차함수의 호출 방법 : 값에 의한 호출, 이름에 의한 호출, 참조에 의한 호출
  • 값에 의한 호출 : 함수 인자는 값으로 처리되어 수행된 값을 전달
fun main() { val result = callByValue(lambda()) // 람다식 함수를 호출 println(result) } fun callByValue(b: Boolean): Boolean { // 일반 변수 자료형으로 선언된 매개변수 println("callByValue function") return b } val lambda: () -> Boolean = { // 람다 표현식이 두 줄이다 println("lambda function") true // 마지막 표현식 문장의 결과가 반환 }
  • 이름에 의한 호출 : 함수 이름을 매개변수로 전달하여, 함수가 사용될 때 실행
fun main() { val result = callByName(otherLambda) // 람다식 이름으로 호출 println(result) } fun callByName(b: () -> Boolean): Boolean { // 람다식 함수 자료형으로 선언된 매개변수 println("callByName function") return b() } val otherLambda: () -> Boolean = { println("otherLambda function") true }
  • 참조에 의한 호출 : 콜론 기호(::)를 이용한 호출
fun main() { // 1. 인자와 반환값이 있는 함수 val res1 = funcParam(3, 2, ::sum) println(res1) // 2. 인자가 없는 함수 hello(::text) // 반환값이 없음 // 3. 일반 변수에 값처럼 할당 val likeLambda = ::sum println(likeLambda(6,6)) } fun sum(a: Int, b: Int) = a + b fun text(a: String, b: String) = "Hi! $a $b" fun funcParam(a: Int, b: Int, c: (Int, Int) -> Int): Int { return c(a, b) } fun hello(body: (String, String) -> String): Unit { println(body("Hello", "World")) }

익명함수, 인라인 함수

  • 익명 함수 : 이름이 없는 함수
    • 람다식 함수를 위한 임시 함수로 사용
    • 람다식에서 쓰기 어려운 return, break continue 등을 사용하기 위함
fun (x:Int, y:Int) : Int = x+y val add : (Int, Int) -> Int = fun(x,y) = x+y val add = fun(x : Int, y:Int) = x+y // 람다식과 유사한 형태
  • 인라인 함수 : 함수가 호출되는 곳에 함수 내용을 복사
    • 함수 호출 시 코드가 분기하는데, 이 부분이 없어지므로 성능이 증가
    • 과도한 호출 시 main 함수 자체의 크기가 커질 수 있음
inline fun foo(...) { ... } fun main(){ foo() // foo 내용이 복사 }

인라인 함수의 제한

  • 코드가 복사되므로 내용이 많은 인라인 함수는 파일 크기를 증가시킬 수 있음
  • noinline : 람다식 함수는 인라인 되지 않도록 할 수 있음
inline fun foo(bar1 : () -> Unit, noinline bar2 : () -> Unit) { ... //bar1 람다식은 인라인 복사되지만, bar2는 인라인 x }
  • 확장 함수
    • 클래스의 멤버 함수를 외부에서 추가할 수 있음
    • 동일한 멤버나 메소드 존재 시 기존의 함수가 우선하여 호출됨

중위 함수, 재귀 함수

  • 중위 함수
    • 클래스 멤버 호출 시 점을 생략하고, 함수 이름 뒤의 소괄호를 생략
    • 조건
      • 멤버의 메소드 혹은 확장 함수
      • 매개변수가 존재
      • infix 키워드로 정의
infix fun Int.multiply(x:Int) : Int { return this * x } fun main { // 기존 표현법 : val multi = 3.multiply(10) val multi = 3 multiply 10 // 30 }
  • 재귀 함수
    • 자기 자신을 다시 호출
    • 필수 조건
      • 탈출 조건을 만들어야 함(무한루프 방지)
      • 호출 회수에 제한(함수 호출은 스택을 이용하므로)
    • 꼬리 재쉬 함수
      • 함수 분기 없이 재귀 호출 시 함수 영역을덮어씌우면서 호출 (스택 영역을 사용하지 않음)
      • 무한히 호출하더라도 stack overflow가 없음
      • tailrec 키워드로 선언
// 팩토리얼 함수 fun factorial(n:Int): Long { return if(n == 1) n.toLong() else n*factorial(n-1) } //꼬리재귀 팩토리얼 tailrec fun factorial(n : Int, run : Int = 1) : Long { return if(n ==1) run.toLong() else factorial(n-1, run * n) }
pn
728x90
728x90
코틀린의 특징

강의 링크 : https://www.edwith.org/boostcourse-mo-kotlin-basic1/joinLectures/28611

코틀린의 특징

  • 안드로이드의 주 개발 언어인 JAVA가 갖는 한계성을 보완 (애플이 Obj-C에서 Swift로 넘어간 것과 같은 맥락)
  • 목표
    • 웹, 어플(Android/IOS), 임베디드, IoT 등 모든 개발을 다양한 플랫폼에서 개발하고자 함
  • 특징
    • Jetbrain에서 개발 / 보급
    • 간결한 코드, 높은 호환성
    • 세미콜론은 선택
    • 안드로이드 공식 언어
    • 변후는 Nullable (?로 선언) / Not Null로 구분 가능 : Java의 NullpointerException을 방지
  • 플랫폼
    • JVM : 자바 가상 머신에서 동작하는 어플 (JAVA와 호환 가능)
    • JS : 자바스크립트에 의해 동작하는 웹앱
    • Native : LLVM 기반(ARM, x86 등) 컴파일을 지원
      • IOS / Mac / Android / Windows / Linux / WebAssembly 등등
  • 장점
    • 자료형 오류를 미리 잡을 수 있는 정적 언어(statically typed) : 컴파일러가 변수 타입을 미리 검증
    • 널 포인터로 인한 중단 예방 - NullpointerException(NPE)에서 자유로움
    • 자바와 100% 호환 : JVM 상에서 동작 가능
    • 함수형 / 객체지향 모두 가능
    • 세미콜론 생략 가능

기본 자료형과 변수 선언 (1) 불변형, 기본형

  • 자료형
    • 정수형 Int (1)
    • 문자열 String ("1")
    • 실수형 Float (1.00)
    • 그 외 (Double 등)
  • 변수
    • 불변형 val : 선언 후 값 수정 불가
    • 가변형 var : 수정 가능
    • 변수명은 숫자로 시작할 수 없고, 코틀린 키워드(while, if 등)으로는 선언 불가
val username : String = "kildong" //키워드 불변 / 이름 username : 자료형 문자열 / 값 "kildong" // 자료형은 대문자로 시작함에 유의
  • 변수 타입 지정을 해주지 않아도 컴파일러가 타입을 추론해줌
    • Ctrl+Shift+P를 누르면 추론된 타입 확인 가능
    • 자료형 추론을 하고자 하는 경우 초기값을 반드시 선언해주어야 함
var number = 10 //자료형 추론을 위해서는 초기값을 주거나 var number : Int //초기값이 없는 경우 자료형을 줘야 함
  • 카멜 표기법
    • 긴 이름의 변수를 선언하는 규칙 중 하나
    • 일반 변수, 함수명은 단어가 변경될 때 대문자로 시작 (카멜 표기법)
    • 클래스의 경우 대문자로 시작 (파스칼 표기법)
val camelCase var numberOfBooks //변수 선언 - Camel Expr Class AnimalCategory (){} Class CarEngine (){} //클래스 선언 - Pascal Expr

기본 자료형과 변수 선언방법 (2) 정수형과 실수형

  • 정수형 변수
    • Long : 8바이트
    • Int : 4바이트
    • Short : 2바이트 (-32768 ~ 32767)
    • Byte : 1바이트 (-128 ~ 127)
    • 부호 없는 정수형 : 앞에 U를 붙임 (0부터 2n2^n값까지)
  • 정수형 추론
    • 자료형 생략 시 Long 외에는 Int로 추론됨
    • 접미사 L : Long으로 추론 (ex. 123L)
    • 접두사 0x : 16진법 Int (ex.0x0F)
    • 접두사 0b : 2진 Int (ex.0b001100)
    • 접미사 u(uL) : unsigned int(Long) (ex. 123u, 123uL)
    • 가독성 : 언더스코어로 큰 수를 읽기 쉽게 표현 (ex. 123_456_789)
  • 실수형 변수
    • Double : 8바이트
    • Float : 4바이트
  • 실수형 추론
    • 기본은 Double로 추론
    • 접미사 F : Float로 추론됨 (ex. 3.14F)
  • 실수형 변수는 부동 소수점 표현
    • bit 일부는 기수를 일부는 지수 표현에 사용됨
    • 이로 인해 정확한 숫자 표현은 불가능 / 약간의 오차 존재

기본 자료형과 변수 선언방법 (3) 크기 범위와 기타 자료형

  • 자료형의 음수 표현 (2의 보수)
    • 2의 보수 : 이진수 값을 뒤집고 +1
      • ex. -6 : 0000 0110(2) >> 1111 1001(2) (뒤집기)>> 1111 1010(2) (+1)
    • 제일 왼쪽 비트(가장 큰 자리수)가 부호 비트 역할
  • 기타 자료형
    • 논리형 Boolean : 1bit로 true / false로 구분
    • 문자형 Char : 2바이트 유니코드 표현(\u0000 ~ \uffff)
  • String Pool
var str1 : String = "hello" var str2 = "hello" //str1 == str2는 true 반환 //문자열은 string pool에 저장되어 처리
  • $ 표현식
    • 문자열 내에 $기호 사용 시 변수 출력 가능
var a = 1 val s1 = "a is $a" // a is 1 val s2 = "a+1 is ${a+1}" //a+1 is 2

Null 타입

  • 코틀린 변수는 기본적으로 Null 허용 x
    • 선언한 변수는 반드시 값이 할당되어야 함
  • Nullable 선언 : ? 사용
val a : Int? = null val b : String? = null
  • null 변수를 연산시 오류 발생
    • null 연산 시도 시 컴파일 오류 발생
    • 메소드(.) 자리에 safe call(?. - null이면 연산 x)
    • assert call(!!.) : null이 아니라고 가정(컴파일러의 오류처리 무시) - null 접근시 NPE(NullPointException) 발생
    • 엘비스(elvis) 연산자 (?:) : 연산 오류 발생시 대입할 값 지정
val str1 : String? ... //str1의 대입 여부는 모른다고 가정 val len = str1?.length ?: -1 //val len = if(st1!=null) str1.length else -1

비교와 캐스팅

  • 자료형 변환 시 메소드 이용
val a : Int = 1 val b : Double = a.toDouble()
  • 변환 메소드의 종류
    • toByte
    • toLong
    • toShort
    • toFloat
    • toInt
    • toDouble
    • toChar
  • 이중 / 삼중 등호
    • 이중 등호(==) : 값 비교
    • 삼중 등호(===) : 참조 주소 비교 (nullable / not nullable 변수는 같은 값이어도 다른 주소로 할당)
  • 스마트 캐스트
    • 명시되지 않은 자료형을 자동변환
    • Number형 : 대입되는 숫자에 맞는 자료형으로 자동 캐스팅
    • Any형 : 자료형이 정해지지 않은 경우
      • 모든 자료형 클래스의 root 역할
      • 필요한 자료형으로 자동 변환
var test : Number = 12.2 //float test = 12 //int로 smartcast tset = 12L //long으로 smartcast test += 12.0 //다시 float로 smartcast

비트 연산자

  • 비트 메소드
    • shl(bits) : bits만큼 왼쪽으로 shift
    • shr(bits) : bits만큼 오른쪽으로 shift
    • ushr(bits) : bits만큼 오른쪽 shift(부호 변화 x)
    • and(bits) : bits와 and연산
    • or(bits) : bits와 or연산
    • xor(bits) : bits와 xor연산
    • inv() : bit 뒤집기
728x90
728x90
VSCode에 C언어 개발 환경 설정하기

VSCode에 C언어 개발 환경 설정하기

  • VSCode에 C/C++ 개발 환경 설정한다고 한참을 해멨는데, 결국 공식 가이드가 답이었다...
  • MINGW 말고, MINGW-W64를 설치하는게 답이었다. 하나씩 진행해보자!

VSCode 설치하기

  • 이 링크로 들어가서 설치한다. https://code.visualstudio.com/download
  • C/C++ Extension을 설치한다.
    • 위 검색창에 C를 누르면 이미지에 보이는 C/C++을 설치하면 된다.

MINGW 설치하기

  • 해당 링크로 들어가 MINGW를 설치한다 - https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win32/Personal Builds/mingw-builds/installer/mingw-w64-install.exe/download
  • 설치 중간에 설정 부분에서 Architecturex86_64를 선택하고, 그 외에는 계속 진행한다.
  • 설치 후, 설치된 폴더를 환경 변수에 추가한다.
    • 파일 관리자에서 내 PC 우클릭 - 속성 - 고급 시스템 설정 - 환경 변수를 클릭한다.
    • 시스템 변수에서 Path를 찾아 편집을 누른다.
    • (mingw 설치 경로)\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin까지 복사한 후, 환경 변수에 추가해 준다.
  • cmd를 켜서 g++ --version, gcc --version의 결과가 다음과 같으면 성공이다.

빌드 환경 만들기

  • 일단 코드를 작성한다.
// hello.c #include <stdio.h> int main(void) { printf("hello, world!\n"); return 0; }
  • VScode에서 Terminal > Configure Default Build Task로 이동한다. 이때 C파일의 경우 gcc.exe를, Cpp는 g++.exe 를 선택한다.
{ "version": "2.0.0", "tasks": [ { "type": "shell", "label": "C/C++: g++.exe build active file", "command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe", "args": ["-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe"], "options": { "cwd": "${workspaceFolder}" }, "problemMatcher": ["$gcc"], "group": { "kind": "build", "isDefault": true } } ] }
  • 만약 mingw의 설치 폴더가 다르다면 위 command를 설치 폴더로 수정한다.
  • 이제 ctrl+shift+B를 누르면 C/Cpp 파일이 exe로 빌드된다.

디버깅 설정하기

  • 이번엔 디버깅이다. Run > Add Configuration...을 눌러 GDB를 선택한다.
  • 이후 F5를 누르면 디버깅이 가능하다.
728x90
728x90
Hybrid Multicloud

Hybrid Multicloud

  • Hybrid Cloud : private / public cloud를 하나의 인프라로 설정
  • 멀티클라우드 : 클라우드 전략 중 하나로, 서로 다른 클라우드 모델을 혼합한 것
    • Public / Private, IaaS/PaaS/SaaS를 조합
    • Cloud A - email / Cloud B - CRM / Cloud C(Private) - Infrastructue
    • 서로 다른 공급자를 이용할 수 있음
  • Using case
    • 한 서비스가 UI / API / Billing으로 구성된 multicloud로 가정
    • 만약 특정 region에서 수요가 peak를 찍을 경우, 해당 region의 UI / Billing 부분의 Cloud service를 확장시켜 대응 가능
  • 특정 클라우드에 모든 작업이 몰리는 것을 방지하기 위해 multicloud를 사용하기도 함

Microservices

  • 특정 어플리케이션을 작은 구성 요소, 혹은 서비스 단위로 분할하여 제공하는 것
  • 각각의 컨테이너에서 동작하는 stack을 보유
  • API, Event, Message를 통해 데이터 교환
  • Business에서의 의미
    • 다수의 개발자가 독립적으로 개발 가능
    • 다른 구성 요소에 대해 다른 stack으로 개발 가능
    • 각 구성 요소에 대해 독립적인 scaling 가능
  • SW의 개발 발전
    • 초기 : 단일 프로그램을 함께 개발
    • 중기 : PaaS를 통한 통합 개발 환경
    • 최근 : 서비스를 독립된 구성 요소(검색, 추천, 별점 등)로 분할하여 개발
      • 하나의 microservice에 이상 발생 시 다른 서비스로 대체 가능

Serverless Computing

  • Infrastructure에서 Scaling, Scheduling, Patching 등의 관리에 필요한 노력을 경감
  • 어플리케이션의 필요에 따라 자원 할당
  • 필요에 따라 코드를 동작하며 필요에 따라 Scaling
    • request된 정도에 따라서 비용 지불
  • 인프라를 추상화하고, 각 기능별로 코드가 실행
  • 모든 서비스에 대해 서버리스가 유용하지느 않음
    • 어플리케이션의 특징을 분석
    • 어플리케이션이 서버리스 패턴에 적합한지 확인
      • 단시간 구동되거나, 특정 기간에만 동작하는 경우
      • 이벤트 기반의 처리를 하는 경우
      • stateless microservice
  • Using Case
    • IoT, 모바일 백엔드, 마이크로서비스
    • 각종 데이터에 대해서 - 평가, 번역, 데이터 검증, PDF 처리, 정규화, 이미지 썸네일 등

Cloud Native Applications

  • 오직 클라우드 환경 내에서만 동작하기 위한 어플리케이션
    • 혹은 클라우드 특성에 맞게 재구성된 어플리케이션
  • 어플리케이션을 구성하는 마이크로서비스로 구성
    • 각 서비스는 독립적으로 scale됨
    • 각 미이크로서비스는 실행 단위인 Container로 package됨
  • Cloud Native Applications 개발 특징
    • Microservice architectrue : 어플리케이션을 기능 단위로 분리
    • rely on container : 유연성, scailability, portability 최대화
    • Agile Method : 유저 피드백에 기반한 빠른 업데이트

DevOps on the Cloud

  • 개발팀의 목표
    • 소프트웨어 설계, 개발, 전송, 실행
    • 신뢰성, 효율성 중시
  • 운영팀의 목표
    • 모니터링, 실패 예측, 환경 관리, 이슈 수정
  • DepOps = Develop + Operation
    • 개발, 운영, QA 담당이 하나의 팀으로 협업하는 것
    • 빠른 사용자 피드백 사이클을 통해 생산성 증가
  • DevOps process
    • Continuous delivery : 소규모로, 잘 설계된, 고품질의 소프트웨어
    • Continuous Integration : 코드 수정을 Immutable한 이미지로 배포 - 만약 수정이 필요할 경우 해당 구성 요소 전체가 수정
    • Continuous Deployment : 라이프사이클은 가능한 한 빠르게
    • Continuous Monitoring : deploy 이전까지 어플리케이션의 가용성 등을 모니터
  • 클라우드에서의 DevOps
    • Provision, installation, documentation의 과정을 자동화
    • Continuous Integration & Deployment
    • Define how to collaborate
    • low cost test
    • recover from diseasters quickly

Application Modernization

  • 레거시 시스템의 문제점 : 업데이트가 어려움, 유지 보수 비용이 높음
  • Application Modernization : 새로운 서비스 적용이 쉽고, 변화에 빠르게 응답할 수 있음
  • Application Modernization의 과정
    • Architecture
      • 과거 : 단일 구조로 개발
      • 현재 : 서비스 지향 - 프론트엔드 / 백엔드 등
      • 최근 : 마이크로서비스 - 매우 작은 단위로 프로그램 분할
    • Infrastructure
      • 과거 : 물리적 서버 사용
      • 현재 : 가상 머신
      • 최근 : 클라우드
    • Delivery
      • 과거 : 폭포형 - 장기적으로 계획, 개발, 테스트 순으로 진행
      • 현재 : Agile 방법론
      • 최근 : DevOps
728x90
728x90
Basics of Cloud Storage

Basics of Cloud Storage

  • 클라우드 저장소 : 클라우드 상에 데이터와 파일을 저장
    • 컴퓨팅 노드를 통해 접근하거나, 인터넷을 통해 직접적으로 접근할 수도 있음
  • 클라우드 저장소의 종류
    • Direct Attached(Local Storage)
      • 서버 랙에 호스트와 함께 할당
      • 서버 OS를 위해 사용
      • 연산을 위한 '임시' 저장소 역할이므로 클라우드 저장소로는 부적합
    • File Storage(NFS storage)
      • 네트워크를 통해 연산 노드와 연결
      • direct-attach 대비 느린 속도
      • direct / block 저장소 대비 낮은 가격
      • 다수의 서버에 동시에 연결 가능
      • 데스크톱 유저에게 익숙한 구조
    • Block Storage
      • R/W 속도가 빠르고, 높은 신뢰성을 갖기 때문에 DB나 빠른 속도가 중요한 어플리케이션에 유용
      • Volume : Block storage의 처리 단위로 연산 노드에 연결되는 최소 단위 - HDD와 유사하게 동작
      • 한번에 연산 노드와 볼륨은 1:1로만 연결 가능
      • IOPS (Input/Output Operations Per Second) : 저장소의 속도
      • Persistent : 연산 노드가 사라져도 Volume은 남아있는 상태
        • 이후 Volume이 사라질 경우, 데이터가 손실될 수 있음
        • snapshot을 통해 데이터를 백업
    • Object Storage
      • API를 통해 접근
      • 가장 저렴하지만, 가장 느림
      • 용량 제한이 없음
      • 구조화되지 않은 데이터를 저장할 때 좋음

File Storage

  • 접근 및 저장 전에 연산 노드와 연결되어야 함
  • Direct attach 대비 저렴하고, 신뢰성이 높으며 사용자가 관리할 필요가 적어지며, 서버 디스크보다 많은 용량을 할당 가능
  • 실제 디스크를 일정 단위로 분리 후 할당
  • File Storage는 인터넷을 통해 연결
    • Network Attached Storage = Network File Storage(NFS)
    • 트래픽에 따라 속도가 변화하므로 일정 속도를 보장하지 못할 수 있음
  • File Storage는 하나 이상의 연산 노드와 연결될 수 있음
    • 파일 공유, 입력되는 파일 저장(Landing Zone) 등 속도 영향을 덜 받는 경우 사용
  • IOPS
    • 초당 I/O 동작의 수 (네트워크 속도나 연산 속도와는 다름)
    • 높은 IOPS = 디스크 속도가 빠름 = 비용이 높음
    • 낮은 IOPS는 병목 현상을 일으킬 수 있음

Block Storage

  • 파일을 chunk(block)으로 분할하여 각각의 주소를 할당하여 관리
  • File Storage와 유사하게 사용 전에 연산 노드에 연결해야 함
  • 높은 신뢰성과 보안성
  • 광케이블에 연결되므로 일정하게 빠른 속도를 갖기 때문에 저지연성 작업(DB, 메일)에 유리
  • 연산 노드간 공유 저장소로는 부적합
  • 필요에 따라 IOPS를 수정할 수 있음
  • Block / File Storage의 공통점
    • 서비스 제공자에 의해 유지보수
    • 높은 가용성, 신뢰성
    • 데이터 암호화 제공
  • File Storage는 이더넷에 연결되지만, Block Storage는 광케이블로 연결되므로 Block쪽이 훨씬 빠르고, 일정 속도를 보장
  • File Storage는 다수 노드에 연결 가능하며, 파일 공유가 가능하나, Block Storage는 단일 노드에만 연결 가능하며 빠른 연결이 지속적으로 필요한 경우 사용

Object Storage Overview

  • Object Storage는 특정 노드에 연결되지 않고, API를 통해 접근(up/download)
  • 다른 저장소 대비 저렴하게 제공
  • 거의 무한한 저장소 제공, 사용한 만큼만 지불 가능
  • 구조화되지 않은 (= 폴더 단위로 저장되지 않는) 데이터를 저장할때 유용
    • Bucket이라는 파일 단위를 사용하여 서로 다른 데이터를 저장(이때 Bucket 내에 Bucket을 저장할 수는 없음)
    • Bucket에는 metadata가 설정되어 접근을 위해 활용됨
    • Bucket 생성 시 크기를 정의할 필요가 없음
    • Bucket을 저장 방식의 설정
      • 동일 region 내 설정 : 높은 가용성
      • 여러 region 에 분할 : 높은 신뢰성
  • Using Case
    • text, audio, video
    • IoT data
    • VM Image
    • Backups
  • OS, DB 등 변화가 잦은 경우에는 부적합

Object Storage - Tiers and APIs

  • Bucket 내에는 Tier와 Class가 존재
  • Tier : 데이터 접근 빈도
    • standard : 주기적 접근, 높은 가격
    • vault, archive : 문서 혹은 월에 한두번만 접근할 파일들 - 상대적으로 낮은 가격
    • Cold Vault : 연에 한두번만 접근할 파일들, GB단위가 월에 cent단위일 만큼 저렴
    • automatc archiving rule : 파일 접근 빈도에 따라 자동으로 티어 조정
    • Tier는 IOPS와는 다름
  • 가장 흔한 Object Storage는 S3 API로, AWS S3 object storage에 기반
    • 많은 공급자들이 S3에 호환되도록 API를 구성

Content Delivery Networks

  • 임시 파일, 캐시 파일, 웹 데이터 등을 전달하는 분산 서버 네트워크
  • 한 리전 내의 웹에 접근할 때, 멀리 떨어진 사용자는 그만큼 응답 시간이 느려지게 됨
    • 각 리전에 CDN을 배치하여 유저 데이터 등을 저장
    • 리전 근처의의 사용자 요청 시 CDN 데이터를 전달
    • 접근 속도를 높이고, 중앙 트래픽은 낮춤
728x90
728x90
Overview of Cloud Infrastructure

Overview of Cloud Infrastructure

  • 클라우드 모델을 선택 후, Infrasturcture 구조를 결정하여야 함
  • Region : Infrasturcture가 구성되어 있는 지역 (East, US 등등)
    • 한 region에 손상을 받아도 다른 region은 계속 동작
  • Zone : 한 region 내에 존재하는 Data Center 구역
    • DAL-09 / US-east-01 등으로 명명
    • Zone의 분리는 fault 위험을 낮추고, 지연을 감소시킬 수 있음
  • Computing Resource
    • Virtual Server(VM) : 가상화된 소프트웨어 기반의 서버
    • Bare metal servers : 가상화되지 않은 물리적 서버
    • Serverless : 가상 머신의 추상화된 계층
  • Storage
    • 데이터의 중요도, 접근 빈도, 접근 속도, 보안 정도에 따라 결정
    • Block Storage
    • File Storage
    • Object Storage
  • Networking : 라우터, 스위치, SDN(Software Defined Networking)
    • Interface : 서버와 공개된 네트워크상의 연결 여부 - public / private
    • 네트워크 접근 제어 : VPC, VLAN, VPN
    • HW적 제어 : 방화벽, 게이트웨이, 로드밸런서 등

Virtualization and Virtual Machines Explained

  • 가상화 : 소프트웨어 기반으로 가상의 컴퓨터 / 저장소 / 네트워크 등을 만드는 것
  • Hypervisor : 가상화의 핵심
    • 물리적인 서버 위에서 동작하여 가상 환경에 컴퓨터 자원을 할당
    • Type 1 - Baremetal Hypervisor
      • 가장 대표적인 hypervisor 유형
      • VMware, Hyper-v 등
    • Type 2 - Hosted Hypervisor
      • 물리 - Hypervisor 사이에 host OS 계층이 존재
      • Virtualbox 등
  • Virtual Machine : 소프트웨어 기반으로실제 컴퓨터처럼 동작 (OS, 어플리케이션 등을 동작)
    • Host에 대해 독립성을 갖기 때문에 hypervisor 간에 유연한 이동이 가능
  • VM의 장점
    • 비용 절감 : 한 인프라 내에서 여러 VM을 돌릴 수 있다 = 실제 서버에 대한 유지 보수가 절감(전기세 등)
    • Agility : VM 구성은 매우 빠르고 쉽게 할 수 있음
    • 시간 절약 : 다른 Host로 빠르게 VM을 이동할 수 있다 = 백업이 간편하다

Types of Virtual Machines

  • 가상 머신을 구성할 때의 고려할 점
    • 가상 머신의 위치 : Region, Zone
    • OS : Unix, Linux, Window, ...
    • shared(Multi - tenant) / dedicated (Single - tenant)
    • 과금 체계 : hourly or monthly
  • shared(public) cloud : multi-tenant 구조, 정해진 크기 내에서 수요에 따라 정의
    • multi-tenant : 서버를 가상화하여 다른 사용자와 공유하여 사용
  • transient(spot) VM : 데이터센터의 사용하지 않는 용량을 활용
    • 비슷한 VM 대비 저렴한 가격으로 공급하나, 경우에 따라 할당이 취소(de-provision)되거나 더 높은 가격으로 책정될 수 있음
    • 테스트 / 개발용으로 활용
  • reserved virtual server instance
    • 일정 용량 혹은 자원을 보장
    • 장기간 예약할수록 저렴하게 사용 가능
  • Dedicated Host
    • Single-tenant : 특정 Host 자원을 독점하여 사용

Bare Metal Servers

  • Single-tenant / dedicated 서버, 단일 고객을 위해 할당
  • 공급자는 하드웨어를 관리하고, 그 외의 부분은 고객이 설정
    • 공급자에 의해 사전에 설정되거나, 고객이 원하는대로 맞출 수도 있음
  • Virtual Server 대비 프로비전까지의 시간이 오래 걸림
  • 단일 고객에게 할당되므로 VM 대비 고가
  • Hypervisor가 필요 없기 때문에 독립된 환경에서 사용 가능하며, 하드웨어에 대한 높은 접근성을 제공

Secure Networking in Cloud

  • 클라우드 환경 구축 사례가 많아지면서 보안에 대한 필요성 역시 그에 따라 높아짐
  • 클라우드 보안의 경우 실제 서버 보안과 크게 다르지 않으나, 구성 요소가 논리적으로 동작한다는 차이가 존재
    • 네트워크 인터페이스 컨트롤러(NIC)의 경우 클라우드에서 가상 NIC(vNIC)로 동작
  • 클라우드의 네트워크 기능은 HW보다는 서비스로서 기능
  • 네트워크의 사이즈(IP 주소 범위)를 정의하는 것으로 시작
    • 클라우드 네트워크는 서브넷이라는 단위로 분할
    • 한 서브넷 내에는 VM, 인스턴스, 저장 공간, 로드 밸런서 등으로 구성
    • 각 서브넷은 접근 제어 리스트(Access Control List, ACL)이라는 서브넷 단위의 방화벽으로 보호됨
  • 서브넷이 사용하는 서비스에 따라 각각 다른 보안 그룹으로 할당
    • Web tier의 경우 인터넷에 연결되어야 함 : Public Gateway와 VPN을 활용
    • 많은 접근이 있는 어플리케이션의 신뢰성을 위해 Load Balancer 사용

Containers

  • 의존성 + 라이브러리 + 코드로 구성된 실행 가능한 SW 단위
  • 클라우드, 데스크톱 등 어느 곳에서나 실행 가능
  • 가상 머신과 달리 OS를 포함하지 않음
  • Virtual Machine의 경우
    • HW - Host OS - Hypervisor로 구성
    • Hypervisor 위에 Guest OS를 포함하는 Virtual Machine이 할당
    • VM 위에 프로그램 구동
    • 여러 개의 프로그램 구동시 그만큼의 VM이 필요
    • 다수의 프로그램 구동 시 많은 자원이 필요하고, VM별로 다른 호환성 문제가 있을 수 있음
  • Container의 경우
    • 파일 생성 - 이미지 생성 - 컨테이너 생성
    • HW - Host OS - Runtime Engine으로 구성
    • Guest OS 없이 동작하므로 VM 대비 적은 자원 필요
728x90
728x90
Overview of Service Models

Overview of Service Models

  • IaaS : 가상화된 네트워크 및 저장소가 제공되어 사용자는 접근 및 설정이 가능

    • 사용자 유형(persona) : 시스템 / IT 관리자
    • 자동차 리스로 비유 : 차량의 성능에 대해 신경 쓸 필요 없이 외관(도장)에만 신경쓰면 됨
  • PaaS : IaaS의 가상화된 자원이 갖는 장점을 이용 + 사용자는 이 부분에 대해 관리할 필요가 없음

    • 사용자 유형 : 대체로 개발자
    • 렌트카로 비유 : 단순히 차를 빌려서 톨비, 연료비만 지출
  • SaaS : 로컬 장치에 설치하거나 업데이트 없이 사용하는 소프트웨어

    • ex. 유튜브 역시 SaaS의 일종
    • 대체로 라이센스보다는 구독형 모델
    • 택시로 비유 : 차의 성능, 외관, 유지비 상관 없이 정해진 거리만 이동
  • IaaS > PaaS > SaaS 순으로 사용이 쉬우며, 역순으로 관리 복잡성이 증가

IaaS - Infrastructure as a Service

  • 인터넷을 통해서, 실시간으로, 사용한 만큼 지불하는 방식으로 고객들에게 연산 능력, 네트워크, 저장소를 제공

  • Infrastructure를 가상화, 혹은 하이퍼바이저 층을 이용하여 제공

  • 고객은 클라우드 공급자가 공급 가능한 지역을 선택하여 가상 머신을 생성, 혹은 프로비전할 수 있음

  • 가상 머신에는 고객이 선택한 운영 체제가 설치

    • 고객은 middleware, 어플리케이션을 설치하고 프로그램을 구동
    • 처리 및 백업을 위해 저장소를 사용
  • 클라우드 공급자는 고객들에게 성능 및 사용량의 추적 및 측정, 재해에 따른 복구를 제공

  • IaaS의 구성요소

    • Physical Data Center
      • 다양한 추상화 계층을 제공
      • 사용자들은 물리 계층을 직접 사용하지 않고, 데이터센터가 제공하는 서비스를 사용
    • Compute
      • 공급자는 하이퍼바이저를 관리하고, 사용자는 필요한 만큼의 연산, 메모리, 저장 공간을 프로비전
      • auto scaling, load balancing을 통한 높은 성능 제공
    • Network : 네트워크 자원을 API를 통해 접근
    • Storage : Object, File, Block 저장소로 구성
  • Using Case

    • Test / Develop : 개발 환경을 더 빠르게 구성할 수 있게 하여, 인프라 관리보다 비즈니스 로직에 더 집중할수 있게 해줌
    • Continuity / Recovery : 정전 혹은 재해의 위험 없이 어플리케이션 혹은 데이터에 접근 가능하게 해줌
    • Faster Deployment : 웹 어플리케이션을 빠르게 배치하고, 변화하는 수요에 맞추어 인프라 크기를 빠르게 키우거나 줄임

Paas - Platform as a Service

  • 고객에게 직접 개발하였거나 서드파티에 의해 개발, 배치, 구동, 관리할 수 있는 완성된 플랫폼을 제공
    • 서버, 네트워크, OS, 저장소, API, 미들웨어, DB 등...
    • 사용자는 코딩 및 유지보수만 하도록 구성
  • IaaS의 경우 raw한 컴퓨터 자원을 제공
    • PaaS의 경우 low-level 환경에 대한 부분을 추상화
  • PaaS의 주요 특징
    • 높은 추상화 : 어플리케이션 배치, 프로비저닝, 인프라 설정, 로드 밸런싱과 DB의 설정 복잡성을 모두 배제
    • API 제공
      • 클라우드 어플리케이션의 복잡한 부분을 API를 통해 단순화
      • 워크로드, 사용자 구분, 통계 등을 API로 지원
    • 빠른 배치 매카니즘 : 어플리케이션을 빠르고 효율적으로 배치 및 동작
  • Using Case
    • API 개발 및 관리
    • IoT : 개발을 위한 도구 및 프로그래밍 언어 등 제공
    • Business analytic : 사업 결정 및 예측 지원
  • PaaS의 장점
    • Scalability : API, 지원, 미들웨어 등을 사용한 만큼 지불
    • 빠른 시장 출시 : 환경 구성에 필요한 시간을 단축
    • Agility : 다양한 OS, 언어, 도구를 쉽고 빠르게, 그리고 변경 시의 위험을 낮게 하여 사용 가능
  • PaaS의 위험성
    • 서비스 제공자의 인프라에 따른 보안 위험성
    • 인프라에 의한 의존성
    • 제공되는 서비스가 변경될 경우 제어 불가

SaaS - Software as a Service

  • 클라우드에 기반한 SW 제공
  • 공급자는 서버, DB, 어플리케이션 및 접근 권한, 보안 등을 관리
  • 사용자는 유지보수 / 업데이트 없이 사용
  • MS Office 365, Gmail, CRM 등이 해당
  • 주요 특징
    • Multitenant architecture : 인프라 및 코드는 중앙에서 유지보수하고, 모든 사용자에 의해 접근
    • Management : 접근 권한 및 데이터 사용을 관리하기 편하고, 모든 사람들이 동시에 같은 정보를 볼 수 있게 함
    • Customize : 어플리케이션을 사업에 맞게 조정 가능하고, data field나 기능 활성 여부를 선택 가능
    • Subscription model
  • SaaS의 장점
    • 빠른 솔루션 조달이 가능 : 결정부터 결과까지의 시간을 단축
    • 작업 생산성과 효율성을 증가
    • SW 배포가 매우 빠름
  • Using Case
    • 업그레이드, 유지보수 및 패치가 필요 없는 환경
    • 최소한으로 신뢰성 있는 어플리케이션 동작
    • 웹, 마케팅, 판매 등을 관리
    • SaaS 어플리케이션을 모아 SIP(SaaS Integration Platform)으로 제공
  • SaaS의 유의점
    • 서드파티 사용 시 중요 데이터 문제
    • 인터넷 상태가 불량할 시 접근 불가

Public Cloud

  • Deploy model의 구분
    • 어디에 인프라가 할당되는지
    • 누가 소유하고 관리하는지
    • 어떻게 자원과 서비스가 사용자가 이용 가능하도록 만들어지는지
  • Public Cloud : 사용자는 인터넷을 통해 서버, 저장소, 네트워크, 보안 등에 접근
  • Web, API 등 필요한 서비스를 사용
  • 제공자는 인프라를 소유, 관리, 유지보수 - 사용자는 이 과정을 알지 못함
    • 물, 전기, 가스를 사용하는 것과 같은 방식
  • 가상화된 multi-tenant 구조를 사용하여 컴퓨팅 자원을 공유
    • 방화벽 바깥에 위치
    • 공유되는 인프라, 플랫폼, 소프트웨어는 단일 사용자에게 할당되지 않음(공유됨)
    • 자원은 필요에 따라 분배되며, 구독 및 사용량에 따라 지불
  • public cloud의 장점
    • 필요에 따라 끊김 없는 자원 할당
    • 규모의 경제에 따른 서비스 제공
    • 높은 신뢰성
  • public cloud의 유의점
    • 보안 : 데이터 손상, 손실 등의 문제
    • 데이터 권한 준수 : 법률에 따른 데이터 관리 문제
  • Using Case
    • 클라우드 기반의 어플리케이션 / 플랫폼을 통해 어플리케이션 개발 및 시험에 집중하여 출시까지의 기간 단축
    • 변화하는 사용량에 대응
    • 피해 복구, 데이터 보호, 지속성 유지
    • 쉬운 배포, 데이터 백업, 높은 접근성
    • 어플리케이션 및 플랫폼의 유지보수를 클라우드 공급자에게 아웃소싱

Private Cloud

  • NIST 정의 : 단일 기관에 의해 독점적으로 클라우드 인프라를 사용
    • 소유, 관리, 동작 역시 사용 기관에서 담당
  • Internal Infrastructure : 사용 기관에 의해 소유 / 관리
  • External Infrastructure : 서비스 제공자에 의해 소유 / 관리
    • Virtual Private Cloud(VPC) : 퍼블릭 클라우드에서 논리적으로 독립되어 사용
    • Public Cloud의 장점은 취하고, 맞춤형 보안 등 특정한 니즈를 충족 가능
  • Private Cloud의 장점
    • 더 직접적인 관리 가능
    • 자원 활용을 통한 비용 절감
    • Cloud Bursting : Public Cloud 사용 중 급격한 변화(Surge) 발생 시 Private로 전환 가능
    • 필요에 따른 접근 관리
  • Using Case
    • 매우 민감한 데이터 관리
    • 기존의 내부 어플리케이션 등을 통합, 최신화
    • 보안 걱정을 낮추면서 어플리케이션의 장소 제약 없는 개발

Hybrid Cloud

  • private 및 public cloud를 하나의 인프라로 구성
    • 각 어플리케이션 및 작업에 대해 유연한 동작 선택 가능
    • private - public을 자유롭게 전환 가능
  • 필요에 따라 public 용량을 순간 수요에 따라 private로 전환 가능 (Cloud Bursting)
  • 주요 특징
    • Interoperable : private - public cloud가 서로의 API, 설정, 데이터 포맷, 인증 양식을 해석 가능
    • Scalable : public cloud 용량을 private로 전환 가능
    • portable : 데이터를 특정 서비스에 종속되지 않게 사용 가능
  • Hybrid Cloud의 종류
    • Mono : 단일 제공자에 의해 제공
    • Multi : 표준에 기반한 Stack으로 임의의 인프라 상에 구축 가능
    • Composite Multicloud : Multicloud보다 높은 유연성 제공
  • Hybrid Cloud의 이점 : 보안, 신뢰성, 최적화, 비용 절감
  • Using Case
    • SaaS 통합 : public - private 클라우드들 간에 SaaS 어플리케이션 이용이 가능하도록 하여 새로운 솔루션 제공
    • Data / AI 통합
    • 레거시 어플 개선
    • VMware 마이그레이션
728x90
728x90
Cloud Adoption - No Longer a Choice
  • 학습 목표
    • 클라우드로 이동한 Business Case 학습
    • IoT, AI, 블록체인 등의 기술이 어떻게 클라우드로 인해 가속될 수 있는지 학습

Cloud Adoption - No Longer a Choice

  • 클라우드는 낮은 위험으로, 실험-실패-학습의 과정을 더욱 빠르게 해줌
  • IBM Business Value Study : 3/4 이상의 기업들이 새 산업으로 확장할 때 클라우드 컴퓨팅을 사용
    • 74%가 더 나은 고객 경험을 위해 클라우드로 이동
    • 71%가 기존 시스템의 크기를 줄이고, 비용을 감축하며 더 나은 제품과 서비스를 위해 클라우드를 사용
  • 경쟁력 있는 기업은 통계나 고객 경험을 이해하여 시장에 빠르게 반응하여야 함
    • 제품의 수명주기는 더욱 짧아졌고, 진입 장벽은 더욱 낮아짐
  • The International Data Corporation(IDC) : 2025년이면 전 세계에서 생성되는 데이터 양이 163ZB(1ZB = 1조 GB)에 달할 것이라고 예상되며, 이중 30%는 실시간 정보가 될 것
    • data에 기반한 결정은 어느 사업에서나 중요
    • 그렇기 때문에 클라우드 컴퓨팅은 성공적이고, 지속 가능하며, 경쟁력 있는 사업에 필수적인 요소가 되어가고 있음

Cloud Adoption - Some Case Studies

  • American Airlines
    • Challenge : 고객 경험, 디지털 채널의 향상 / 고객 니즈에 대한 응답 시간을 개선
    • Soltuion : 클라우드 기반의 Self-service tool, 기존 어플리케이션의 제약사항 제거
    • Result : 새로운 어플리케이션 개발 및 배포 속도의 증가, 신뢰성 및 생산성의 증가, 업그레이드 비용의 절약
  • UBank
    • Challenge : 개발자에게 더 많은 권한 부여, 추가 자원에 대한 니즈 감소, 시장에 대한 빠른 대응
    • Solution : IBM watson을 이용한 지원, PaaS 개발 모델
  • Bitly
    • Challenge : global precense, 크기의 확대 및 축소, 더 많은 POP로의 분산
    • Solution : 확장 가능한 호스팅 플랫폼, IBM Cloud로의 이동
    • result : 250억개의 링크가 site에서 클라우드로 이동, 10억 개의 유저 데이터가 클라우드를 통해 관리
  • ActivTrades
    • Challenge : latency 감소, 실행 속도 증가, 새로운 기능의 효율적 전달
    • Solution : 거래 시스템을 IBM Cloud로 이동(저장소, 네트워킹, 보안)
    • result : 성능의 3배 향상, 보안 향상된 플랫폼, 새로운 요구사항에 대한 더욱 빠른 응답

Internet of Things in the Cloud

  • 각종 디바이스와 센서들은 데이터를 수집하고 측정
    • 스마트 빌딩의 경우, 온도, 시각, 환경 등의 정보를 수집하는 수천개의 센서가 데이터를 수집
    • 어마어마한 양의 데이터가 수집되고, 네트워크 상에 부담이 될 수밖에 없음
    • 클라우드를 통해 IoT 디바이스에 의한 데이터를 관리

Artificial Intelligence on the Cloud

  • AI-IoT-Cloud의 관계
    • IoT 디바이스에 의한 데이터를 AI가 처리 - IoT 기기의 동작은 AI에 의해 결정
      • ex. smart assistant - IoT기기가 사용자의 행동 특성을 학습하여 행동 보조
    • IoT와 AI가 클라우드의 활용성을 높임
  • case study : USTA(미국 테니스 연합)
    • 테니스 경기 중의 모든 데이터(영상, 소리 등)를 수집
    • 경기에 몰린 사람들로 인한 네트워크 트래픽을 자동으로 관리
    • 관중의 함성소리 등으로 경기의 하이라이트를 자동으로 식별

Blockchain and Analytics on the Cloud

  • 블록체인
    • transaction application의 투명성과 추적성을 설정하고, 비용을 감축하며 처리 속도를 높이기 위한 보안, 분산, 공개 기술
    • transaction과 연관된 멤버들만 볼 수 있도록 하는 네트워크
    • 네트워크가 더 분산되고, 공개되고, 다양해질수록 신뢰성과 투명성은 증가
  • 데이터를 클라우드 간에 간편하고 안전하게 옮기기 위해, 블록체인과 같은 기술의 필요성은 증가 추세
  • 블록체인 - AI의 관계
    • 블록체인은 신뢰성 있는 연결을 제공
    • AI는 수집된 데이터로 통계와 의사 결정을 강화
    • 클라우드는 효율적인 연산 자원을 제공
728x90
728x90
Definition and Essential Characteristics of Cloud Computing

이번 강의를 통해 클라우드 컴퓨팅을 정의하고, 주요 특징, 발전 과정, buisness case를 알 수 있게 될 것이다.
IBM Clouders에 지원하기 위한 기본 과제로써 해당 강의를 알게 되었는데, 클라우드에 관련한 몇몇 세미나를 들은 기억들을, 이 강의로 어느 정도 기초 개념을 확실히 하고자 한다.
IBM Cloud Course는 강의 중/후의 시험으로 통과 여부를 정한다. 이번 코스의 경우 강의 중간 평가 50%, 기말고사 50%로 수료 여부가 정해진다. 100점 만점에 총 70점 이상을 획득하여야 한다.

  • 학습 목표
    • 클라우드 컴퓨팅의 정의
    • 클라우드 컴퓨팅의 주요 특징을 설명
    • 클라우드 컴퓨팅의 역사와 발전에 대한 학습
    • ...등등

Definition and Essential Characteristics of Cloud Computing

  • 클라우드 컴퓨팅

    • 클라우드라고도 칭함
    • 인터넷을 통해 제공되며 사용한 만큼 지불하는 서비스
    • 실시간 연산 자원을 제공한다.
  • NIST(US National Institute of Standard and Technology)

    • 편의를 제공하는 실시간 네트워크 접속 모델로 적은 노력으로 빠르게 준비(provision)되고 공개(release)될 수 있는, 설정 가능한 공유된(shared pool of) 연산 자원.
    • ex. 네트워크, 서버, 저장소, 어플리케이션, 서비스 등
  • 5가지 주요 특징

    • On-demand Self Service : 연산 자원, 저장소 등의 클라우드 자원에 제공자와의 대면(human interaction) 없이 단순하게 접근 가능
    • Broad Network Access : 클라우드 자원은 스마트폰, 타블렛, 노트북과 같은 표준 플랫폼과 매카니즘을 통해 접근 가능
    • Resource Pooling : multi-tanent model을 통해 클라우드 자원을 다수의 사용자에게 할당-재할당하고, 클라우드를 cost-efficient하게 하여 클라우드 제공자들에게 규모의 경제를 제공
    • Rapid Elasticity : 필요할 때는 더 많은 자원을 사용하고, 그렇지 않을 때는 적게 사용
    • Measured Servic : 사용한 만큼 지불하는 서비스 - 사용 자원은 감시, 측정되어 투명하게 보고됨
  • Cloud As a Service

    • 연산 자원의 비용 효율성을 높이고,
    • 시장 변화를 더욱 빠르게 만듦
  • Deployment Model

    • Public : 클라우드 제공자의 자원을 개방 인터넷을 통해 사용하며, 다른 사용자와 자원을 공유
    • Private : 클라우드 제공자의 자원은 단독 사용을 위해 할당
    • Hybrid
  • Service Model

    • Infrastructure (IaaS) : 서버, 저장소 등 Infra 및 물리적 자원을 제공
    • Platform (PaaS) : 개발에 필요한 HW/SW tool을 제공
    • Application (SaaS) : on-demand SW라고도 하며, 구독에 기반하여 SW 라이센스 등을 제공

History and Evolution of Cloud Computing

  • 1950s
    • 클라우드 컴퓨팅의 개념은 1950년대부터 시작(시분할, resource pooling 등)
    • Dumb terminal : 다수의 유저가 메인프레임의 동일 자원을 사용을 효율적으로 사용하기 위해 사용
  • 1970s
    • 가상 머신(VM)을 통해 메인프레임 내에서 다수의 VM으로 분리된 컴퓨팅 환경 제공
    • 당시 비싼 HW를 효율적으로 쓰기 위해, 기능적으로 공유 호스팅(Shared Hosting), 가상 개인 서버(Private serer) 등으로 분리
    • Hypervisor : 다수의 OS가 서로 간섭 없이 동작할 수 있도록 하는 SW layer

Key Considerations for Cloud Computing

  • 클라우드로의 이전을 위한 핵심 요소
    • 민첩성(agility)
    • 유연성(flexivity)
    • 경쟁력(competitiveness)
  • 클라우드를 위한 주요 고려 사항
    • Infrasturcture and Workload
      • 데이터센터를 직접 짓는데는 천문학적인 비용이 듦
      • 클라우드 컴퓨팅의 낮은 초기 비용 / 사용한 만큼 지불하는 특성은 유의미한 비용 절감을 제공
      • 클라우드의 경우 모든 자원이 항상 준비되어 있지는 않을 수 있음
    • SaaS and Development Platform
      • 기성(off-the-shelf) SW과 주기적 업그레이드 대신 어플리케이션의 접근(SaaS)을 제공
      • 클라우드에서 n시간동안의 구동을 할 지, 기존 플랫폼에서 장시간 동작시킬지를 고려
    • Risk Exposure
      • 클라우드로의 이동이 불확실한 상황에서 장기간의 Plan을 지불하는 것이 옳은가?
  • 클라우드로 이동할 때의 장점
    • Flexivity
      • 서비스의 Scale이나 어플리케이션 Customization을 원하는 대로 조정
      • 클라우드 서비스로 어디서나 접근
      • 가상 private 클라우드, 암호화, API 키를 통해 데이터를 안전하게 저장
    • Efficiency
      • 인프라 비용 및 유지보수에 대한 걱정 없이 빠른 출시가 가능
      • 인터넷 통신이 가능한 어떤 기기에서도 자유로운 접근 가능
      • 백업으로 인한 데이터 손실 방지
    • Strategic Value
      • 인프라 관리를 더욱 효율적으로 하여, 기업만의 특징에 집중할 수 있도록 해줌.
  • 클라우드로의 이동 시 주의사항
    • 사업 간의 차이로 인한 데이터의 이용 불가, 혹은 손실 등의 문제
    • 관리와 권한 문제
    • 법적 문제
    • 표준화가 부족할 때의 서비스 통합 및 상호 운용 문제
    • 적절한 서비스 모델, 클라우드 제공자 선택
728x90
728x90
Newton's Method

Newton's Method

  • Fixed Point method의 특별 case(가장 빠른 수렴)
  • newton method가 불가능한 경우 보통 bisection method 사용 (fixed point method는 상대적으로 잘 쓰이지 않음)

  • Taylor Polynomal
    • 계산된 fixed point p에 대해서
    • f(p)=f(p0)+(pp0)f(p0)+(pp02)2f(ζ(p))f(p)=f(p_0)+(p-p_0)f'(p_0)+\frac{(p-p_0^2)}{2}f''(\zeta(p))
    • ζ(p)\zeta(p)는 p~p0 사이엥 위치
  • p가 f(x)의 근이면 f(p)=0
    • 이 경우 0=f(p0)+(pp0)f(p0)+(pp0)22f(ζ(p))0=f(p_0)+(p-p_0)f'(p_0)+\frac{(p-p_0)^2}{2}f''(\zeta(p))
    • 2차항은 error 취급 : 0f(p0)+(pp0)f(p0)0\simeq f(p_0)+(p-p_0)f'(p_0) (p : 근사해)
    • p에 대해 정리하면 pp0f(p0)f(p0)p1p\simeq p_0-\frac{f(p_0)}{f'(p_0)}\equiv p_1
  • Newton's method
    • pn=pn1f(pn1)f(pn1)(n1)p_n=p_{n-1}-\frac{f(p_{n-1})}{f'(p_{n-1})}(n\geq1)을 반복하여 근사해로 수렴
    • 이때 pn=g(pn1)p_n=g(p_{n-1})이므로, g(pn1)=pn1f(pn1)f(pn1)g(p_{n-1})=p_{n-1}-\frac{f(p_{n-1})}{f'(p_{n-1})}로 표기할 수도 있다.
    • 곡선의 근을 구하기가 힘들다는 점에서 곡선에 접하는 접선의 근을 반복적으로 계산하여 곡선의 근으로 수렴한다.
  • 장점 : 매우 빠른 수렴
  • 단점 : 적절한 point 선정 필요 / 실제 개발 시 미분을 요구하므로 계산이 복잡해짐
  • Convergence theorem
    • 위 식에서 g(x)=xf(x)f(x)g(x)=x-\frac{f(x)}{f'(x)}
    • Converence rate : g(x)=f(x)f(x)[f(x)]2g'(x)=\frac{f(x)f''(x)}{[f'(x)]^2}
    • 고정점에서 f(p)=0이므로 newton's method의 수렴 속도는 0으로 수렴 (매우 빠르다)
728x90

+ Recent posts