본문 바로가기

Development

(15)
[Effective Go] functions Multiple return values Golang의 특징 중 하나는 function과 method가 여러 값을 return시킨다는 것이다. os 패키지의 Write method의 형식은 아래와 같다. func (file *File) Write(b []byte) (n int, err error) 위 method에서 반환되는 값은 작성된 bytes 수(n)와, n != len(b) 일 때 non-nil 상태의 error를 반환한다. Named result parameters return 또는 해당 function 내 결과값은 named 될 수 있다. 또한 일반적인 변수로도 사용된다. named 되었을 때, 해당 타입에 따라 초기화가 수행된다. (int 라면 0) function에서 return이 수행되는..
[Effective Go] Control Structures Golang에서의 제어구문(Control Structures)은 C와 굉장히 밀접하면서도, 다르다. do, while 반복문은 사용하지 않고, for 만을 사용한다. switch는 좀 더 유연히 사용된다. switch를 포함해 select와 같은 multiway communications mulitplexer를 제공하기도 한다. If Golang에서 if 는 아래와 같이 사용된다. if x > 0 { return y } if 와 switch 에서 지역 변수에 대한 초기화 구문을 허용한다. if err := file.Chmod(0644); err != nil { log.Print(err) return err } Go Libraries에서, if 구문이 다음의 명령문(코드)로 수행되지 않게 사용하는 스타일을..
[Effective Go] Names Naming은 다른 언어와 같이 Golang에서도 중요한 의미를 가진다. 패키지 외부로 공개하기 위해서는 First Character는 Upper case로 되어야 한다.(JAVA의 Public과 비슷한 개념) Package names 패키지를 import 하려고할 때, 패키지명은 해당 컨텐츠의 접근자가 된다. 예를 들어 아래의 구문은 "bytes.Buffer"를 가져올 때 사용될 수 있다. import "bytes" 패키지명은 source directory명을 base name로 가진다. 예를 들어 원하는 패키지가 src/encoding/base64 라면 encoding/base64로 import할 수 있다. import "encoding/base64" 패키지를 import 할 때, 패키지는 해당 컨텐..
Linux 로그 관리 logrotate 리눅스에서 서버를 운영하다보면, 서버에서 장애가 발생하거나 상태를 확인할 때 가장 먼저 보는것이 로그입니다. 그래서 대부분의 로그는 남기도록 설정하고, 백업을 통해 특정기간동안 보관하기 마련입니다. 하지만 이 로그들은 시간이 지나면서 하나의 파일로 관리하기에 감당할 수 없을만큼 엄청난 크기로 커지게 됩니다. linux system의 다양한 기능들 중 로그를 관리해주는 logrotate라는 아주 유용한 기능이 있습니다. logrotate는 기본적으로 crontab에서 시작합니다. crontab이 logrotate를 실행하고, logrotate는 logrotate.conf를 참조하여 기본적으로 /etc/logrotate.d 디렉토리에 있는 설정에 맞게 로그 롤링/삭제/백업을 진행합니다. logrotate와 ..
Apache Kafka를 이용한 단일 노드 / 메시지 전송 Kafka를 수행시키기 위해, Kafka 및 Zookeeper를 다운로드합니다. (기본적으로 자바가 설치되어 있어야 합니다.)Kafka 다운로드, Zookeeper 다운로드 1. Zookeeper 및, Kafka 설정 단일 노드로 설정하기로 합니다. 우선 Zookeeper를 설정합시다. 123$ echo ‘1’ > /zookeeper/myid$ cd zookeeper/conf$ cp zoo_sample.cfg zoo.cfgcs [zookeeper/conf/zoo.cfg]12345tickTime=2000initLimit=10syncLimit=5dataDir=/home/shin/zookeeperNode1clientPort=2184cs 저는 Zookeeper Node를 위한 디렉토리를 하나 생성한 뒤, 위와 ..
한국 지도 시각화하기 및 gps 표시 ( D3.js v5를 이용하여) 데이터 시각화로 유명한 오픈소스로 D3.js가 있습니다. v5 버전과 topojson을 이용하여 이번 포스팅에서는 한국 지도 시각화를 구현해보고자 합니다. 앞서, 우리나라 지도에 대한 경계선 데이터가 필요합니다. ( 데이터는 오른편 링크에 공개되어 있으니 이를 참조하시기 바랍니다. 경계선 JSON 데이터 ) 그리고 테스트를 위해 아래와 같이 점에 대한 데이터를 구성합니다. 1 2 3 4 5 6 7 8 9 10 11 12 [ { "tag": "spot1", "lat": 35.86, "lon": 129.18 }, { "tag": "spot2", "lat": 36.13, "lon": 129.25 } ] cs 가장 먼저 장고를 이용해 기본적인 서버를 구현합니다. $ python manage.py startapp..
Python Flask[플라스크] 시작하기 - 1 Anaconda를 설치하였다면, Anaconda Python3는 기본적으로 Flask 라이브러리를 제공합니다. 이를 이용하여 이번 포스팅에는 기본적인 웹 서버 기능을 구현하고자 합니다. (Anaconda 다운로드, Pycharm 다운로드) 파이참을 이용해 New Project를 선택하면 다음과 같은 화면이 보입니다. 왼편의 Flask를 선택한 후, 오른편에서 적절한 프로젝트 위치와 인터프리터 경로를 설정합니다. 생성하게 되면 프로젝트의 구조는 굉장히 간단히 구성되어 있을 것이며, app.py는 다음과 같이 작성되어 있습니다. 12345678910from flask import Flask app = Flask(__name__) @app.route('/')def hello_world(): return 'He..
Python Django[장고] 시작하기 - 2 지난 포스팅에서 Pycharm과 Anaconda Python을 이용하여 기본적인 장고 프로젝트 생성에 대하여 알아보았습니다. 이번 포스팅에는 프로젝트 내에서 장고 어플리케이션 생성에 대해 알아보도록 하겠습니다. 프로젝트 내에서 가장 쉽게 어플리케이션을 생성하는 방법은 아래의 명령어를 터미널에서 수행하면 됩니다 ! $ python manage.py startapp MyApplication 참고로 공식 도큐먼트에서는 다음과 같은 설명이 있습니다. Django는 앱의 기본 디렉토리 구조를 생성할 수 있는 도구를 제공합니다. 이 때 App은 특정한 기능을 수행하는 웹 어플리케이션을 의미합니다. Project는 특정 웹 사이트를 위한 app들과 각 설정들을 한데 묶어놓은 것입니다. Project는 다수의 app을..