2013년 2월 3일 일요일

MYSQL - 유의사항

커버링 인덱스(Covering Index)를 사용하라.

- http://gywn.net/2012/04/mysql-covering-index/

 성능을 죽이는 잘못된 쿼리 습관.

-http://gywn.net/2012/05/mysql-bad-sql-type/

최적화를 위한 팁 

- http://gywn.net/2012/09/mysql-tuning/

 작을수록 좋다.

- 작은 데이터타입


단순한게 최고다

- 비용 : 정수 < 문자 < 문자셋 < 콜레이션
- 날짜와 시간은 Mysql 내장형식으로 저장
- IP주소는 정수를 이용해서 저장

가능하면 NULL을 쓰지 말자

- 컬럼은 되도록이면 NOT NULL으로 정의하자. NULL로 인해 인덱스,인덱스 통계,값 비교등이 더 복잡해지기 떄문이다.
- DATETIME과 TIMESTAMP는 같은 종류의 데이터를 저장하지만 TIMESTAMP는 저장 공간을 DATETIME보다 절반 밖에 사용하지 않고 서버측 시간대를 사용하며 자동업데이트라는 특별한 기능이 있다. 반면 허용되는 값의 범위가 훨씬 작고 때로는 특수한 기능이 약점이 되기도 한다

정수 타입

- TINYINT(8),SMALLINT(16),MEDIUMINT(24),INT(32),BIGINT(64) 을 사용하고 용도에 따라 UNSIGNED를 잘 활용하자.
- MYSQL에서는 INT(11)과 같이 정수 타입의 '길이'를 명시할 수 있다. 하지만 이 기능은 값의 유효범위를 제한하진 않고, MySQL 클라이언트(WORK BENCH)같은 프로그램의 화면 출력용으로 예약하는 문자의 개수를 지정할 뿐이므로 별다른 의미는 없다.

실수 타입

- 실수부는 소수부가 있는 숫자 이지만 BIGINT로 편현할 수 없을 만큼 큰 정수도 DECIMAL같은 실수 타입을 사용 한다.

문자열 타입

(스토리지마다 다르지만 여기에서는 InnoDB,MyISAM을 사용한다고 가정)

VARCHAR

- 가변길이의 문자열을 저장하는 타입
- ROW_FORMAT = FIXED 옵션으로 길이 고정 가능
- 값의 길이를 기록하기 위해 추가로 1~2바이트 사용
  (문자열 : 1~255 byte -> 길이값 : 1byte )
- 공간을 절약하므로 성능이 도움이 된다.
 길이가 가변이므로 행을 업데이트할 때 행의 길이가 길어지기도 하며, 이 때문에 추가적인 작업이 필요할 수도 있다.
- UTF - 8 처럼 문자마다 사용하는 바이트 수가 다른 복잡한 문자 셋을 사용할 때 큰가치가 발휘

CHAR

- 고정길이 문자열
- 뒤에 붙는 공백을 제거한다.
- MD5와 같이 길이가 언제나 같을 경우 사용

BINARY,VARBINARY

- CHAR,VARCHAR와 비슷하지만 바이너리 문자열을 저장한다.

BLOB,TEXT

-커다란 바이너리 문자열을 저장하려고 고안된 데이터 타입.
- 다른 데이터 타입과 달리 BLOB와 TEXT는 값을 스스로 정체성을 가진 객체로 취급한다.
- 인덱스를 사용하지 못한다.

날짜 및 시간 타입

DATETIME
- 8 Byte
- 1001년 ~ 9999년, 1초단위 저장 가능
- YYYYMMDDHHMMSS 포맷의 정수 값으로 묶는다.
- 시간대의 영향을 받지 않는다
- ANSI 표준 방식

TIMESTAMP
- 4 Byte
- 1970년 1월 1일 자정(그리니치 평균시)을 기준으로 몇초가 지났는지를 저장.
- 1970년 ~ 2038년 사이의 값만 저장 가능
- 시간대의 영향을





2012년 10월 4일 목요일

aws에 apache + tomcat 설치&연동

참고사이트 : http://bban2.tistory.com/151
아파치 : http://httpd.apache.org/
아파치 도큐먼트 : http://httpd.apache.org/docs/2.2/
아파치 모듈 : http://httpd.apache.org/docs/2.2/mod/
톰캣 : http://tomcat.apache.org/download-60.tomcat connector : http://tomcat.apache.org/download-connectors.cgi
ERROR(need to check for Perl first, apxs depends on it...) : http://kldp.org/node/33288
ERROR(configure: error: C++ preprocessor "/lib/cpp" fails sanity check) : apt-get install g++


2012년 8월 29일 수요일

configure make make install

소스 컴파일 과정


1.configure
Makefile이 생성됨. 소스를 컴파일하는 컴퓨터의 사양에 맞는 Makefile 생성

2.make
소스코드를 실제로 컴파일해서 binary파일 생성

3.make install
만들어진 binary파일을 지정된 디렉토리로 이동


  • rpm package 설치 과정
    • 이미 컴파일된 binary파일을 지정된 디렉토리에 설치하여 준다. 소스 컴파일 과정의 configure,make가 이미 되어있는 것을 make install만 해주는것과 같다.
  • uninstall
    • rpm패키지는 rpm -e 명령을 사용해 의존성에 문제가 없으면 패키지가 삭제. 소스컴파일을 통해 설치한 프로그램을 삭제할떄는 설치된 파일을 모두 삭제하면 된다.

2012년 7월 13일 금요일

SVN(Subversion)

SVN이란?

  • 자유 소프트웨어 버전 관리 시스템.
  • 소프트웨어의 버전을 관리하고 팀과 같이 코드를 관리할 수 있게 해주는 시스템.
  • 제한이 있던 CVS(버전 관리 툴)를 대체하기 위해 만들어짐짐

CVS와 비교

  1. 원자적으로 쓰기를 지원하므로, 다른 사용자의 쓰기와 엉키지 않는다.
  2. 이름을 바꾸거나, 복사하거나, 파일을 지워도 리비전 기록을 유지한다.
  3. 이진 파일도 효율적으로 저장할 수 있다.
  4. 디렉토리 버전 관리를 할 수 있다. 디렉토리 전체를 빠르게 옮기거나 복사할 수 있으며, 리비전 기록도 유지한다.
  5. 소스 저장고의 크기에 상관없이 일정한 시간안에 가지치기(branching)나 태그 넣기(tagging)을 할 수 있다.
  6. 소스 저장고로의 접근이 최적화 되어있으므로, 소스 저장고에서 필요없는 네트워크 트래픽을 줄일 수 있다.

중요 개념

Trunk

  - 단어 자체의 뜻은 본체, 본문 등입니다.
  - 프로젝트에서 가장 중심이 되는 디렉토리입니다.
  - 모든 프로그램의 개발 작업은 trunk 디렉토리에서 이루어  집니다.
  - trunk 디렉토리 바로 아래에는 소스들의 파일과 디렉토리가 들어가게됩니다.

Branch

  - trunk에서 뻗어져 나온 나무가지를 뜻합니다.
  - 프로그램을 개발하다 보면 trunk 디렉토리에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 있습니다.
    프로젝트안의 작은 프로젝트라고 생각하면 됩니다.
  - branches 디렉토리 안에 또 다른 디렉토리를 두어 그 안에서 개발하게 됩니다.

Tag

  - tag는 꼬리표입니다.
  - 이 디렉토리는 프로그램을 개발하면서 정기적으로 릴리즈 할 때, 0.1 / 0.2 / 1.0 등 이런식의 버전 별로 소스 코드를 
    따로 저장하는 공간입니다.
  - 버전별로 태그를 붙여서 tag 디렉토리 안에 보관한다고 생각하면 됩니다.

기타 용어 설명

  • SVN Server : 소스코드가 담기는 서버, Client Tool을 사용하여 접속한다.
  • SVN Client : 서버 접근을 위한 개발자용 도구
  • Repository : SVN Server가 관리하는 소스의 정보가 담긴 시스템
  • Share : 맨 처음 Repository에 프로젝트를 올리는 작업
  • Check Out : Repository의 최종 소스를 처음으로 Client에 내려받는 작업
  • Update : 서버에 있는 최신소스를 받아오는 작업
  • Commit : 서버로 자신의 소스를 업데이트 하는 작업



Sonatype -Nexus

Maven을 빌드툴로써 사용하다 보면 편안하지만 오픈소스의 경우 maven을 통해서 라이브러리로 관리 가능하지만 내가 과거에 만들었던 라이브러리들은 maven을 통해서 관리를 할수가 없다.

이러한 불편함 때문에 maven repository를 사용한다.

Sonatype nexus : maven company인 sonatype에서 만든 maven repository


  • 잘 정리된 사이트 링크
2.nexus 설정 및 maven과 연동 : http://stove99.tistory.com/75
3.nexsu 암호 초기화/리셋 : http://stove99.tistory.com/121

2012년 7월 12일 목요일

Hudson

Hudson이란
최근 사용되는 CI(Contunuous Integration) tool중 하나이다. Hudson의 장점 중 하나는 플러그인 형태로 지원되는 높은 확장성이다. Hudson은 또한 클라우드 컴퓨팅을 제공한다. 지속적인 소프트웨어 프로젝트의 Build와 Test하고 외부에서 동작하는 작업 수행 내용을 감시하기 위해 개발 되었다.

[특징]

  1. 지속적인 소프트웨어 프로젝트의 Build/Testing : 지속 통합 시스템(cruiseControl 또는 damageControl과 같은 기능으로써, Hudson은 프로젝트의 편경 사항을 개발자들이 보다 편하게 통합하고, 실제 사용자들은 언제나 최신의 빌드를 유지할 수 있도록 만들어주는 시스템) 기능을 보다 사용하기 편하도록 하는것
  2. 외부에서 동작하는 작업 수행 내용을 감시 : CRON과 PROCMAIL작업과 같은 것으로 원격에서 동작중인 것들이 그 대상. 예를 들면 CRON에 스케쥴에 맞게 설정하게 되면 모든 출력 내용이 담긴 일반 이메일로 전달하게 되는데 작업을 중지 시킬 때 까지 계속 반복적으로 수행.

[주요기능]

  1. 간편한 설치 : java -jar hudson.war 만 한 번 생행 하거나, servlet 컨테이너에 배포만 하면 됨.
  2.  간편한 설정 : 웹 기반 ui를 통해 모든 설정 가능. 즉시 에러 체크 및 인라인 도움말 제공됨. xml 설정 파일을 수동으로 설정할 필요가 없다. (직접 수정도 가능)
  3. change set 제공 : cvs/subversion을 통해 빌드하면서 각종 변경된 사항 목록을 생성할 수 있다.
  4. 영구 링크 : 자체적으로 설정된 각종 페이지들을 갈끔하게 읽을 수 있는 url을 제공. 이를 통해 어디서든 간단하게 링크를 설정 할 수 있다.
  5. rss/e-mail/im 기능 통합 : 각종 작업 수행 실패에 따른 실시간 알림을 rss 또는 이메일을 통해 빌드 결과 사항을 감시하고 알려주게 됩니다.
  6. 최종 작업 완료 후 태그 넣기 : 빌드가 완료 된 후에도 tagged long이 가능하다.
  7. junit/testng 보고서 제공 : junit 테스트 결과는 표 형태로 요약되어 빌드가 깨지기 시작한 때와 같은 버전 연역 정보들을 나타낼 수 있다. 버전 연역 경향을 그래프로 표시할 수도 있다.
  8. 빌드 결과물 분산 : hudson은 여러대의 컴퓨터에 빌드/테스트 부하를 분산시켜 진행시킬 수 있다. 이를 통해 개발자들의 환경 중에 별도 작업이 없는 워크스케이션 가지 활용할 수 있다.
  9. 파일 추적기능 : hudson 에서는 jar 들을 빌드 생성하는 작업들 내용 및 빌드 시 사용하는 각종 jar들의 버전이 무엇인지 등을
  10. 추적 할 수 있다. 이 작업은 hudson 외부에서 제작된 jar 역시 포함되기 때문에, 의존성 추적을 할 프 로젝트에서도 원할하게 동작된다.
  11. plugin 지원 : hudson 에서는 써드 파티 플러그인(http://wiki.hudson-ci.org/display/HUDSON/Plugins)을 통해 기능을 확장할 수 있다. 팀에서 사용할 도구 및 프로세스 등을 플러그인을 작성함으로써 hudson에서 지원하게 할 수 있다.

[설치] 

 먼저 jre 1.5이상의 버전이 필요. hudson.war를 다운 받은 뒤 java -jar hudson.war 라고 실행. 컨테이너 별 설치 방법은 http://wiki.hudson-ci.org/display/HUDSON/Containers 참조 war 파일의 압축을 풀었으면 hudson/WEB-INF 디렉토리에 chmod 755 hudson 실행 윈도우 환경일 경우 hudson을 서비스 형태로 실행해야 굳이 로그인하지 않고도 자동 실행 가능 일반적으로 톰캣을 서비스로 설치하고 hudson 설치



# CRON ?
- cron deamon은 리눅스에서 같은 작업을 주기적,반복적으로 실행하기 위한 deamon이다. 주기적인 백업,주기적인 메인 전송 등에 응용 된다.

# Procmail ?
- MDA(Mail Delivery Agent)의 한 종류로 수신한 이메일을 필터링 하는 툴이다. 이것을 이용하여 받은 메일에서 보낸사람,제목,이메일 크기,내용 등으로 필터링이 가능하다.

Trac

Trac은 Subversion과 연동되는 강력한 공동 개발 지원 도구이다.
여러명이 하나의 소프트웨어를 개발할때 아이디어의 순환과 역할의 분담, 버그의 추적과 수정을 원활이 할 수 있도록 해주는 도구이다. Trac은 Wiki,RoadMap,Ticket이라고 하는 크게 세가지의 기능을 가지고 있다.
Trac을 사용 하게 되면
  1. 프로젝트 MileStone 관리
  2. 프로젝트 이슈(Ticket)관리
  3. 프로젝트 문서 관리(Wiki)
  4. 프로젝트 형상 관리(Subversion)
을 통합적으로 trac 단일 UI에서 관리가 가능하게 됨으로써 PM-DEV-QA간의 원활한 진행 체크,커뮤니케이션 관리가 가능해지는 장점이 있다.

사용법/용어 설명

  • Timeline : Wiki수정,Ticket 발행/수정,소스코드의 Commit등 개발과 관련한 모든 사항이 시간순서대로 나열된다.
  • Milestone : 마감 기한을 뜻한다. 예를들어 1.0버전 릴리즈릴 위해 행해지는 모든 개발작업은 Milestone작업이 된다.
  • Roadmap : 모든 Milestone 진행 상황을 깔끔한 그래프 형태로 보여주는 페이지.
  • View Source : 탐색기모양으로 구성 되어 있고 Rev은 그 파일/폴더가 몇번쨰 Commit된 파일인지를 나타내는 수치이다.
  • Ticket : Trac의 가장 중요한 개념으로 해야 할 하나의 작업의 단위를 뜻한다. 예를 들어 어떠한 버그가 발견되면 발견한 사람은 해당 버그를 수정하라는 내용의 Ticket을 발행하여 개발자에게 Ticket을 전달한다. Ticket을 받은 개발자는 해당 Ticket이 해결할 수 있는 문제일 경우 수용(Assign)해서 해당 문서를 해결하고 폐기한다. 만약 자신의 능력으로 힘들 경우 다른 사람에게 Ticket을 전달하여 다른 사람이 해결할 수 있도록 한다.


Trac 플러그인

각종 플러그인 모음 사이트 : http://trac-hacks.org/
  • TracWebAdmin : 0.11x이후 디폴트로 포함
  • TracAccountManager : 웹에서 사용자 추가
  • TracDatamoverPlugin : 엉뚱한 프로젝트에 올린 티켓 등을 이동
  • TracExcelviewer : 엑셀 첨부파일 내용 보기
  • IniAdmin : trac.ini파일을 웹에서 수정
  • TracTicketDelete : 잘못 올린 티켓 지우기
  • TracSVNAuthz : Subversion 저장소 권한 설정을 웹에서 하기 위해
  • TracWysiwyg : 위키 문법을 잘 모르는 사용자를 위해

태그