출처: https://www.coursera.org/learn/google-kubernetes-engine/home/week/1

 

Coursera | Online Courses From Top Universities. Join for Free

1000+ courses from schools like Stanford and Yale - no application required. Build career skills in data science, computer science, business, and more.

www.coursera.org

출처: 구글 클라우드 스터디잼 (중급) 가이드라인(박찬성님)

강의명: Welcome to Getting Started with Google Kubernetes Engine

## 쿠버네티스란 What are Containers?

# 전통적인 과거의 서버 환경

 

어플리케이션은 베어메탈 (bare-metal) 서버에서 구동되었으므로 아래와 같은 셋업 과정이 필요
1. 하드웨어의 설치
2. OS 또는 커널 (kernel)의 설치
3. 어플리케이션 구동에 요구되는 수 많은 의존성에 대한 설치 및 관리
4. 어플리케이션을 이 모든것 위에 설치할 수 있음

문제점
: 이 같은 기나긴 일련의 셋업이 완료된 이후에도 필요한 지속적인 의존성 유지/관리 및 모든것에 대한 싱크를 맞추기가 어려움
  ⇒ 해결책으로, VMware가 하이퍼바이저 개념을 도입

 

 

# 하이퍼바이저에 의한 서버 환경

 

 

VMware 진영에서, 하드웨어를 하이퍼바이징 하기 위한 방법을 고안
하드웨어를 커널, 의존성, 어플리케이션 으로부터 분리시킨다는 의미

이를 위해서, "하드웨어 하이퍼바이저"라는 계층이 개발되었고, 하드웨어 윗단에 위치한 모든 계층들을 자유롭게 만들어 주었음
즉, 한 단계의 추상 계층이 도입

 

 

 

# 하이퍼바이저에 의한 서버 환경의 문제점 1

 

 

하나의 가상머신에, 여러개의 서로 다른 버전으로 운영되는 동일한 어플리케이션의 설치/구동이 불가능
⇒ 의존성 에러가 속출하고, 여러가지 충돌 상황이 발생

이 문제에 대하여, 여러개의 가상머신을 생성하는 것으로 이 문제를 해결하려고 노력

 

 

# 하이퍼바이저에 의한 서버 환경의 문제점 2

 

무수히 많은 가상 머신을 생성한 후,
동일한 어플리케이션의 서로 다른 버전 또는 단순히 복제된 동일 버전을 설치/구동

의존성의 문제를 해결하지 못해서, 불가피하게 수 많은 가상머신을 만들어낼 수 밖에 없었다는 것이 문제
비용이 많이 들고, 모든면에서 비 효과적이고, 하드웨어 측면에서 또한 비 효과적임
⇒ 이 문제를 해결하기 위해 등장한 것이 Container

 

 

# 컨테이너에 의한 서버 환경

 

 

컨테이너 단위의 다른 수준의 추상화 방식
- 하드웨어 계층과의 분리
- {커널, 컨테이너 런타임} 계층과의 분리

즉, 위 두 가지 계층을 어떤 종류든지간에 어플리케이션과 어플리케이션에 필요한 의존성으로 부터 분리

매우 이식성이 좋고, 매우 효율적인 장점

 

 

# 컨테이너에 의한 서버 환경 - 개발자들에게 인기 있는 이유

 

어플리케이션은 어디에서든, 동일하게 동작
 - 개발, 테스트, 프로덕션 어떤 환경에서든
 - 베어메탈, 가상머신, 클라우드 어떤 환경에서든

패키지화된 어플리케이션은 개발 싸이클의 속도를 빠르게 회전시킴
 - 애자일한 생성과 배포가 가능
 - 지속적인 통합/배포가 가능
 - 단일 파일의 복사만으로 이를 가능하게 해줌

마이크로서비스를 가능하게 해 주기 위한 방법을 제공:
 - 분석 가능성(introspectable), 격리성(isolated), 탄력성(elastic)

 

# 12년에 걸친 컨테이너의 역사

 

# 도커 오버뷰

 

도커 컨테이너와 이미지의 관계
 - 이미지: 일종의 실행가능한 컨테이너를 생성하는데 사용되는 템플릿
 - 컨테이너: 이미지 기반의 실제 실행가능한 이미지 인스턴스

왼쪽 그림과 같이, ubuntu 라는 생성된 이미지는건드릴 수 없는 Read Only 계층. 
인스턴스를 찍어내기 위한 템플릿이라고 생각해 보면 당연한 내용
이미지라는 템플릿으로부터 여러개의동일한 컨테이너라고 불리는 인스턴스를 찍어낼 수 있음.
⇒ 인스턴스가 되었기 때문에, Read Write 가능한 계층

 

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

else는 if가 있어야 쓸 수 있는 키워드. if의 조건이 false이면 else가 수행

package com.practice020

fun main(args: Array<String>): Unit
{
	val a = 10
	val b = 5

	if (a < b)
		println("if")
	else
		println("else")			// 출력

	if (a > b)
		println("a가 크다.")		// 출력
	else
		println("b는 a 이상이다.")
}

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

조건에 따라 실행되는 코드를 제어하고 싶을때 if 문 사용하는 

if(Boolean 타입표현식)
{
	if문에 포함시킬 문장들
}
package com.practice019

fun main(args: Array<String>): Unit
{
	var a = 15
	val b = 11

	if (a > b)
	{
		println("if 안으로 들어옴")	//출력: if 안으로 들어옴
		a -= b
	}

	println(a)	// 출력 : 4
}

 

블록Block: if() 다음에 오는 중괄호로 둘러싼 부분

조건Condition: if문 소괄호 안에 들어가는 Boolean 타입의 표현식

※ if문에 속한 문장이 하나일때는 중괄호를 생략할 수 있다.

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

  • &&  : and, a&&b 모두가 true 면 결과값은 true, 둘중 하나라도 false면 false
  • ||  : 둘 중 하나라도 True 이면 True, 둘다 false 면 false
  • !  : !a  a가 true이면 결과는 false, a가 false 이면 결과는 true
package com.practice018

fun main(args: Array<String>): Unit
{
	val a = 15
	val b = 17

	var bool: Boolean = (a - b < a + b) && (a == 15)
	// (15-17 < 15+17)&&(15==15)
	// (-2<32) && true
	// true && true
	println(bool)	// 결과: true

	bool = !((a + b) > (a * 3) || (b - a) > 0)
	// !((15+17)>(15*3)||(17-15)>0)
	// !(32>45||2>0)
	// !(false||true)
	println(bool)	// 결과: false
}	

출력:

true
false

 

 

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간 

비교연산자 Comparison Operator: 두 개의 피연산자를 비교하는 연산자

package com.practice017

// 비교 연산자Comparison Operator
fun main(args: Array<String>): Unit
{
	var isRight: Boolean = (10 + 70) > (3 * 25)
	println(isRight)	// 출력: true

	isRight = false
	println(isRight)	// 출력: false

	isRight = 30 == (10 + 20)
	println(isRight)	// 출력: true

	isRight = 0.00001f == 0.005f * 0.002f
	println(isRight)	// 출력: false

	isRight = 3.0 * 5 + 2.7 <= 16
	println(isRight)	// 출력: false
}

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

비교연산자의 결과 타입은 Boolean 이며, true(참) 과 false(거짓) 이 있다

https://kotlinlang.org/docs/reference/operator-overloading.html#comparison

 

Operator overloading - Kotlin Programming Language

 

kotlinlang.org

/** Prints the given [message] and the line separator to the standard output stream. */
@kotlin.internal.InlineOnly
public actual inline fun println(message: Any?) {
    System.out.println(message)
}

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

package com.practice016

fun main(args: Array<String>): Unit
{
	val num: Int
	num = 15

	println(
			num + 7 * 3
	)	// 한문장이다, 출력: 36
}

 

출력

36

print 문(출력), println 문( 출력, 개행)는 괄호() 인식하여 내부 값을 출력 한다.

/** Prints the given [message] and the line separator to the standard output stream. */
@kotlin.internal.InlineOnly
public actual inline fun println(message: Any?) {
    System.out.println(message)
}

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

배정연산자 Assignment Operator: 변수에 값을 저장할 때 사용하는 연산자

package com.practice015

// 배정연산자 Assginment Operator: 변수에 값을 저장할때 사용하는 연산자
fun main(args: Array<String>): Unit
{
	val a: Int
	var b: Int

	a = 10 + 5
	b = 10

	b += a // b에 a의 값을 누적
	println(b)	// 출력: 25

	b %= 3 // b를 3으로 나눈 나머지를 b에 저장
	println(b)	// 출력 : 1
}

 

출력

25
1

 

참고 :  https://kotlinlang.org/docs/reference/grammar.html#precedence

 

Grammar

 

kotlinlang.org

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

package com.practice014
// 주석

fun main(args: Array<String>): Unit
{
	// Apple을 화면에 출력한다.
	println(/* 이 부분은 컴파일러가 통째로 무시한다. */"Apple"/* 이
	부
	분
	도
	*/)
}

 

주석Comment:  소스코드가 자연어가 아니기때문에 설명하기 위한 문법

// 이렇게도 /* 주석내용  */ 또는 이렇게도 사용 가능

출력:

Apple

 

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

package com.practice013
// 타입 별명 Type Alias

typealias Number = Int	// 이미 존재하는 타입에 별명을 붙일 수 있다.

fun main(args: Array<String>)
{
	val a: Number = 10	// Number 타입은 실제 Int 타입이지
	println(a)
}

typealias 키워드: 이미 존재하는 타입에 별명을 붙일 수 있다. 타입이름이 너무 길 때 줄이는 용도로 쓰면 좋다

출력

10

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

문자열 안에 변수나 표현식의 값을 집어 넣는 방법 

package com.practice012

fun main(args: Array<String>): Unit
{
	val a = 10
	val b = 20

	println("a의 값: $a")	// $뒤에 변수 이름을 적으면 변수의 값으로 대체
	println("b의 값: $b")

	println("a + b = ${a + b}")	// 표현식의 값을 문자열에 포함하고 싶으면 
}

println("a의 값: $a")   // 큰 따옴표 안에 $가 있다. $뒤에 변수를 적으면 해당부분은 변수의 값으로 대체된다.

$ 자체를 출력하고 싶으면, \$를 사용한다

표현식의 값을 문자열에 포함하고 싶으면 ${표현식}을 문자열안에 쓴다

출력

a의 값: 10
b의 값: 20
a + b = 30
 

+ Recent posts