전체 글 1296

Maven 스터디 노트

Maven의 가장큰 특징은 best practice를 기반으로 하며, 마치 표준 처럼 제공하기 때문에, 모든 개발자가 공통으로 사용할 수 있다.디렉토리 구조, 빌드 배포의 절차등을 템플릿 형태로 제공한다. mvn archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DgroupId=com.mycompany.app \ -DartifactId=my-app groupId - 조직이나 도메인을 구별하기 위한 identitifier (mvn install시 이 구조로 source directory가 생성됨)version - 빌드 버전 (artifact 버전)artifactId - project에 의해서 생성되는 파일명 예를들어 jar를 만드..

Maven

http://www.sonatype.com/books/mvnex-book/pdf/mvnex-pdf.pdf Maven은 빌드 결과물을 goal이라는 개념으로 정의하며 . war,jar, Ruby on Rails 를 만드는 goal, junit을 수행하는 goal, jar로 패키징 하는 goal등이 구체적인 goal이 될 수 있다.이러한 goal을 지원하기 위해서는 Maven에서 plug in 이라는 개념을 사용한다.하나의 plug in 은 여러개의 goal을 지원한다.예를 들어 jar를 만드는 plug in의 경우, compiler plug in, jar file 만드는 플러그인등을 지원한다.(goal 들이 모여서 하나의 build를 만든다. ant의 각 task 개념과 유사하다.) archetype에 따..

Fabric을 이용한 간단한 Tomcat deploy

Tomcat war deploy시, 가장 이상적인 방법은 tomcat stop > copy war > start 순서이다.아래는 간단하게 Python 기반의 Fabric을 이용하여, EC2상에서 pem (SSH)를 이용하여, Host들에 deploy하는 과정을 정의함 #fabfile.pyfrom fabric.api import run,env,execute,taskfrom fabric.operations import local,put def tomcat_cluster(): env.user ='root' env.hosts=['host1.server.com','host2.server.com'] # list of server setting env.key_filename='~/pem/pemfile.pem' # p..

Python Fabric Install

AWS EC2 (Amazon Linux 기준) 1. Python install (dev package로 설치) (반드시 dev package가 설치되어 있어야지, pycrypto 설치시 에러가 나지 않음. pycrptyo는 encryption 관련 라이브러리로 C 라이브러리를 사용하는데, 컴파일중, python.h를 사용한다. 이 헤더 파일은 dev package안에 포함되어 있음) - yum install python-devel 2. pip install $ curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py $ [sudo] python get-pip.py 3. gcc가 인스톨 (pycrypto 설치를 위해서 필요함) yum instal..

간단한 S3 Performance Test

스크립트 from boto.s3.connection import S3Connectionfrom boto.s3.key import Keyimport time startime=time.time() conn = S3Connection(XXX','XXX') bucket = conn.create_bucket('terry-s3-performance-test')for i in range(1,100):k = Key(bucket)k.key = "logfile%s" % ik.set_contents_from_filename('logfile origin')conn.close()endtime = time.time() print 'Elaped time %s'% (endtime-startime) 위의 스크립트를 멀티프로세스로 돌려..

Python 공부 노트 10. - Django에서 Admin 화면 만들기

Admin 메뉴 추가 하기setting.py에서- admin 항목 uncomment 처리. INSTALLED_APPS에서 admin 모듈을 uncomment 처리하면됨- 다음으로 manage.py에서 syncdb 처리 (app이 새로 등록되었으니 데이타 베이스 테이블 생성) urls.py에서 - admin url을 오픈해주기 위해서 admin 기능 관련 코드 uncomment 처리 그후 django 서버 기동하고 http://xxxx//admin 으로 로그인 하면됨.로그인시 id/passwd는 처음에 manage.py syncdb 할때 넣었던 값으로 함.이 admin 화면에서는 사용자 관리, 그룹 관리, 권한 관리등의 기본적인 기능들을 제공한다. Admin 메뉴에 App admin 기능 추가 하기djan..

Python 공부 노트 8. - Django 에서 model을 이용한 기본 데이타 베이스 프로그래밍

Django는 기본적으로 MVC 모델을 가지고 있고, DB 접근에 대해서는 OR Mapper와 같은 기능을 model 기능을 이용해서 제공한다. 사실 최적화 정도는 조금 고려해봐야 겠지만, 기본적인 사용 방법은 다음과 같다. ==python manage.py syncdb- setting.py를 참고로 하여, default table을 데이타베이스에 생성 python startapp {appname}- 새로운 app을 생성함. - 생성후에는 setting.py에 가서, INSTALLED_APPS 부분에 생성한 app이름을 넣어줘야 컨테이너가 인식함INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.s..

Python 공부 노트 7. - Django 설치

설치Python 설치 후, Django 다운로드 https://www.djangoproject.com/download/ 후에, 압축 풀고 > python setup.py install 설치 확인>>> import django >>> print(django.get_version()) 1.6웹사이트 생성django-admin.py startproject mysitedajngo-admin.py는 C:\dev\Python27\Scripts 에 있음해당 디렉토리에 웹사이트 관련 디렉토리 생성됨 (일종의 Tomcat Home, WebLogic Domain Home 디렉토리 같은 개념, 바이너리는 python 디렉토리 아래에 있음) 웹사이트 실행python manage.py runserver 참고 자료 - https..

Python 공부 노트 6. - Logging

http://docs.python.org/2/howto/logging-cookbook.html # Add the log message handler to the loggerhandler = logging.handlers.RotatingFileHandler( LOG_FILENAME, maxBytes=20, backupCount=5) my_logger.addHandler(handler)my_logger.debug('log message here....') Logger: 일종의 identifier로, 애플리케이션 마다 logger를 정하 수 있음 handler: 파일 핸들러, 소켓 핸들러, Rotating 파일 핸들러등,스트림 핸들러(Console 등)※ DB Handler는 없는 듯 하고, 소켓 핸들러를 이..

Python 공부 노트 5. - 단위 테스트

단위테스트는 자바의 JUnit과 사상이 기본적으로 같음 import unittest class SimpleTest(unittest.TestCase): @classmethod def setUpClass(cls): print("set up class") return @classmethod def tearDownClass(cls): print("tearDown class") def setUp(self): print("this is setup") return def tearDown(self): print("this is tear down") return def testSimple(self): self.assert_(1==2, "my assert failed") def testSecond(self): self.a..

Python 공부 노트 4. - 초간단 RDBMS 프로그래밍

RDBMS 프로그래밍시에는 해당 RDBMS에 대한 드라이버(모듈을) import해야 한다. sqlite의 경우는 이미 들어가 있다. 아래는 가장 기본적인 코드 이다.import sqlite3 conn = sqlite3.connect("datafile")cursor = conn.cursor()cursor.execute("drop table test")cursor.execute("create table test (name text,count integer)")cursor.execute("insert into test(name,count) values('Terry',1)")cursor.execute("insert into test(name,count) values('Cath',2)")conn.commit()r..

성공한 사람들의 특징

내가 만나본 성공한(?) 사람들의 특징.여기서 성공한 사람들이란, 사업등이나, 특이한 기술로 성공한 케이스가 아니라, 조직내의 승진을 통해서 성공을 한 사람들을 정의한다. 1. 철저한 자기 관리 - 아침에 무지 일찍 나온다. 그리고 운동등을 통해서 체력을 유지한다.2. 가족과의 원할한 관계 - 가족과 원할한 관계를 유지한다. (그만큼 시간을 투자하고 노력을 한다.) 이를 바탕으로 든든한 스폰서 쉽을 유지한다. (가족으로 부터) 3. 원할한 커뮤니케이션 스킬 - 커뮤니케이션 스킬이 매우 뛰어나서 적을 만들지 않고 사람과의 관계를 잘 만든다. 또는 적을 만드는 케이스도 있지만 프리젠테이션이나 비지니스관점에서 문제를 정의하고 설명하는 능력이 매우 뛰어나다. 4. 다른 조직과 커뮤니케이션 능력이 뛰어나다. : ..

IT 이야기 2013.01.09

Python 공부 노트 3. - 데이타 모델 (List)

- insert,append,remove를 이용하여 데이타 추가,삭제 가능- list.sort()를 이용하여 소팅 가능.- 이미 소팅된 리스트에 대해서 bisect.insort({list},newvalue)하면, 소팅된 형태로 insert가 됨- list.sort(compareFunction)을 하면 custom sorting이 가능 def compareFunction(str1,str2): return cmp(len(str1),len(str2))- * 를 하면 N배로 리스트를 복사 예를 들어 [1,2] * 2 = [1,2,1,2]- min,max 사용 가능

Python 공부 노트 2. - 패키지

파이썬의 패키지는 디렉토리 구조를 그대로 사용함 (명시적으로 자바처럼 package라고 정의 안함) - __init__.py : 해당 패키지가 import될때 실행되는 스크립트- __all__ : __init__.py내에 __all__ = ['하위패키지명',..] 식으로 정의하는데, 이는 from {package) import * 를 할때, 리턴되는 모듈 명이다. 자바처럼 import * 하면 모두가 import되는게 아니라, 예를 들어 윈도우즈의 경우 module.py 파일과 Module.py 파일을 같은 파일로 취급(대소문자를 가리지 않기 때문에), 명시적으로 import * 시 패키지내의 어떤 모듈을 -import 할지를 정해줘야 한다.- import : import는 import하고자 하는 mod..

Python 공부 노트 1. - 기본 데이타 형

List 데이타형 : []를 사용lines = string.split(text,'\n') # text를 \n을 delimiter로 사용하여 한줄씩 나눠서 배열 형태로 리턴 chunk = lines[:to]# chunk에 0~to까지 set을 리턴chunk = lines[from:]# chunk에 from~끝까기 set을 리턴chunk = lines[:]# []에 대한 전체 set을 리턴 K/V 형태의 Dictionay : {} 를 사용terry = { 'name':'terry','age':39}# {}안에 'key':'value' 형식으로 데이타 저장cath = { 'name':'cath','age':38}print terry['name']# 특정 필드에 대한 접근은 ['key']를 사용 List of ..

아마존의 SSD의 NoSQL 서비스 Dynamo

Dynamo는 새롭게 소개된 AWS의 NoSQL서비스이다. Key-Value 형태로 대용량의 데이타를 저장할 수 있으며, 고속의 데이타 access를 제공한다. 데이타 모델 먼저 데이타 모델을 살펴보자, RDBMS의 일반적인 테이블 구조와 유사하지만, 조금 더 유연성을 가지고 있다. RDBMS와 똑같이 테이블이라는 개념을 가지고 있으며, 테이블은 테이블명과 각각의 ROW로 구성된다. 테이블은 Unique한 Primary Key를 가지고 있다. 이를 Key라고 정의한다. 테이블의 ROW에 해당하는 내용은 item이라고 부르는데, 각 item은 key에 의해서 구분된다. RDBMS와는 다르게, 각 ROW는 똑같은 Column을 갖는 것이 아니라, 각 row 마다 다른 column을 가질 수 있다 그래서, 각..

Amazon S3 서비스 소개

AWS S3 (Simple Stoage Service)는 파일을 저장하기 위한 스토리지이다. 일반적인 파일시스템의 개념과는 약간 다르고, 파일 이름을 대표하는 key와 파일 자체로 구분되는 Object Storage이다.저장할 수 있는 파일의 크기는 개당 1byte~5TB이고, 총 저장 용량에는 제한이 없다. 디렉토리와 비슷한 개념으로, bucket이라는 개념을 가지고 있다.S3에 접근하기 위해서는 일반적은 file io api등은 사용할 수 없으며, REST/HTTP 기반의 프로토콜만 지원한다. 그래서, 성능이 다른 파일 시스템에 비해서 느리다.기본적으로 3 copy를 지원하여, 데이타를 복제하고, 이 복제는 Amazon availability zone (AZ) 단위로 복제가 되기 때문에 데이타 센터 ..

EMR 특징

AWS EMR HDFS in EMR : internal disk 사용NameNode : SPOFquestion Cascading java based data processing and pipeline API Cacalog tetual programming languageMahout : Machine learning algorithmR : statistics analysis. 데이타를 emr에 넣고 빼기 위한 작업 디렉토리는 S3의 RRS 를 사용하는 것도 고려할만함. transfer data into aws is FREE. Spot instance- 일단 on demand로 시작해놓고 spot을 추가해놓으면 운이 좋게 spot이 돌면, 전체 시간을 줄일 수 있고, worst case에도, on deman..

Dynamo 특징

Dynamo 특징 - SSD 사용- Atomic Counter 보유- 전체 용량 한계 없음 attribute (name,value) pairitem : set of attribute with keytable : set of items - range query를 위한 compisite primary key 지원 ( "hash partition attribute", " range attribute" ) http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/QueryAndScan.html Cloud Search와 연동 가능 Read/Write에 대한 용량 보장 유료 Read capacity Write capacity Units of Ca..

빅데이타 분석을 위한 Amazon의 새 서비스 - redshift와 data pipe line

몇일전 AWS에서 redshift 라는 이름의 새로운 서비스가 발표되었다.redshift는 aws 상에서 제공되는 dataware house 서비스이다.data warehour란, 데이타 분석 및 리포팅의 목적으로, 기업의 모든 데이타를 한곳에 모아서 쿼리에 최적화된 데이타 베이스 서비스를 제공한다.특징은, 많은 양의 데이타를 보관해야 하며, CUD (Create/Update/Delete)보다는 Select나 Join등에 최적화되어 있다. AWS의 redshift의 주요 특징을 보면내부 DB는 postgres로 구현되어 있으며 (실제 구현 제품은 http://www.paraccel.com/ 을 사용하였다.) , IO 성능 최적화에 많은 신경을 썼다.스토리지는 EBS를 사용하지 않고, 다수의 Local S..

Amazon EC2 소개 (개정)

아마존의 EC2 서비스는 VM 기반의 컴퓨팅 자원을 제공하는 서비스이다.클릭 몇 번으로 저기 바다 넘어있는 나라에 내 서버를 만들 수 있으며, 내가 사용한 만큼만 비용을 지불하면 된다.아마존 EC2에서 제공하는 VM은 성능과 특성에 따라 여러가지 타입을 가지고 있다. 일반적인 인스턴스 1세대 인스턴스(m1) : m1.* 이름으로 시작하며 아마존에서 일반적으로 제공하는 가상화된 VM 인스턴스 이다.2세대 인스턴스(m3) : 2012년에 발표한 인스턴스로 m3.* 로 시작하며, 기존에 비해서 50% 이상의 높은 CPU 성능을 가지고 있다.특수목적 인스턴스 고용량 메모리 인스턴스(m2) : m2.* 이름으로 시작하며 17,34,68 GB등 많은 용량의 메모리를 가지고 있는 인스턴스이다. (가상코어 역시 그만큼..

Tips Amazon Cloud 사용시 고려 사항

AWS (Amazon Web Service) 사용시 주의 사항 1. IP가 매번 바뀐다.aws의 ec2 instance는 restart시 마다 ip가 매번 바뀐다. ip를 바꾸지 않으려면 EIP (Elastic IP)를 사용해야 하는데, 비용이 크다. 그래서 이런 경우에는 aws에 자체 dns 서버를 세팅하고, instance 가 start up 될때 마다, 고유 서버의 dns 이름을 새로 binding된 ip와 맵핑해서 dns서버에 등록하도록 스크립트를 짜 놓으면 유용하다. 2. io bandwidth를 믿지 마라aws의 가장 큰 어려운 점이, 네트워크 대역폭이다. 아무래도 공유 서비스이다 보니 네트워크 대역폭이 매우 느리다. 즉 내부 서버간 예를 들어 application server - dbms 또..

뉴타입을 필요로하는 클라우드,오픈소스 그리고 빅데이타

제 블로그에 건담이 등장했습니다. 혹시 일본 애니메이션 건담을 보신 분들은 뉴타입이 몬지 아실겁니다.신인류지요.. 보통 사람이 따라 잡을 수 없는 능력을 가지고 17:1 싸움에서도 이겨내는 주인공들입니다 갑자기 난대없이 왠 뉴타입 이야기냐 하면, 개발자들도 뉴타입이 되어야하는 시절이 왔습니다.예전 4GL 시대에는 오라클,델파이,턱시도 정도 할줄 알면 됬습니다.그다음 오픈환경이라는 J2EE 시대에서는 웹로직,EJB,JMS,오라클,Servlet/JSP 정도 하면 되었습니다. 그 다음 온 오픈소스 시대까지는 견딜만 했습니다. ant,spring,ibatis,hibernate,struts그런데.. IT 기술의 주도권이 엔터프라이즈에서 SNS등의 B2C로 오면서 상황이 모두 변했습니다. 전통적인 RDBMS 아키텍..

AWS SQS(Simple Queue Service) 소개

AWS SQS(Simple Queue Service) AWS SQS(Simple Queue Service)는 말 그대로, Simple 한 message queue 서비스 이다.전반적인 기능을 보면 message에 대한 send, receive 기능만 가능하다.대신 AWS 클라우드 환경에서 메세지의 복제를 통해서 장애 대비 능력에 촛점이 맞춰져 있다. JMS 처럼 XA 기반 트렌젝션 관리 능력이나, Error Queue에 대한 처리, auto retry와 같은 고급 기능도 없고RabbitMQ 처럼, routing,pub/sub 등의 다양한 message exchange pattern도 지원하지 않는다. 단순한 enqueue/dequeue 기능의 큐이다. 몇 가지 특성을 살펴보면 1. message 크기는 ..

AWS RDS 성능에 대한 글 하나

Amazon RDS 성능은 물리 서버의 30% 정도일 뿐!Amazon RDS에서 DB 테이블 재구성하는 이슈가 있어서 물리 장비 테스트 후 Amazon RDS에 적용한 적이 있습니다. 사용하고 있는 Amazon RDS 인스턴스가 성능이 나쁘지 않은만큼 물리 장비 대비 크게 뒤쳐지지 않을 것이라고 예상을 했습니다.그러나, 실제 적용해본 결과, 물리 서버 대비 30%정도 퍼포먼스만 발휘하는 결과가 나왔습니다. 로컬 물리 DB에서 15분 걸리던 작업이, Amazon RDS에서는 45분 이상 소요가 된 사례가 있습니다. 예상 시간보다 상당히 오래 걸려서 크게 당황을 했었죠.무엇보다 MySQL은 단일 쓰레드에서 Nested Loop 방식으로 SQL을 처리하기 때문에, CPU의 성능이 전체적인 DB 퍼포먼스에 직접..