국방부오픈소스아카데미

서론

군인이다. 시간은 많이 남아돌고 책읽을 시간도 많은데다가 요즘 좋은 잡지 마이크로소프트웨어도 발견하게 되서 사실 블로그에 쓸글은 그 어느때보다 많고, 지금도 초안만 존재할 뿐이지만

  • 주변에서 찾아보는 함수형 개념
  • 리눅스, 3가지 종류의 링크
  • 양자컴퓨터와 격자 암호화
  • asp.Net의 MVC부터 React.js의 MVVM까지
  • 현대과학적 바벨탑
  • 늑대와 향신료와 가상화폐
  • AWS Lambda로 다시생각해보는 Docker
  • 원리부터 파악하는 Word2Vec
  • 요즘 딥러닝의 근본이되는 상위 개념들
  • 아무것도 없는 Windows 7+에서 메모장으로만 코딩하기

같은 글들을 시작만 해놓고 노트에 대충 어떻게 쓸지 필기까지 해놨는데 정작 컴터에 써놓시간이 없다.....ㅠ

그러다가 국방부 오픈소스아카데미를 발견했다.

퀄리티 낮은 글로 강의 필기나 해야겠다.

Git GitHub 입문

Git은 잘알고 있고 소스단위로 직접 구현해본적이 있을정도지만.......
캠프갈려면 들으레니 들어야지 뭐....

강의 1: 오리엔테이션 ~ 강의 3: Commit

이론보다 실습적으로 할것임.

add commit push pull
show	status	log	shortlog	diff
clone	checkout	merge	fetch	rebase
reset	stash(?)	blame(?)	cherry-pick(?)

설명내용 : Git이란 훌륭한 버전관리 시스템!

shortlog	->	Commit 내역들 보기
git remote add [branch] <git url>
git commit --amend	->	push에 Force옵션 추가 ㄱㄱ
git reset	->	add관련
git reset HEAD~1	->	최근 commit
git commit -sm	->	s = sign

강의가 매우 부실해서 추가적인 설명
Git은 크게 3가지로 파일상태를 관리함

1. Working Directory (이하 WD)
2. Index
3. HEAD

일반적으로 git add 하면 WD에 있는 정보가 Index에 입력
여기서 commit을 하면 새로운 HEAD에 Index의 내용이 씌여지는 형식

여기서

git reset --soft HEAD~

는 HEAD가 가리키는것을 현재의 부모HEAD, 즉 commit을 하기전의 HEAD로 바꿔줌
Index와 WD는 현 상태가 유지됨으로 여기다가 별도의 수정없이 git commit을 해주면
실질적으로 commit 덮어쓰기 (--amend)와 같은 작업을 수행하게 됨.

git reset --mixed HEAD~

의 경우 HEAD가 가리키는것은 부모로 전과 같으나 HEAD의 내용이 Index에 반영이 된다.
즉 이전 commit전의 add상태까지 reset된다.

git reset --hard HEAD~

의 경우는 WD의 내용까지 commit이전으로 반영된다.

강의 4 : Pull Request, Merge

기본적으로 개인작업을 해보다보니 크게 사용 안해보는 부분이라 이기회에 공부해본다.

Pull Request - 다른 프로젝트에 자기 내용 Commit 요청

보통 Fork해서 가져와서 작업한후 좋다싶으면 Pull Request -> 지지받으면 본류에 Merge

어.... 음..... Git Merge하는데..... 파일충돌사항 안알려줌..... 의미없다.....

강의 5 : Rebase, Blame

Node.js Fork해서 개발하는데 Node.js 업데이트 나옴
-> 수정내용 잠시 제쳐두고 업데이트 받아오고 다시 개발

1. Fetch로 새로운 Branch에 추가
2. 수정수정
3. git rebase [New Branch]


git rebase -i -> Interactive
	수정할 Commit의 pick, edit으로 변경

강의를 들으면 이렇게 이해를 하게되는데 별로 좋진 않고 실질적으로 그렇지 않음
Merge가 다른 Branch가 통합되는거고
Rebase가 다른 Branch를 어떤 Branch랑 애초에 하나였던걸로 만들어버린다.
이를 발상으로 설명하는게 더 쉽지 않을까? 함.

https://git-scm.com/book/ko/v1/Git-브랜치-Rebase하기

blame의 경우 파일단위로 각 line이 언제 추가됬는지 알려주는 기능

공개SW 이해 및 트렌드

강의 1: 오픈소스의 시작과 라이선스의 이해

GPL : 자신의 소스를 사용한 소스도 오픈을 강요

LGPL : dll, so등으로 외부 라이브러리 동적으로 불러오는 경우는 오픈을 하지 않아도 됨

GPL/LGPL -> 원저작자 권한이 강해 기업이 사용하기에 부담
            심지어 라이센스도 그대로 가야되는것을 강요
MIT/BSD/Apache -> 그런게 없음, GPL보다 자유롭고 이용자
                  친화적임.

라이센스부분은 특허와 관련되 Grey Zone임.
유일하게 Apache만 타인에게 특허권 제공을 허용함.
(배포자가 특허권을 가지고 있을경우 특허권 배포를 허용)

2008년에는 Linux 주도의 GPL 계열 라이센스가 주를 이뤘으나 2016년에는 MIT/BSD/Apache 계열의 라이센스가 주를 이룸

이에대한 해석으로는 미국의 주요 공공기관에서 코드를 MIT/BSD/Apache 계열로 전환하는 오픈소스 활성화 정책과 대기업들의 플랫폼 확장을 위해 사용자 친화 라이센스로 배포등을 원인으로 제시함.

이번강의 핵심 : GPL/LGPL은 뭔가 위험하니 조심하자.

강의 2: 모바일과 오픈소스

안드로이드 MEAN 스택 관련된 내용으로 시작한다.

안드로이드를
1.0 ~ 2.3 (Dalvik, 모든앱을 대상으로 한꺼번에 GC)
3.0 ~ 5.0 (Dalvik 업글, 앱별로 GC)
5.0 ~ (ART, ROSalloc의 개념 추가. Object 크기별로 할당)
요롷게 구분함.

강의가 갤럭시 s4 나왔을때 기준으로 나와서 조금 오래된감이 있다. 전부 네이티브앱 개발 기준으로 설명해 안드로이드 디바이스별 API를 고려해서 개발해야되는 파편화 관련된 내용을 다룬다.

거기에 더해 제조사, 국가 별로 시장규모를 보여주며 앱 개발할때 염려해두어야 할 사항을 알려주긴하는데..... 오픈소스와 뭐가 관련된건지 이해를 못하겠다.... 아마 적당히 가져온 강의인듯 하다.

이번강의 핵심 : 춘추전국시대인 안드로이드를 개발할때는 조심해야할 점이 많다.

강의 3: 백엔드와 오픈소스

기존에는 이용자수랑 매출이 비례관계

하지만 모바일 나오면서 이 관계가 깨지기 시작하면서

서버유지비용 감당이 안됨

-> 클라우드 + 오픈소스 솔루션

Scale UP(Bigger) -> Scale Out(Multi)

LAMP Stack	->	MEAN Stack

Node.js 찬양론 나옴.
	libuv
		libeio	(event io)?
		libev	(event loop)

Blocking	IO작업중 기다리면
Non-Blocking	IO작업중 안기다리면 (C#의 Await)

Reactor
	User단에서 요청 들어오면 커널까지 갔다가 다시 유저레벨로
Proactor
	바로 Kernel level에 요청

https://www.google.co.kr/search?q=IOCP&oq=IOCP&aqs=chrome..69i57.2439j0j1&sourceid=chrome&ie=UTF-8

이래저래 이유를 들면서 성능이 쩐다를 강조하는데......

너무 근시안적인 접근법이라 생각함.

조금만 생각해보면 대안이 넘처나서 제한된 컴퓨터 성능에서도 Node.js가 최선의 방법은 아님.

Node.js Cache서버에 그 Back-end는 Python, C#, JAVA등의 언어를 사용하는게 더 큰규모의 유저를

더 효율적이게 다룰수있다고 생각함.

GO
	Parallelism
		병렬화
	Concurrency
		분업화
		작업이 끝나면 채널에 결과 넣고
		다음 스레드그룹이 결과가지고 연산

강의 4: 백엔드와 오픈소스2

DB단 얘기
MongoDB
Cluster 구성
	Write랑 Read 분배
	Read가 많으면 Write 1 node, Read n node

	Master죽으면 Slave 자동 소생

Sharding DB 수직분할
	MongoDB가 어느정도 자동으로 해줌

Redis
	Remote Dictionary Server

ZooKeeper
	서버 감시 -> 죽으면 다시살림
	단 1회성이란게 문제
ETCD
	도커기반
	존나좋음

Kubernetes
	아니 이걸 소개 안하는게 말이됨?	

Cloud 환경구축하기

강의 1: 배경, 중요성 및 강의 소개

2016년 제작된 강의이다.
Cloud 환경 요즘 관심이 많다고 해야되나, 사실상 사지방에서 건드릴수 있는게 이 블로그 서버밖에 없어서 온갖 변태같은 클라우드 구성을 해놨는데 한번 비교해볼려고 들어본다.

(참고로 이 블로그는 우분투에서 돌아가는 NovaLXD속에서 돌아가는 Docker속에서 구동되고있다.)
(그 전에는 Azure Stack 속의 CoreOS속의 Docker에서 구동되고 있었다.)
(그 전에는 Hyper-V 속의 RancherOS 3개를 엮어서 HA구현)

파트 1 : 기초개념과 기반기술 
(가상화, 컨테이너, 오픈스택)
라즈베리파이가 리눅스기반인데 저연령 대상이라는것을 근거로 리눅스가 이미 보편화된 운영체제라고 소개함.

파트 2 : Cloud 활용과 Saas 개발
(AWS, Google Cloud Platform, 기타사업자.)
(개발언어, Framework 별 Saas 개발, Microservices)
구글이 주도하는 클라우드 개발방향 (MapReduce!)

SDx -> 
    SDD DataCenter
    SDN Network
    SDR Radio

이번강의 핵심 : 한국에서 비리와 부패로 얼룩진 국방부에서 하는것치고는 꽤나 수준깊은 강의라는 인상이다.

강의 2: 클라우드 컴퓨팅의 주요 개념 1

시작은 만만한 오픈소스 역사!

그다음은 리눅스

유저스페이스
커널스페이스
ls -l
에서 l 이 Long의 1을 의미

그냥 전반적인 리눅스의 기초 명령어를 안내해줌.
이번강의 핵심 : 리눅스란 이런것이다.

강의 3: 클라우드 컴퓨팅의 주요 개념 2

정의
	인터넷을 통해 컴퓨팅 서비스를 제공하는 것
	Grid Computing -> 안쓰는 컴퓨팅 자원을 모으는것
	Cloud Computing -> 모아져있는 컴퓨팅자원을 사용하는것.

특징
	Virtualized, Elastic(탄력성있는 = 가용성높음), Massive
	On-demand Self-Service
영향
	Agile Business -> 서버 구성에 걸리는 시간이 줄어 신속한 사업 전개
	DevOps	->	개발자가 관리까지
	MircroServices	->	앱 쪼개기
	Ground-breaking	-> 개발부터 서비스 방식까지에 혁신적인 변화

Private Cloud	->
			Hybrid Cloud!	
Public	Cloud	->

사용자 입장에서는
	SaaS	카톡
	PaaS	Cloud9, GitLab
	IaaS	VPS

Pros
	확장성, 비용유연성
	신뢰성
	최신 아키텍쳐
Cons
	보안
	종속성
	통제권

강의 4: 가상화

서버를 늘리자니 관리하기가 힘듬
그래서 모아놨더니 성능은 엄청 좋은데
다 사용을 못함.
안쓰면 서버는 놀고있을뿐.....
근데 서버 하나에서 여러개 App 돌리면 안정성이 문제됨
	->Hypervisor! (OpenStack, Hyper-V)

네트워크 가상화
	1000대의 서버에 2만개의 VM이 있을경우 2만개의 Physical한 무언가를 둘순 없음
	-> 논리적 네트워크 생성.

스토리지 가상화
	여러 Storage 합쳐서(Amalgamation) 하나의 Logical한 스토리지 구성
	SAN, NAS.....etc

	Block, Disk, Tape, File Virtualization

클라우드 관리
	운영관리
		셀프서비스 포탈, 운영 및 관리도구, 가상화관리.... etc
	보안관리
	사업관리

Type1 Hypervisor	->	Physical Layer 위에 바로 Hypervisor
Type2 Hypervisor	->	OS 위에 Hypervisor

동작원리
	아는건 Pass
	CPU 아키텍쳐 레벨에서 Ring구조를 통해 Hypervisor 수단 제공
	실질적인 성능 손해는 거의 없는정도.
        (라는데 필자의 서버는 가상화하면 너무 느려짐....)

강의 5,6,7: 가상화 실습1,2,3

그냥 VirtualBox 나 Vmware에 적당히 리눅스 하나 설치하는과정
일단 듣기는 했는데 별다른 재미난 사항은 없음.
sudo 발음이 '수두'라는걸 처음 알았음.

강의 8: 컨테이너와 Docker

탄생배경(?)(본인이 아는것과는 다름)
	이전버전 의존성 기반의 앱을 다른 환경에서 구동하긴 어려우니
	통째로 들고다니는 놈이 필요한데
	VM보단 가벼운놈이 필요함!
정의
	engine that automates app deployment into containers
	on top of virtualized container execution environme
	-> 컨테이너 실행환경에서 자동화된 앱 deployment를 해주는 엔진.
특징
	Lean technology
		Hypervisor는 필요없는 OS정보까지 통째로 이동
		vs
		Docker는 Layer기반 이미지만 이동
		
		덤으로 SandBox환경 제공,
		옛날의 Configuration Management Software대체
			각 컨테이너가 설정 독립적이기에 더 편함.
구성요소
	Docker Client	- RESTful 한것
	Docker Daemon	- 알짜배기
	Docker images
		layerd format using Union filesystem (정확히는 AUFS)
	Refistries
	Containers
	
	=> 처음접하는 사람에게 최대한 쉽게 말해주려고 노력하는데
		아쉽게도 더 어려울꺼라 생각함.

Image 생성
	docker commit & docker build & docker-compose

use cases
	Hyperscale Deployment of multi-tenant service 
    경량 sanfboxing
	프로세스 독립 환경
	test/CI/CD 환경

Multi-tenant

강의 9, 10, 11: 컨테이너와 Docker2,3,4

주로 실습내용
	1.Ubuntu환경에서 Docker 설치
	
근데 버전이 너무 옛날꺼라서(1.11.1...;;)
libcontainerd 기반이 아닌 LXC기반의 docker임....;;

	2. Dockerfile
		FROM ubuntu:latest
		MAINTAINER abc
		CMD "echo HelloWorld!"
	3. docker push
	4. docker rmi

	5. docker search puppet
	6. 대충 nginx 깔아서 HelloWorld 뿌려주는 웹서버 만들기
조작법
	.shell
	.filesystem
	.ssh
Container는 mutable <-> image는 아님

FROM
MAINTAINER
RUN
ENV
EXPOSE
CMD
	CMD[,,,] -> bash shell 대신 foreground 실행

Docker Swarm 과 Kubernetes 소개가 나옴.

강의 12 : 클라우드 플랫폼 구축 및 운영 개요

OpenStack이란
	tools for building and managing cloud computing platforms public and private

대표적인 IaaS
	Self-Deployment
	Pay for used computing time
	Flexibility

2010년 NASA RackSpace 공동프로젝트 시작
RESTful API
Oslo Common Libraris (for Python)

유사품
	OpenNebula, CloudStack

Nova
	Compute 가상머신 생성 및 배포
Swift
	Object Storage	(<-> Block Storage)
	Blob Storage 개념과 연관되서 이해
Glance
	img 배포
Cinder Block Storage
	/dev/vdb 생성 담당
Neutron
	SDN
	Multi-tenant cloud 에서 tenant(거주자)간 트래픽 분리
Horizon Dashboard
Keystone
Message broker
Ceilometer telemetry
	측정서비스
Heat Orchestration
..... etc

강의 13 : OpenStack 설치

End User를 위해 개발되지 않고
다양한 구성이 가능하고
다양한 환경에서 사용 가능하다보니

설치하기 힘듬....

=> Configuration Management Tools 사용
	Chef
	Puppet
	Ansible
	Salt
	등
RDOproject: REDHAT OpenStack
	Packstack
		SingleNode용 맛보기 설치법

Packstack : https://www.rdoproject.org/install/packstack/
1. Lacle을 Eng로
	LANG=en_US.utf-8
	LC_ALL=en_US.utf-8
2. 기본적인 설치과정
	$ sudo yum update -y
	$ sudo yum install -y centos-release-openstack-queens
	$ sudo yum update -y
	$ sudo yum install -y openstack-packstack
	$ sudo packstack --allinone
3(Option). 기본 네트워크 프로그램 종료
	$ sudo systemctl disable firewalld
	$ sudo systemctl stop firewalld
	$ sudo systemctl disable NetworkManager
	$ sudo systemctl stop NetworkManager
	$ sudo systemctl enable network
	$ sudo systemctl start network
4. cat keystonerc_admin	->	비번

강의 14, 15 : 오픈스택 운영

Project
	생성시 -> 사용가능한 Resource, User 설정
CirrOS
	그냥 최소한의 Linux
Flavors
	=Template
Network
	GateWay
	Allocation Pool
		, 로 시작부터 끝까지 IP주소

	Internal 과 External를 생성해서 Router로 연결
	Internal
		IPAdress는 임의 지정
	External
		IPAdress는 자기가 배정된걸로

	만들면 기초적인 Topology 보여줌
	Router로 각 네트워크간의 관계형성 가능
	Router
		AddInterface

Key Pair

(외전) 오픈스택 구축기

필자의 서버에는 이미 쓸만한 KVM환경이 구축되어 있어 CentOS 하나 열고 시도해봤는데 중간에 실패했다.

정확히는 설치 직후 VM 내부에서 기본적인 OpenStack은 성공적으로 작동했으나 재부팅이후 Keystone을 포함한 일부 Service가 자동으로 구동되지 않았으며 IP주소를 NAT에서 Bridge로 바꿔 외부에서 접속가능하게 하려고 했으나,

OpenStack내부의 모든 Service는 서로에게 RESTful하게 접속하려다 보니 주소가 필요하게 되고 PackStack은 자신의 IP주소를 기본주소로 설정해버린다......

Serivce가 한두개도 아니고 설정파일 하나하나 찾아서 각 Service별로 IP주소를 전부 변경하는건 일단 사지방에선 엄청난 노가다가 됨으로.... 그냥 첨부터 다시설치하는 방식으로 해결하긴 했으나

왜 mDNS를 사용한 일괄적인 관리를 행하지는 않는가가 의문이다. (물론 결론은 OpenStack은 그런게 필요없는 환경에서 구동되는게 보통이기 때문이겠지만....)

강의 16 : AWS

필요성
    선투자 대신 비용처리
    저가격
    사용한 만큼 지불
	-> 탄력적인 처리용량, 신속한 대응 가능
	(사실 AWS가 아닌 Cloud의 일반적인 내용)

AWS Global Network Backbone
	11 Region		=> 각 Region끼리는 완벽한 독립
	29 Availability Zones	=> 같은 Region 내에는 Low Latency로 연결
	53 Edge Locations	=> 주로 캐쉬서버 같은 역할

AWS Service
	Compute
		VPS, Containers, Application
	Storage
		Static Storage, Content Delivery, Archival Storage
	Database
		RDBMS, NoSQL, DataWareHouse
	Application Layer
		Queue Management, Streaming, Workflow, Real-time Media transcoding
	Analytics
		Hadoop, ML...etc
	Networking
		Route 53 (DNS)
등등 전반적인 소개

강의 17 : AWS2

EC2 소개
	유연한 확장성
		Instance -> AMI -> Instance(Copy)
	Auto Scailing
	Load Balancing

	On-Demand	-> 실시간
	Reserved	-> 정액제
	Spot		-> 남는자원 경매
	Dedicated	-> 독점
S3 소개
	REST 및 SOAP를 사용한 Object Storage
	Bucket
		Object를 담는 Container
		URL SCHEMA : Bucketname.s3.amazonaws.com
		Hashkey를 이용해 Bucket내부 객체 식별
	AWS Glacier
AWS EBS
	Elastic block Storage
Elastic Cache

강의 18 : AWS3

실습
	Instance 하나 만들고 PrivKey를 통해 SSH 접속법 보여줌

	DNS를 DNA라고 잘못 말하는부분이 인상깊음

	username@ipAddress 식으로 putty에서 쓸수있다는거 처음 알았음.

강의 18 : GCP (Google Cloud Platform)

Microsoft 가 dotNet 특화라고 엄청 강조하심.

Computation
Networking
Data Storage
Big Query (빅데이터 분석)
Scaling infrastructure

최소과금 10분 / 그 후 분당 과금

App Engine
	Java, Python, PHP, Go

아키텍처

--

Cloud SQL => Mysql 기반    

DataFlow
	Build, deploy, and run data proccessing pipe
	ETL (Extract, Transform, Load)

강의 19 : GCP2

실습1	:	간단한 VPS 하나 받고 Apache Static webserver 생성

실습2	:	MySQL 서비스 하나 생성하고 사용

별로 한게 없다....;;

강의 20: IaaS, PaaS, SaaS

국내현황
	KT, SKT, 이노그리드 etc

	Cloud Service Broker 사업자
		고객와 Cloud를 연결해주는 서비스 중개자

국내 서비스 사업자 사례
	그냥 상식적인 내용들

강의 21: IaaS, PaaS, SaaS 2

Cloudit 사례
	Jenkis를 통한 CI/CD 가능
	
	여러개의 VM에서 Docker Cluster(Kubernetes사용) 구축가능
		성능적 손해는 조금 있지만 HA 구성 가능

	여러개의 VM에서 Hadoop 기반 시스템 구축가능
		대규모 빅데이터용 병렬연산 가능
		(Tajo?)

강의 22 : SaaS 개발

그냥 맛보기만 할것임을 먼저 강의에서 밝혔음

a software Distribution model in which a 3rd-party provider hosts app and makes them available to end user over internet

Single-Tenant	->	One Company Many App Stacks
Multi-Tenant	->	Many Companies, One Shared Stack

장점
	손쉬운 관리
	자동 업데이트
	호환성	(모든 유저가 같은버전 사용)
	글로벌
	비용유연성 & Scalable
유의점
	특정 공급자에 의존
		공급자 망하면 좆망
	보안문제
		내가 조심해도 뚫릴수있음
	Low-Level은 관리못함
	복잡한 과금모델 -> 예상외의 비용 지출도 가능

SaleForce.com 의 경우
	특징
		다중사용자
		Metadata
		Seamless Upgrade
		Major areas under develop
	
	
	강력한 Metadata를 통한 명확한 구분
	Real-Time Query Optimizer를 통한 성능 향상

강의 22 : SaaS 개발2

개발자 입장:	SOA(Service Oriented Architecture) => Microservice
사용자 입장:	SLA(Service Level Agreement?)	ITSM(IT Service Management)

Cloud Migration 문제
	이미 만들어진건 다 On-Premises 환경일텐데 이거 어찌 옮길꺼임?에대한 문제

	Performance 저하
	Portability	(AD사용시 특히 중요)
	호환성 문제

	주의점
		백업과 재난복구가 광고사항과 다를수 있음
		서버 지역별로 법안에 따라 정보제공의 의무가 있을수도 있음
		서비스 공급자에게 자료유출가능
		안쌀수도 있음.

전략
	Replace	by Saas
	Rehost		Moved to Iaas
	Refactor	Moved to Paas
	Revise		Rebuilt on Paas
	Rebuild		Rebuilt on Paas

주의사항
	다른 가입자와 자원공유하면서 느려질 수 있음

개발방법론
	중요성
		기존방법론과 다르다는데 모르므로 패스
		기존 ASP(App Service Provider) 의경우 Customization을 감당 못하므로 패스

	1. Saas 클라우드 서비스 요구사항 정의
		Saas 요구사항 정의에 필수적인것
			이해관계자 식별 및 요구사항 도출
			공통 및 개별사용자 요구사항 정의 및 정제
			요구사항 변경 관리 및 추적활동
	2. Saas 개발에 필수 활동
		참조/공통 아키텍쳐 설계 및 재사용
		상세 프로세스 및 데이터 설계
		재사용 가능한 부분식별 활동
		-> 재활용을 많이 하장
	기존 개발방법론
		XP(Extreme Programming)	코딩 위주 / 가변성 분석이나 재사용같은거 말아먹음
		CBD	재사용에 중점
		SPLE(Software Product Line Engineering)

		SCoD(Saas Cloud Oriented Devlop)	=> 국내논문

강의 22 : 개발언어 및 Framework 선택하기 1

GAE (Google App Engine)을 사용합시다!
	Automatic Scaling, Load Balancing
	Dynamic Web Server

	Suth Service
	Blobstore
	Task Queues
	Mail
	Image

GAE Java 실습!
	JDK 1.8, Maven

	순서
		Maven으로 Skeleton 생성
			mvn archetype:generate -Dappengine-version=1.9.17
						-Dapplication-id=guestbook
						-Dfilter=com.google.appengine.generate
			mvn clean install
		Maven + devserver => Build, local 실행
		Eclipse에서 maven import
		appengine 상에 HelloWorld!

	=> 자바 안써서 굳이 알필요 있나 싶음.
	=> 참고로 Maven은 Java세계의 Cmake 같은것.

GAE Python 실습!
	WSGI -> App Engine 서버와 interaction
	webapp2 프레음워크 사용
	쟝고랑 AppEngine 같이사용 가능

	!!Native코드는 사용 불가!!

강의 22 : 개발언어 및 Framework 선택하기 2

이번시간은 파이썬 + GAE
=> 기본적인 Hello World http Response 만들기
	api용으로 사용해볼만하지만 어느정도 규모가 있으면 불가할듯.

강의 22 : 개발언어 및 Framework 선택하기 3

Node.js + Docker 놀이!

일단 Node.js 의 기본적인 완벽한 비동기 Javascript 놀이 에대해 소개해줌

Mongodb
Express
Angular.js
Node.js

1.Mongodb 실행
	monogod --dbpath="path/path.js"


	db.articles.insert<<key:value>>

2.Node 가지고 놀기
	package.json으로 npm 설정하기

var http = require('http');

http.createServer(function(req,res){
	res.writeHead(200, {
		{{key : values of http hraders}}
	});
	res.end('hello node.js!!');
}).listen(3000);

강의 24 : 개발언어 및 Framework 선택하기 5

MVC스럽게 간단한 Node.js + Angular 앱 만듬.

귀찮게 강의듣는것보다 소스코드 보는게 이해가 더 빠른데....
제공을 안해주넴.....

function meetupsController($scope){
	$scope.meetupsCount=5;
	$scope.meetups = ["a", "b", "c"]
	$scope.createMeetup = function(){
		$scope.meetups.push({name : $scope.meetupName})
	}
}

<div ng-controller="meetupsController">
	<h1>{{meetupsCount}} </h1>

	<form ng-submit="createMeetup()>
		<input type="text" placeholder="abc" ng-model="meetupName"/>
		<buttone type="submit">Add</button>
	</form>
</div>

강의 25 : Microservices 1

각각의 서비스는 한가지 작업에만 집중!
(WordData.xyz도 처음엔 이런사상으로 시작했으나....
	그당시는 도커를 몰라서 관리가 어려웠음.....
	그 결과 소스코드는 그대로 보관되어있는데
	재기동시킬 염두가 안남....)

SOA (Service Oriented Architecture) 와 사상은 같음 (메세징문제를 다른전략으로 해결)

장점
	쉬운 테스트
	쉬운 개발
	쉬운 배포

	Loose Coupling

Conway법칙
	시스템구조는 그 조직의 커뮤니티구조와 유사해짐

단점
	Network Latency
	운영상의 부담
	Eventual Consistency

유의사항
	기존 단일앱을 분리하는데 시간과 위험성
	Horizontal Slices vs Vertical Clices
	Buisness Domain 중심 + Data-Oriented
	위험의 분산
	Bounded Context 어디까지 공개? 어디까지 숨김? 공통변수는?
	DB는 가급적 숨겨라
	클라이언트 라이브러리 조심
	미들웨어 조심

https://www.nginx.com/blog/introduction-to-microservices/

그 후는 도커 사용해서 간단한 Node.js앱 Containerized
중요한거 없어서 pass

강의 25 : SDX

LAN의 기초
	OSI 7계층으로
	Capsulated된 Frame 관찰
	
	1계층	->	Repeater
	2계층	->	Bridge
	3계층	->	Router

L2 Switch
	Routing Table
		MAC주소랑 해당 MAC주소가 어느 포트(LAN)으로 가야되는지 정보

STP(Spanning Tree Protocol)
	Loop할 가능성을 막아줌.
	(의도적으로 일부 연결 끊어버림)

VLAN
	지역적으로 떨어져있어도 같은 LAN에 있는것처럼

Overlay Network(좀더 상위개념)	<->	Underlay Network(실제 물리적 구성품들)
	Docker Swarm!