명령행 인자(Command-line arguments)는 프로그램에 데이터를 넘기기 위해서 사용한다. 예를 들어 go run hello.go의 경우 run 과 hello.go 를 go 프로그램의 명령행 인자로 사용하고 있다. os.Args는 슬라이스 자료구조로, 명령행 인자들을 저장한다. 슬라이스의 첫번째에는 명령행 인자가 아닌 실행 프로그램의 이름이 들어간다. 따라서 os.Args 로 명령행 인자에 접근 할 수 있다. 아래는 명령행 인자의 처리 예제다.
Command Ling Flag는 명령행 프로그램의 옵션을 처리하기 위해서 사용한다. 예를 들어 wc -l에서 -l 이 command line flag다. Go언어는 command line flag의 처리를 위한 flag 패키지를 제공한다.이 코드는 실행 할 수 있지만 아직은 명령행 인자를 받지 못하기 때문에 기본 값만을 출력한다. flag패키지는 string, integer, boolean 타입의 옵션을 처리 할 수 있다. flag.String("word","foo", "a string") 코드를 보자. "world"가 옵션이고 "foo"는 기본 값이다. world 옵션을 생략 할 경우 world에 "foo"가 입력된다. 마지막 값 "a string"는 도움말이다. flag 패키지는 도움 말을 위한 -h 옵션을 기본으로 지원한다. flag 메서드들은 모두 포인터를 반환한다. 따라서 코드에서 값을 사용하기 위해서는 포인터를 사용해야 한다. fmt.Println 메서드를 보면 모두 포인터를 사용하고 있음을 알 수 있다.
코드가 많은 사이트다. 그래 아래처럼 웹에서 직접 코드를 수정도 하고 실행도 할 수 있도록 코드 실행기를 붙였다. 유용하긴 한데, 코드를 실행하고 그 결과를 화면에 출력하는 방식이라서 표준입력이나 python interactive mode등을 사용 할 수 없다. 그래서 웹 터미널 애플리케이션을 찾아보기로 했다.구글님에게 물어 물어서 언어 기반이고 tty.js는 node 기반이다. 둘 다 웹 터미널을 제공하는 단일 애플리케이션으로 훌륭하긴 하지만, 웹 터미널을 내 사이트에 붙여야 했기 때문에 좀 더 간단하고 수정하기 편한 녀석을 선택해야 했다. 일단 tty.js를 선택했다. 대략 아래와 같은 일을 하는 애플리케이션 이다.
백앤드 애플리케이션의 대부분이 REST 방식의 웹 애플리케이션이다. 애플리케이션들은 모두 아파치 웹 서버 방식의 엑세스로그를 남긴다. 일반유저들이 사용하는 API들이다 보니 상당한 크기의 로그파일들이 만들어진다. 일주일만 그냥 둬도 파일의 크기가 수 기가바이트를 넘어갈 판이다. 모든 로그 파일들은 ELK로 어차피 색인이 되기 때문에, 굳이 시스템에 남겨두거나 백업할 필요도 없다.
SRV(Service record)는 DNS(Domain Name System)에서 서비스의 위치(호스트네임 과 포트번호)를 저장하기 위해서 사용하는 레코드다. SIP(Session Initiation Protocol)과 XMPP(Extensible Messaging And Presence Protocol)등이 SRV레코드를 사용한다. 그 밖에 NginX와 HAProxy와 같은 프락시 소프트웨어들도 SRV를 사용한다. SRV 레코드 형식은 아래와 같다._service._proto.name. TTL class SRV priority weight port target. service proto name TTL
여기에서 사용한 테스트 코드는 에서 다운로드 할 수 있다.클라우드와 MSA와 의 등장으로 (2016년 6월)TDD가 재조명 받고 있다. TDD의 큰 단점 중 하나는 제대로 적용하려면 상당히 많은 시간과 노력이 필요하다는 점이다. 특히 여기 저기 연동되는 라이브러리나 소프트웨어가 많은 경우 테스트가 굉장히 복잡해지는데, 복잡해지는 만큼 테스트의 신뢰성도 함께 떨어진다. TDD는 유닛 테스트를 기본으로 하는데, 애플리케이션이 복잡해지면 유닛테스트에 간섭하는 객체들이 많아닌다. 이들을 고려하다 보면 테스트를 위한 설계로 변질되는 경우가 있다. 데이터베이스, 소켓, UI가 서로 엉켜있는 소프트웨어를 테스트 한다고 생각해보라. 머리 좀 아플 것이다. 물론 TDD가 테스트를 쉽게 할 수 있는 설계를 지향하긴 하지만, 테스트를 쉽게 할 수 있는 설계와 테스트를 위한 설계는 엄연히 다른 것이다.
액터 모델(Actor Model)은 컴퓨터 과학에서 동시성(concurrent)문제를 해결하기 위해서 사용하는 소프트웨어 개발 모델이다. 연극 무대는 여러 액션들이 동시에 일어난다. 감독은 하나 이상의 액터(배우)에게 명령(큐 사인이라고 하던가 연극을 잘 몰라서)을 전달하는 데, 명령을 받은 액터들은 자기의 액션과 대본을 소화한다. 감독은 큐 사인만 내릴 뿐으로, 나머지 행동은 액터들이 전적으로 알아서 진행한다.
컨테이너(Container)를 기반 가상화 시스템이라고 해서 가상머신(Virtual machine) 기반 가상화 시스템과 다를 점은 없다. 컨테이너 가상화를 위한 네트워크, 스토리지 가상화 기술은 가상머신 가상화에서 이미 완성됐다. 단지 머신을 가상화 하느냐 하지 않느냐의 차이만 있을 뿐이다. 그러므로 컨테이너 기반 가상화 시스템을 만든다고 하면, 기존에 사용하던 네트워크/스토리지 가상화 기술을 기반으로 컨테이너 오케스트레이션 툴을 올리면된다.
구글의 TensorFlow를 공부하기 위해서 만든 페이지다. TensorFlow를 공부하기 위해서라고 하면 오해의 소지가 있을 것도 같다. TensorFlow로 머신러닝을 공부하려고 한다는게 정확한 표현인 것 같다.25년전에 이미 수학을 포기한 몸이라서, 아마 수학까지 덤으로 공부하게 될 것 같다(수학을 주로 하고 TensorFlow가 덤이 될지도).TensorFlow는 데이타 플로우 그래프을 이용한 수치 계산을 도와주는 오픈소스 소프트웨어 라이브러리다. 그래프를 구성하는 노드(node)는 수학적 연산을 나타내며, 엣지(edge)는 노드들 사이에 이루어지는 다차원 데이터 배열(multidimensional data arrays)의 통신을 나타낸다. 다차원 데이터 배열은 텐서(Tensor)라고 하는데, 이들의 흐름을 처리하기 때문에 TensorFlow라고 이름을 붙였다.
에서 텐서플로우(TensorFlow)부분을 보려고 하니 선형회귀(Linear Regression)라는 녀석이 튀어나왔다. 이 녀석 부터 살펴보기로 했다.선형회귀는 종속 변수 y와 한 개 이상의 독립 변수 X와의 선형 관계를 모델링하는 회귀분석 기법이다. 한 개의 설명 변수에 기반한 경우에는 단순 선형회귀, 둘 이상의 설명 변수에 기반한 경우에는 다중 선형 회귀라 한다. 회귀분석이란 한 변수에 대한 다른 변수의 변화를 예측할 때, 그 관계를 함수관계(Y=F(Xs))로 나타내는 분석을 말한다.
12 POSTS HERE
예제로 살펴보는 Go : Command Line Arguments
명령행 인자(Command-line arguments)는 프로그램에 데이터를 넘기기 위해서 사용한다. 예를 들어 go run hello.go의 경우 run 과 hello.go 를 go 프로그램의 명령행 인자로 사용하고 있다. os.Args는 슬라이스 자료구조로, 명령행 인자들을 저장한다. 슬라이스의 첫번째에는 명령행 인자가 아닌 실행 프로그램의 이름이 들어간다. 따라서 os.Args 로 명령행 인자에 접근 할 수 있다. 아래는 명령행 인자의 처리 예제다.
예제로 살펴보는 Go : Command-Line Flags
Command Ling Flag는 명령행 프로그램의 옵션을 처리하기 위해서 사용한다. 예를 들어 wc -l에서 -l 이 command line flag다. Go언어는 command line flag의 처리를 위한 flag 패키지를 제공한다.이 코드는 실행 할 수 있지만 아직은 명령행 인자를 받지 못하기 때문에 기본 값만을 출력한다. flag패키지는 string, integer, boolean 타입의 옵션을 처리 할 수 있다. flag.String("word","foo", "a string") 코드를 보자. "world"가 옵션이고 "foo"는 기본 값이다. world 옵션을 생략 할 경우 world에 "foo"가 입력된다. 마지막 값 "a string"는 도움말이다. flag 패키지는 도움 말을 위한 -h 옵션을 기본으로 지원한다. flag 메서드들은 모두 포인터를 반환한다. 따라서 코드에서 값을 사용하기 위해서는 포인터를 사용해야 한다. fmt.Println 메서드를 보면 모두 포인터를 사용하고 있음을 알 수 있다.
tty.js
코드가 많은 사이트다. 그래 아래처럼 웹에서 직접 코드를 수정도 하고 실행도 할 수 있도록 코드 실행기를 붙였다. 유용하긴 한데, 코드를 실행하고 그 결과를 화면에 출력하는 방식이라서 표준입력이나 python interactive mode등을 사용 할 수 없다. 그래서 웹 터미널 애플리케이션을 찾아보기로 했다.구글님에게 물어 물어서 언어 기반이고 tty.js는 node 기반이다. 둘 다 웹 터미널을 제공하는 단일 애플리케이션으로 훌륭하긴 하지만, 웹 터미널을 내 사이트에 붙여야 했기 때문에 좀 더 간단하고 수정하기 편한 녀석을 선택해야 했다. 일단 tty.js를 선택했다. 대략 아래와 같은 일을 하는 애플리케이션 이다.
logrotate를 이용한 로그 파일 관리
백앤드 애플리케이션의 대부분이 REST 방식의 웹 애플리케이션이다. 애플리케이션들은 모두 아파치 웹 서버 방식의 엑세스로그를 남긴다. 일반유저들이 사용하는 API들이다 보니 상당한 크기의 로그파일들이 만들어진다. 일주일만 그냥 둬도 파일의 크기가 수 기가바이트를 넘어갈 판이다. 모든 로그 파일들은 ELK로 어차피 색인이 되기 때문에, 굳이 시스템에 남겨두거나 백업할 필요도 없다.
SRV record
SRV(Service record)는 DNS(Domain Name System)에서 서비스의 위치(호스트네임 과 포트번호)를 저장하기 위해서 사용하는 레코드다. SIP(Session Initiation Protocol)과 XMPP(Extensible Messaging And Presence Protocol)등이 SRV레코드를 사용한다. 그 밖에 NginX와 HAProxy와 같은 프락시 소프트웨어들도 SRV를 사용한다. SRV 레코드 형식은 아래와 같다._service._proto.name. TTL class SRV priority weight port target. service proto name TTL
Go언어에서의 TDD
여기에서 사용한 테스트 코드는 에서 다운로드 할 수 있다.클라우드와 MSA와 의 등장으로 (2016년 6월)TDD가 재조명 받고 있다. TDD의 큰 단점 중 하나는 제대로 적용하려면 상당히 많은 시간과 노력이 필요하다는 점이다. 특히 여기 저기 연동되는 라이브러리나 소프트웨어가 많은 경우 테스트가 굉장히 복잡해지는데, 복잡해지는 만큼 테스트의 신뢰성도 함께 떨어진다. TDD는 유닛 테스트를 기본으로 하는데, 애플리케이션이 복잡해지면 유닛테스트에 간섭하는 객체들이 많아닌다. 이들을 고려하다 보면 테스트를 위한 설계로 변질되는 경우가 있다. 데이터베이스, 소켓, UI가 서로 엉켜있는 소프트웨어를 테스트 한다고 생각해보라. 머리 좀 아플 것이다. 물론 TDD가 테스트를 쉽게 할 수 있는 설계를 지향하긴 하지만, 테스트를 쉽게 할 수 있는 설계와 테스트를 위한 설계는 엄연히 다른 것이다.
Golang 에서의 Actor 모델
액터 모델(Actor Model)은 컴퓨터 과학에서 동시성(concurrent)문제를 해결하기 위해서 사용하는 소프트웨어 개발 모델이다. 연극 무대는 여러 액션들이 동시에 일어난다. 감독은 하나 이상의 액터(배우)에게 명령(큐 사인이라고 하던가 연극을 잘 몰라서)을 전달하는 데, 명령을 받은 액터들은 자기의 액션과 대본을 소화한다. 감독은 큐 사인만 내릴 뿐으로, 나머지 행동은 액터들이 전적으로 알아서 진행한다.
Container 기반 가상화 시스템에서의 Service Discovery
컨테이너(Container)를 기반 가상화 시스템이라고 해서 가상머신(Virtual machine) 기반 가상화 시스템과 다를 점은 없다. 컨테이너 가상화를 위한 네트워크, 스토리지 가상화 기술은 가상머신 가상화에서 이미 완성됐다. 단지 머신을 가상화 하느냐 하지 않느냐의 차이만 있을 뿐이다. 그러므로 컨테이너 기반 가상화 시스템을 만든다고 하면, 기존에 사용하던 네트워크/스토리지 가상화 기술을 기반으로 컨테이너 오케스트레이션 툴을 올리면된다.
Tensorflow
구글의 TensorFlow를 공부하기 위해서 만든 페이지다. TensorFlow를 공부하기 위해서라고 하면 오해의 소지가 있을 것도 같다. TensorFlow로 머신러닝을 공부하려고 한다는게 정확한 표현인 것 같다.25년전에 이미 수학을 포기한 몸이라서, 아마 수학까지 덤으로 공부하게 될 것 같다(수학을 주로 하고 TensorFlow가 덤이 될지도).TensorFlow는 데이타 플로우 그래프을 이용한 수치 계산을 도와주는 오픈소스 소프트웨어 라이브러리다. 그래프를 구성하는 노드(node)는 수학적 연산을 나타내며, 엣지(edge)는 노드들 사이에 이루어지는 다차원 데이터 배열(multidimensional data arrays)의 통신을 나타낸다. 다차원 데이터 배열은 텐서(Tensor)라고 하는데, 이들의 흐름을 처리하기 때문에 TensorFlow라고 이름을 붙였다.
TensorFlow를 이용한 선형회귀분석
에서 텐서플로우(TensorFlow)부분을 보려고 하니 선형회귀(Linear Regression)라는 녀석이 튀어나왔다. 이 녀석 부터 살펴보기로 했다.선형회귀는 종속 변수 y와 한 개 이상의 독립 변수 X와의 선형 관계를 모델링하는 회귀분석 기법이다. 한 개의 설명 변수에 기반한 경우에는 단순 선형회귀, 둘 이상의 설명 변수에 기반한 경우에는 다중 선형 회귀라 한다. 회귀분석이란 한 변수에 대한 다른 변수의 변화를 예측할 때, 그 관계를 함수관계(Y=F(Xs))로 나타내는 분석을 말한다.