Monday, July 30, 2018

golang hello world 및 패키지 사용해보기

이전 글 : go 언어의 소개와 설치 

일단 golang을 설치한 후, gopath에 대해서 한번씩 읽어보는 것을 추천.(참고)


테스트 프로젝트 구조


$GOPATH 폴더 안에는, 다음과 같은 3개의 폴더를 반드시 작성
src - 소스 파일(*.go등..)을 배치
pkg - 컴파일된 파일(*.a)이 배치됨
bin - 실행 파일이 배치됨

해당 글에서 사용하는 폴더와 파일들의 최종 구조는 다음과 같다.



기본 패키지 작성해 보기


pkg 폴더에는 패키지 파일이 자동으로 생성되어 위치되고, 그 기초가 되는 소스 코드는 src 폴더 밑에 작성한다. 일단 이번에는 mymath라는 폴더를 작성하였고, mymath는 추후에 패키지 명으로 사용된다. 패키지를 작성할 시에는 반드시 패키지명과 같은 이름의 폴더를 src밑에 생성해야 한다.

여기서, mymath 폴더에 sqrt.go라는 파일을 생성한다. 코드는 다음과 같다. 

위의 코드를 작성한 후, mymath 폴더로 이동하여 go install 커맨드를 실행하면 mymath.a라는 컴파일된 바이너리 파일이 $GOPATH/pkg/${GOOS}_${GOARCH} 폴더 밑에 생성된다. 



작성한 패키지 사용해 보기


바이너리 파일인 mymath.a를 import해서 사용할 수 있다. src/mathapp 폴더 밑에 main.go라는 소스 파일을 작성한다. 코드는 다음과 같다. 

위의 코드를 저장한 후, mathapp 디렉토리로 이동하여 go install 커맨드를 실행한다. 그러면 $GOPATH/bin 폴더 밑에 mathapp.exe 라는 실행 파일이 생성된다. 해당 파일을 실행하면 코드가 실행되며 다음과 같은 결과가 나타난다.

Saturday, July 21, 2018

docker-compose 이용해보기

기본적으로 docker for mac 설치를 전제로 합니다. 현재 공부 중이므로, 정확하지 않은 내용이 있을수도 있습니다.
go 개발환경을 docker를 이용해서 구축해 보려고 노력중입니다.


폴더 구성(호스트 측)


일단 기본적으로 프로젝트 폴더의 구성을 다음과 같이 함. containers폴더 밑에 앞으로 추가할 서비스들(golang, mysql 등등..)을 폴더별로 만들어 나갈 예정이고, 그 밑에 각 서비스들의 dockerfile을 작성할 계획.
docker-compose.yml은 프로젝트 작업 폴더의 루트에 두는 것이 일반적이라고 함.



docker-compose.yml


연결하여 사용하고자 하는 여러 서비스들에 대해서 기본적인 구성을 정의하는 역할을 하는 파일

version: '3'

yml의 기술 버전을 의미


build

Dockerfile이 있는 폴더 경로를 지정. 경로는 docker-compose.yml 파일이 있는 곳으로부터의 상대 패스를 작성.
docker-compose build 명령어를 실행할 경우, 지정한 폴더 바로 밑의 Dockerfile을 읽어서 실행.


volumes

호스트(로컬 PC)와 컨테이너의 폴더를 동기화 시키는 역할. 예를 들어, ./containers/nginx/html:/var/www/ 은 호스트의 ./containers/nginx/html 폴더를 컨테이너의 /var/www에 마운트 한다는 의미.


ports

포트의 공개 내용. "8080:80" 은 호스트측의 8000 포트와 컨테이너측의 80 포트를 연결한다는 의미.



nginx의 Dockerfile


FROM

Docker 이미지를 구축할 때, 기본적으로 사용하게 될 이미지를 지정. 로컬에 해당 이미지가 없을 경우, docker hub에서 자동으로 다운로드.


RUN

컨테이너 내에서 실행할 커맨드를 지정. docker-compose build 명령어를 입력할 시, 해당 커맨드가 실행.



실행


docker-compose build 커맨드를 입력하여 연결된 서비스들을 실행시킬 수 있는 이미지를 생성한 후, docker-compose up 커맨드를 입력하여 이미지의 컨테이너를 실행
브라우저에서 localhost:8080을 입력하면, 호스트측의 html폴더 밑의 index.html가 표시되는 것을 확인 가능.

이로써, 해당 docker이미지를 실행한 후, 호스트측의 index.html파일을 수정하면 자동으로 반영이 되는 것을 브라우저에서 확인 가능.

Monday, July 9, 2018

Docker 기본적인 컴포넌트 소개

Docker 컴포넌트


 docker는 코어 기능을 제공하는 "docker engine"을 중심으로, "이미지 작성 -> 공개 -> 컨테이너 실행"을 하기 위한 컴포넌트(부품)가 제공된다.


주요 컴포넌트는 다음과 같다.

Docker Engine (Docker의 코어기능)

 Docker이미지 생성이나 컨테이너의 실행등을 하기 위한 코어 기능
 Docker 커맨드나 DockerFile을 이용하여 이미지를 생성한다.


Docker Machine (Docker 실행 환경 구축)

 Docker 커맨드를 이용하여 하이퍼바이저, VirtualBox, AWS, AZURE등의 클라우드 환경에 Docker 실행 환경을 자동 생성하기 위한 툴


Docker Compose (복수의 컨테이너 일원 관리)

 복수의 컨테이너 구성 정보를 코드로 정의하고 커맨드를 실행함으로써 어플리케이션 실행 환경을 구성하는 컨테이너들을 일원 관리 하기 위한 툴


Docker Registry (이미지 공개/공유)

 Docker image를 공개/공유하기 위한 레지스트리 기능
 Docker 공식 레지스트리 서비스인 Docker Hub도 해당 기능을 사용하고 있음


Docker Hub (Docker 공식 레지스트리)

 CentOS, nginx등의 공식 이미지는 해당 레지스트리로부터 다운로드 가능하다.
 public이므로 많은 유저들이 자신들의 이미지를 공개하고 있다.
 Docker image를 private로 하고 싶을 경우, 사내 서버에 Docker Registry을 만들고 push하면 된다.



Friday, July 6, 2018

go언어의 소개와 설치


Go 언어란?

 google에서 개발한 프로그래밍 언어로써, 보통 golang 으로 표현한다.


특징

크로스 컴파일 서포트

 컴파일시에 OS나 CPU아키텍처를 지정하는 것이 가능하기 때문에, 각각의 환경에 맞춘 실행 파일 생성이 가능하다.

병행처리 서포트

 고루틴(goroutine)이라는 경량 쓰레드를 사용해서 병행처리가 가능하며, 동시에 실행되는 고루틴 간에는 채널 기능을 사용하여 데이터를 주고받는 것이 가능하다.

풍부한 개발환경

 기본적으로 제공되는 표준 패키지가 풍부하기 때문에, 개발시에 활용하기가 쉽다.
 커맨드나 툴도 다수 존재함


Golang으로 불가능한 작업

 다른 프로그래밍 언어에 친숙한 사람에게는 사용하기 불편한 부분이 존재한다.
 그 부분은 각 프로그래머 간에 코딩 스타일에 따라서 코드의 차가 발생하는 것을 방지하기 위한 것.

if문 통일

 삼항연산자를 사용할 수 없다.
 (조건식 ? 조건이 참일 경우 : 조건이 거짓일 경우)

반복문이 for문밖에 없다.

 while이나 do/while등의 구문을 지원하지 않는다.

포인트 연산이 없다.

 포인터나 포인터 연산이 배제되어 있기 때문에, 메모리 누수를 회피할 수 있다.

암묵적인 형변환 배제

 형변환을 확실하게 표시하지 않으면 에러가 발생함


설치

  1. https://golang.org/doc/install 액세스
  2. "Download Go" 버튼 클릭
  3. Go1.10.3.windows-amd64.msi 파일 다운로드
  4. 인스톨(default : C:¥Go)


설치 확인

  1. Go프로젝트를 배치하고자 하는 폴더를 정해서, 그 밑에 src/hello 디렉토리를 생성
  2. 해당 디렉토리 안에 hello.go파일 생성
  3. 아래의 코드를 작성
  4. cmd로 hello.go파일이 위치하고 있는 폴더로 이동하여, go build를 입력
  5. 에러 메세지가 발생하지 않으면 설치가 정상적으로 성공
  6. hello.go와 같은 디렉토리에 hello.exe이 생성되어 있는지 확인
  7. cmd에서 hello를 입력하여 "hello, world"가 표시되는지 확인

뉴라이트의 기본적인 개념과 특징

뉴라이트  한국에서 자칭 신우익을 이르는 말. 영어의 신(new) + 우익(right)의 합성어이다.  옛날 종북주의자 시절의 파시즘과 전체주의적 사상을 간직한 채 친일반민족 행위 옹호로 돌아선 사람들이다.  우파를 가장한 짝퉁 우파...