프로그래밍 Programming
구글 클라우드 플랫폼 도메인 네임 설정하기 How to Transfer Domain Names to Google Cloud Hosting
2018. 11. 6.워드프레스 홈페이지를 구글 클라우드 플랫폼으로 배포하는 가장 마지막 단계는 바로 도메인 네임을 설정하는 것이다. 다른 호스팅 업체와는 달리 구글 클라우드 플랫폼의 경우 이 부분이 약간 까다롭다. 먼저 사용할 도메인을 구매한 후 다음 가이드를 따라해보자. 1. 클라우드 DNS API 활성화클라우드 콘솔 좌측 상단의 탐색 메뉴를 눌러 API 및 서비스 > 대시보드로 진입 API 및 서비스 사용 설정 클릭 검색창에서 cloud dns 검색 Google Cloud DNS API 선택하여 '사용설정' 클릭 2. 클라우드 DNS Zone 생성다시 클라우드 콘솔 좌측 상단의 탐색 메뉴를 눌러 네트워크 서비스 > Cloud DNS 로 들어간다. 영역 만들기 클릭웹사이트 이름을 영역 이름에, 웹사이트 루트 도메인 이름을..
SSH를 이용한 구글 클라우드 플랫폼 VM 접속하기 - PuTTY 부터 FileZilla 까지
2018. 10. 23.가장 간단하게 구글 클라우드 VM 인스턴스에 접속하는 방법은 다음과 같다. 상기 방법 이외에 주로 사용하게 되는 윈도우 환경에서 Putty 등을 이용하여 접속하는 방법은 다음과 같다. 먼저 PuTTy Key Generator 를 사용하여 키를 생성한다. 아래 링크에서 다운로드한다.https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 다운받은 PuTTy Key Generator 실행하여 Generate 버튼을 클릭한다. 버튼만 누르고 가만히 있으면 아무 변화가 없다. Progress bar 아래 빈공간에 마우스를 움직여야 키가 생성된다. 생성된 모습이다. 여기서 키지문은 수정하지 말고, 코멘트의 경우 사용자명으로 변경한다. 비밀번호를 입력한 후 공..
Go 웹어플리케이션 만들기 Building a Go Web App from Scratch
2018. 10. 13.Go 를 이용한 간단한 웹 어플리케이션을 만들어보자. golang 은 이미 설치되어 있다고 가정한다. Go 설치 이전이라면 다음 포스팅을 참조한다. http://redhotkorea.tistory.com/?id=1821 설치가 끝나면 go 디렉토리로 이동한다. go 디렉토리 아래에 bin 과 src 폴더를 만들고, src 폴더 아래에 welcome-app 폴더를 생성하자. 123~/go/src# mkdir welcome-app~/go/src# cd welcome-app~/go/src/welcome-app#cs다음과 같은 디렉토리 구조를 가지게 된다.1234567/home / /go bin/ //Empty for now src/ /welcome-appcs 구체적인 코딩에 앞서 프런트 엔드 셋업부터 진행하자..
SQLTools connect - cannot save "connections.xml" error
2018. 9. 17.상위 버전 설치하여 진행함. http://www.sqltools.net/index.html?frame=http%3A//www.sqltools.net/downloads.html
Go 언어 입문 - Control Structures - Functions (2) (golang-book)
2018. 9. 9.Returning Multiple Values다수의 값을 함수를 통해 반환할 수 있다.1234567func f() (int, int) { return 5, 6} func main() { x, y := f()}cs이를 위해서 3가지 변경이 필요하다. 먼저, 반환형을 변경해야 하고( ,, 로 구분). 다음으로 표현식을 변경해야한다(, 로 구분). 마지막으로 := or = 의 좌측에 다수의 값이 존재할 수 있도록 대입문을 변경해야 한다. 주로 결과와 에러값을 같이 포함해서 반환하거나 또는 성공 여부를 가리는 불린값을 같이 반환할 때 주로 쓰인다. Variadic FunctionsGo 함수에는 특수한 형식의 함수가 존재하는데, 가변함수가 그것이다. 다음의 예를 보자.123456789101112131415pack..
Go 언어 입문 - Control Structures - Functions (1) (golang-book)
2018. 9. 9.함수라는 것은 인풋 파라메터를 아웃풋 파라메터로 매핑시키는 독립된 코드를 말한다. 함수 (또는 프로시져나 서브루틴으로 알려져있기도 하다)는 종종 블랙박스에 비유되기도 한다. 지금까지 살펴봤던 프로그램에는 오직 하나의 함수만 포함되어 있었다. 1func main() {}cs이제 다수의 함수를 포함한 프로그램을 만들어보자. Your Second Function앞서 살펴봤던 프로그램을 다시 살펴보자.123456789101112package main import "fmt" func main() { xs := []float64{98,93,77,82,83} total := 0.0 for _, v := range xs { total += v } fmt.Println(total / float64(len(xs)))}Co..
Go 언어 입문 - Control Structures - Maps (golang-book)
2018. 9. 5.map은 순서없는 key-value 쌍의 집합체이다. associative array 라고도 알려져 있으며, 해시 테이블 또는 딕셔너리라고도 표현되기도 한다. 연관 키를 사용하여 값을 찾을 때 사용된다. 아래의 예를 보자. 1var x map[string]intcsmap 타입은 map 이라는 키워드 다음에 키의 타입이 괄호 안에 표시되고, 뒤이어 값의 타입이 표시된다. 위의 예시같은 경우 다음과 같이 읽으면 된다. “x is a map of strings to ints.” 배열이나 슬라이스와 마찬가지로 maps 은 괄호롤 사용해접근이 가능하다. 다음을 실행시켜보자. 123456789package main import "fmt" func main() { var x map[string]int x["key"]..
Go 언어 입문 - Control Structures - Slice (golang-book)
2018. 9. 4.슬라이스는 배열의 한 부분이다. 배열과 마찬가지로 슬라이스는 인덱스가 가능하며 길이를 가진다. 하지만 배열과는 달리, 그 길이라는 것이 가변적이다. 다음의 예제를 보자. 1var x []float64cs배열과의 유일한 차이점은 괄호 안의 길이를 나타내는 부분이 비워져 있다는 것이다. 위의 경우에는 x 가 길이 0 으로 생성이 되었다.내장 make 함수를 이용하여 슬라이스를 생성할 수 있다. 아래는 길이 5의 float64 배열과 관련된 슬라이스를 생성한다. 1x := make([]float64, 5)cs슬라이스는 배열과 연관이 있으며, 절대 배열의 크기보다 클 수는 없다. make 함수는 3번째 인수도 갖는데, 아래의 예에서 10은 슬라이스가 가리키는 내포된 배열의 용량을 의미한다. 1x := make(..
Go 언어 입문 - Control Structures - Array (golang-book)
2018. 9. 1.Go 에서 array 는 다음과 같이 표현된다. 1var x [5]intcsx 는 5개의 int 로 구성된 array 이다. 다음의 코드를 실행해보자.123456789package main import "fmt" func main() { var x [5]int x[4] = 100 fmt.Println(x)}cs실행결과는 다음과 같다.123~/go/src/golang-book/chapter6# go run main.go[0 0 0 0 100] Colored by Color Scriptercsx[4] = 100의 의미는 “array x 의 5번째 원소의 값을 100 으로 셋팅하라” 는 것이다. x[4] 가 5번째 원소를 나타낸다는 사실이 이상해보일 수 있으나, array 는 0에서 시작하기 때문에 이상할 것..
Go 언어 입문 - Control Structures - Switch (golang-book)
2018. 8. 31.이제 숫자 옆에 영문 이름도 같이 넣는 프로그램을 만들어보자. 현재까지의 지식으로는 다음과 같이 짤 수 있을 것이다. 12345678910111213if i == 0 { fmt.Println("Zero")} else if i == 1 { fmt.Println("One")} else if i == 2 { fmt.Println("Two")} else if i == 3 { fmt.Println("Three")} else if i == 4 { fmt.Println("Four")} else if i == 5 { fmt.Println("Five")}cs 이건 말도 안된다. switch 명령을 이용해보자. 다음과 같이 다시 작성할 수 있을 것이다. 123456789101112131415package main impo..
Go 언어 입문 - Control Structures - If (golang-book)
2018. 8. 31.다음과 같이 1에서 10까지 숫자 옆에 짝수, 홀수 여부도 같이 출력되는 프로그램을 만들어보자. 123456789101 odd2 even3 odd4 even5 odd6 even7 odd8 even9 odd10 evencs먼저 해당 숫자가 짝수인지 홀수인지 판명하는 방법이 필요하다. 가장 쉬운 방법은 2로 나눈 것이다. 만약 나머지가 없으면 짝수이고, 그렇지 않으면 홀수이다. 그다음 해당 조건에 입각해서 짝수, 홀수 여부에 따라 서로 다른 결과를 출력하는 명령문을 만든다. 대략 다음과 같다.1234567891011if i % 2 == 0 { // even } else { // odd } csIf 문은 조건 다음에 블록이 오는 형태가 for 문과 유사하다. 하지만 If 문에는 els;e 파트가 있다. If ..
Go 언어 입문 - Control Structures - For (golang-book)
2018. 8. 31.1에서 시작하여 10까지 카운팅하는 프로그램을 만들어보자. 지금까지 배운 지식으로는 다음과 같이 작성할 수 있을 것이다. 12345678910111213141516package main import "fmt" func main() { fmt.Println(1) fmt.Println(2) fmt.Println(3) fmt.Println(4) fmt.Println(5) fmt.Println(6) fmt.Println(7) fmt.Println(8) fmt.Println(9) fmt.Println(10)}cs또는 다음과 같이 표현할 수 있다.123456789101112131415package mainimport "fmt" func main() { fmt.Println(`12345678910`)}cs실행결과는 ..
Go 언어 입문 - Variables (golang-book)
2018. 8. 28.정말 유용한 프로그램을 만들기 위해서는 2가지 새로운 컨셉인 변수와 제어흐름문에 대해 알아야 한다. 먼저 변수에 대해 살펴보자. 변수는 특별한 타입과 연관된 이름을 갖는 저장소 위치이다. 앞서 챕터 2에서 만들었던 프로그램을 변수를 사용하도록 고쳐보자. 12345678package main import "fmt" func main() { var x string = "Hello World" fmt.Println(x)}cs실행하면 다음과 같은 결과를 나타냅니다.123~/go/src/golang-book/chapter2# go run main.goHello World Colored by Color Scriptercs원 프로그램의 문자열 리터럴은 그대로 존재를 합니다만, 기존처럼 직접적으로 Println 함수로..
Go 언어 입문 - Types - Booleans (golang-book)
2018. 8. 28.불린값은 true 또는 false 를 나타내는 1비트 정수 타입으로, 아래 3가지 연산자가 불린값을 가진다. &&and||or!not아래의 예를 통해 불린값의 사용법을 알아보자. 1234567891011package main import "fmt" func main() { fmt.Println(true && true) fmt.Println(true && false) fmt.Println(true || true) fmt.Println(true || false) fmt.Println(!true)}cs실행하면 다음과 같다. 123456~/go/src/golang-book/chapter3# go run main.gotruefalsetruetruefalseColored by Color Scriptercs다음과 같..
Go 언어 입문 - Types - Strings (golang-book)
2018. 8. 28.chapter 2 에서 이미 살펴봤듯이 문자열은 텍스트를 표현하기 위한 길이를 가진 문자의 나열이다. Go strings 은 개별 바이트로 이루어지며, 보통 문자 하나에 하나의 바이트를 가지지만, 중국어와 같은 문자는 하나 이상의 바이트를 가지기도 한다. String literals은 "Hello World"와 같이 큰 따옴표로 감싸거나, `Hello World` 와 같이 역따옴표 감싼다. 이 2가지의 차이점은 큰따옴표의 경우 줄바꿈을 포함할 수 없으며 특정 escape 시퀀스를 허용한다는점이다. 예를 들어, \n 은 줄바꿈을, 그리고 \t 은 탭으로 대체된다. 문자열의 길이를 잰다거나, 문자열의 개별 문자에 접근하기, 그리고 2개의 문자열을 합치는 기능이 있다. 아래의 예를 보자. 123456789pa..
Go 언어 입문 - Types - Numbers (golang-book)
2018. 8. 28.간단하게 다음과 같이 생각할 필요가 있다. 모든 개는 4개의 다리는 갖는다. -> 맥스는 개다. -> 따라서 맥스는 4개의 다리를 갖는다. 프로그래밍 언어에서도 마찬가지다. 모든 문자열은 길이를 가진다. -> x 는 문자열이다. -> x 는 길이를 갖는다. 실수의 집합이든, 자연수의 집합이든, 모든 집합의 구성요소는 해당 집합의 다른 요소들과 특징을 공유한다. 예를 들어 자연수의 집합인 ℕ 의 경우 결합법칙이 성립한다. 그리고 프로그래밍 언어에서 모든 값은 특정한 타입을 가지고 특정한 속성을 공유한다. 이런 식으로 수학에서의 집합은 프로그래밍 언어에서 타입과 유사한 면이 있다. Go 는 정적 타입 프로그래밍 언어이다. 이 말은 변수는 항상 특정한 타입을 가지며, 그 타입을 바꿀 수 없다는 의미다. 정적 ..
Go 언어 입문 - Your First Program (golang-book)
2018. 8. 27.“Hello World” 를 출력하는 간단한 프로그램을 만들자. ~/src/golang-book/chapter2 라는 폴더를 만들고, 다음의 내용으로 main.go 파일을 만든다.123456package mainimport "fmt" func main() { fmt.Println("Hello World")}cs해당 폴더로 이동하여 다음과 같이 실행한다. 123~/go# cd src/golang-book/chapter2~/go/src/golang-book/chapter2# go run main.goHello WorldColored by Color ScriptercsHello World가 터미널에 출력되는 걸 확인할 수 있다.go run 명령은 뒤이어 오는 go 파일을 임시 디렉토리에 실행가능한 형태로 저장..
Strings, bytes, runes and characters in Go - (4) Range loops, Libraries
2018. 8. 25.Strings, bytes, runes and characters in Go Range loopsGo 가 UTF-8 을 특별히 다루는 하나의 방법은 문자열에 for range 루프를 사용할 때이다. for range 루프의 경우, 각각의 반복에서 하나의 UTF-8-encoded rune 을 디코딩한다. 루프를 도는 동안, 루프의 인덱스는 현재 rune 의 시작점으로 바이트로 측정되며, 코드 포인트는 그것의 값이 된다. 코드포인트의 유니코드 값과 출력 형태를 보여주는 다음의 예를 보자. 1234567891011package main import "fmt" func main() { const nihongo = "日本語" for index, runeValue := range nihongo { fmt.Print..
Strings, bytes, runes and characters in Go - (3) Code points, characters, and runes
2018. 8. 25.Strings, bytes, runes and characters in Go 유니코드 표준은 단일값으로 표현되는 아이템에 대해 "code point" 라는 용어를 사용한다. 코드포인트 U+2318 은 hexadecimal 값 2318을 갖고 ⌘ 기호로 표현된다(더욱 자세한 내용은 Unicode page 참조). 다른 예를 들어보면, 유니코드 코드 포인트 U+0061 은 LATIN SMALL LETTER A 인 a이다. 그러면 다음과 같은 억음 부호 'A', à 는 어떤가? 물론 문자이고, 코드 포인트 U+00E0 를 갖는다.하지만, 다르게 볼 수도 있다. 아래의 억음 부호 코드 포인트 U+0300 에 U+0061 인 소문자 a를 덧붙인 것으로 말이다. 일반적으로 문자는 얼마간의 서로 다른 코드 포인트의 ..
Strings, bytes, runes and characters in Go - (2) UTF-8 and string literals
2018. 8. 25.Strings, bytes, runes and characters in Go 문자열은 단순히 바이트를 나열해놓은 것이다. 문자를 문자열로 저장할 때, byte-at-a-time representation 을 저장하는 셈이다. 하나의 문자를 가진 문자열 상수를 다음의 3가지 서로 다른 방법으로 출력하는 간단한 프로그램을 만들어보자.plain stringASCII-only quoted stringindividual bytes in hexadecimal 123456789101112131415161718192021package main import "fmt" func main() { const placeOfInterest = `⌘` fmt.Printf("plain string: ") fmt.Printf("%s"..
Strings, bytes, runes and characters in Go - (1) Printing strings
2018. 8. 25.Strings, bytes, runes and characters in Go Go에서 문자열이란 사실 '읽기전용' 바이트 슬라이스라고 할 수 있다. \xNN 표기법을 사용하는 다음의 예를 보자 (바이트는 hexadecimal 값으로 00 에서 FF 까지의 값을 가진다)1const sample = "\xbd\xb2\x3d\xbc\x20\xe2\x8c\x98"cs앞선 예제의 일부 바이트는 ASCII 나 UTF-8 이 아니다. sample 을 출력하면 다음과 같이 흉한 결과물이 나올 것이다 (환경에 따라 출력되는 모양은 다소 다를 수 있다).123fmt.Println(sample) ▒▒=▒ ⌘cs문자열이 어떤 값을 가지고 있는지 정확히 알아보기 위해서, 부분부분 나눠서 살펴볼 필요가 있다. 몇 가지 방법이 있..
고Go 웹서버 만들기 Build a simple web server
2018. 8. 25.Go 는 net/http 패키지를 통해 HTTP 를지원한다. http 패키지를 사용하여 웹서버를 셋팅해보자. 1234567891011121314151617181920212223242526272829package main import ( "fmt" "net/http" "strings" "log") func sayhelloName(w http.ResponseWriter, r *http.Request) { r.ParseForm() // parse arguments, you have to call this by yourself fmt.Println(r.Form) // print form information in server side fmt.Println("path", r.URL.Path) fmt.Println..
How to Write Go Code - Code organization
2018. 8. 24.Workspace작업공간은 Git 등에 의해 관리되는 다수의 버전 관리 저장소를 포함하고 있다. 각각의 저장소는 하나 이상의 패키지를 포함하고 있으며, 각각의 패키지는 단일 디렉토리에 하나 이상의 Go 소스파일로 구성된다. 패키지 디렉토리 경로에 따라 import 경로가 정해진다. 특히 이 점이 프로젝트별로 별도의 작업공간을 갖게 되는 여타 프로그래밍 환경과 다른 점이다. 그리고 작업공간은 버전 관리 저장소와 밀접히 연계되어 있다. 작업공간은 최상단에 3개의 디렉토리를 가진 디렉토리 계층구조를 말한다. src 에는 Go 소스 파일이 들어있다.pkg 디렉토리에는 패키지 객체를 포함한다.bin 디렉토리에는 실행가능한 명령어가 포함되어 있다.go tool 은 소스 패키지를 빌드하고, 결과물인 바이너리를 패키지..
Go 프로그램 삭제 Uninstalling Go
2018. 8. 24.시스템에 존재하는 Go 를 제거할려면, go 디렉토리를 삭제하면 된다. 일반적으로 리눅스, 맥, FreeBSD의 경우 /usr/local/go 에 위치하고, 윈도우의 경우 c:\Go 디렉토리에 존재한다. 그리고 PATH 환경변수에 설정된 Go bin 디렉토리도 삭제해야 한다. 리눅스와 FreeBSD 의 경우 /etc/profile 또는 $HOME/.profile 을 편집해야 한다. Mac OS X 패키지로 설치한 경우 /etc/paths.d/go 파일을 삭제해야 한다. 윈도우 사용자의 경우 환경 변수 섹션을 참고하자.
Go 프로그램 설치 및 테스트 Install the Go tools
2018. 8. 24.설치 파일 다운로드 하단 링크에서 운영체제에 맞는 설치 파일을 다운로드한다. 본 포스팅에서는 리눅스 기반으로 진행한다. https://golang.org/dl/파일을 다운로드한 후 다음과 같이 /usr/local/go 디렉토리를 만들어 압축을 해제한다 (일반적으로 root 계정이나 sudo 를 통해 진행해야 한다).1# tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gzcs/etc/profile (system-wide 인 경우) 또는 $HOME/.profile 파일을 열어 /usr/local/go/bin 을 PATH 환경변수에 추가한다. 12345# /etc/profile: system-wide .profile file for the Bourne shell (sh(..
Luminus 를 이용한 Clojure 방명록 만들기 (5) - 테스트 및 패키지화
2018. 8. 23.Luminus 를 이용한 Clojure 방명록 만들기 (5) Adding some tests이제 어플리케이션이 작동할 준비를 마쳤다. 몇 가지 테스트를 하기 위해 test/clj/guestbook/test/db/core.clj 파일을 열어 다음과 같이 업데이트해보자. /home/fukaerii/guestbook/test/clj/guestbook/test/db/core.clj12345678910111213141516171819202122232425262728(ns guestbook.test.db.core (:require [guestbook.db.core :refer [*db*] :as db] [luminus-migrations.core :as migrations] [clojure.test :refer :..
Test failed in clojure luminus guestbook tutorial
2018. 8. 23.guestbook 튜토리얼을 진행하는 중 마지막 테스트 단계에서 아래의 실패 메시지가 나오는 경우를 만날 수 있다.123456789101112131415161718192021222324252627282930313233~/guestbook$ lein test2018-08-23 08:21:32,895 [main] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Slf4jLoggerProvider lein test guestbook.test.db.core2018-08-23 08:21:34,884 [main] INFO migratus.core - Starting migrations2018-08-23 08:21:34,909 [main] INFO mig..
Luminus 를 이용한 Clojure 방명록 만들기 (4) - 페이지 생성 및 폼입력 다루기
2018. 8. 23.Luminus 를 이용한 Clojure 방명록 만들기 (4) Creating Pages and Handling Form Inputguestbook.routes.home 네임스페이스에 경로가 정의되어 있습니다. 그러면 파일을 열어서 데이터베이스로부터 메시지를 렌더링하는 로직을 넣어보겠습니다. Bouncer 검증과 ring.util.response 레퍼런스와 함께 db 네임스페이스 레퍼런스를 추가해야합니다. /home/fukaerii/guestbook/src/clj/guestbook/routes/home.clj12345678(ns guestbook.routes.home (:require [guestbook.layout :as layout] [compojure.core :refer [defroutes GET ..
Luminus 를 이용한 Clojure 방명록 만들기 (3) - 어플리케이션 구동
2018. 8. 21.Luminus 를 이용한 Clojure 방명록 만들기 (3) Running the Application다음과 같이 개발모드에서 어플리케이션을 구동할 수 있다.1234567891011121314151617~/guestbook$ lein run2018-08-21 10:14:21,661 [main] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Slf4jLoggerProvider2018-08-21 10:14:23,384 [main] INFO guestbook.env --=[guestbook started successfully using the development profile]=-2018-08-21 10:14:23,578 [main] INFO..
Luminus 를 이용한 Clojure 방명록 만들기 (2) - H2 데이터베이스 생성 및 접근
2018. 8. 21.Luminus 를 이용한 Clojure 방명록 만들기 (2) Creating the Database먼저 어플리케이션을 위한 모델을 만들어야 한다. 마이그레이션 폴더에 위치한 -add-users-table.up.sql 파일을 열어보자. 다음과 같은 내용이 포함되어 있을 것이다. 1~/guestbook/resources/migrations$ nano 20180821033932-add-users-table.up.sqlcs 1234567891011 CREATE TABLE users(id VARCHAR(20) PRIMARY KEY, first_name VARCHAR(30), last_name VARCHAR(30), email VARCHAR(30), admin BOOLEAN, last_login TIMESTAMP,..