수요일, 5월 15
Shadow

미분류

#001 libpcap 을 통한 Ethernet frame capture, 패킷 분석

미분류
- 연결된 장치 검색 char * pcap_lookupdev(char * errbuf); - Open Device pcap_t * pcap_open_live(char * device, int snaplen, int promisc, int to_ms, char * ebuf); - 열린 장치로 부터 패킷 Listening char * pcap_next(pcap_t * p,struct pcap_pkthdr * h) - 이더넷 구조체를 이용해서 이더넷 정보를 읽어 낸다. struct ether_header * header; - 장치 ID를 사용해서 열린 장치의 닫는다. pcap_close(pcap_t * p);  pcap_next()를 통해 패킷을 캡쳐함. header의 마지막 값인 ether_type을 통해 다음에 있을 프로토콜의 타입을 알수 있다. struct ether_header { u_int8_t  ether_dhost[ETH_ALEN]; //Destination, ETH_ALEN = 6 u_int8_t  ether_shost[ETH_ALEN]; //Source, u_int16_6 ether_type;            //Protocol ID } 프로토콜의 타입은 /usr/include/net/ethernet.h 에  이더넷 구조체와 함께 정의 되어 있으며 다음과 같다. ETHERNET_PUP     0x0200   /*Xerox PUP*/ ETHERNET_IP      0x0800   /*IP*/ ETHERNET_ARP     0x...

#068 구조체 생성자

미분류
열거형(enumeration) 열거자(enumerator)란 이름이 부여된 일련의 정수 상수로 구성되는 데이터 타입 열거자의 값은 기본적으로 0으로 시작하여 1씩 증가 값을 바꿀 수 있는데, 한 값을 바꾸면 다음 열거자부터는 바뀐값에서 1씩 증가 default type 은 int 이며 char를 제외한 정수형 타입(byte, sbyte, short, int, uint, long, ulong)의 지정이 가능 열거형 정의 및 사용 열거형 정의 view plaincopy to clipboardprint? enum Weekday{Mon, Tue, Wed, Thu, Fri, Sat, Sun}; // Mon=0, Tue=1, Wed=2, Thu=3, Fri=4, Sat=5, Sun=6 enum Weekday{Mon = 1, tue, Wed = 4, Thu, Fri = 7, Sat, Sun}; // Mon=1, Tue=2, Wed=4, Thu=5, Fri=7, Sat=8, Sun=9 열거형 사용 view plaincopy to clipboardprint? WeekDay weekday = WeekDay.Fri; // 또는 int weekday = (int)WeekDay.Fri; 구조체 대문자로 표시 value type 사용자 정의 데이터 타입을 정의하는데 사용 일반적으로 여러개의 필드를 포함하는 복합 데이터 타입(composite data type)을 정의하기 위해 사용 공개필드 멤버로만 포함하는 것이 일반적 생성자를 가질 수 ...

#036 SVN 플러그인 Subversive 설치 정리

미분류
딱히 리뷰는 아닙니다만 항상 사용하는 Subversive 설치가 좀 불편해져서 정리해보았습니다. ^^ 처음 설치하시는 분은 Subclipse를 검토해보셔도 좋을 것 같네요!   이클립스에서 SVN을 사용하려면 Team 기능 연동을 위한 Team Provider 플러그인을 설치해야 합니다. SVN플러그인으로는 SVN을 개발한 Tigris 커뮤니티에서 개발하는 Subclipse와 Polarion이라는 커뮤니티에서 개발한Subversive라는 플러그인이 있습니다. Subclipse가 먼저 나왔지만 UI 등의 개선이 한발 앞섰던Subversive가 더 인기를 끌고 있는 상황인데, Subversive가 이클립스 공식 Project Incubation에들어가면서 설치과정이 오히려 귀찮아지게 되었습니다. Subclipse나 Subversive나 UI를 제외한 SVN 연동 부분은 JavaHL이나 SVNKit 같은 별도의라이브러리를 사용하는데 공식 프로젝트로 들어가면서 Eclipse Public License를 제대로 적용하게 되자, 별도라이브러리에 대한 법적인 문제 때문에 SVN 연동 라이브러리에 해당하는 플러그인은 Connector라는 이름으로 따로 배포하고있습니다. Subversive Team Provider와 Connector가 별도 사이트에서 배포되지만 실제로는상호의존하므로 꼭 같이 설치를 해야 합니다. 두 업데이트 사이트에서 한번에 설치해야 한다는 점 이외에는 특별히 복잡할 것은 없습니다만 Team Provider와Connector가 각각 버전도 틀리고 해서 설치하면서 의아한 분...

#035 SVN 이클립스 사용

미분류
이제 우리가 사용할 오픈소스 프로젝트(http://code.google.com/p/quik/)를 레파지토리에서 가져와 보겠습니다. 이 작업을 체크아웃(Checkout)이라고 합니다. File → New → Other... 를 선택하세요. 그리고 svn 이라고 타이핑하시면 선택가능한 SVN 목록이 나타납니다. Checkout Project from SVN을 선택하세요. 이제 SVN을 등록해야합니다. Create a new repository location을 선택합니다. 그 뒤에 location url을 적는창이 나타납니다. http://code.google.com/p/quik/ 바로 이곳이 우리가 예전에 만들었던 오픈소스 프로젝트 사이트 주소입니다. 여기 홈페이지에 들어가서 source 메뉴를 클릭하시면 SVN에 사용할 주소가 나타납니다. 로그인을 해야 내 계정과 비밀번호를 알 수 있으니 로그인 한 후에 source 메뉴를 클릭하세요. source 메뉴를 보니 상단에 https로 시작하는 주소가 있습니다. 바로 여기가 프로젝트 멤버의 SVN주소 입니다. https://quik.googlecode.com/svn/trunk/ 까지만 복사하세요. 그 뒤에는 프로젝트 명과 사용자 아이디가 나와있는데 이클립스에서 이 값들은 나중에 적는란이 따로 있으니 https://quik.googlecode.com/svn/trunk/ 이와 같은 형식의 주소만 복사합니다. 그리고 비밀번호를 알기 위해서 googlecode.c...

#002 오픈 소스 기반의 고성능의 분산 데이터 저장 시스템들(NoSQL)

미분류
최근들어 MySQL, Oracle, DB2, and SQL Server 등의 상용 관계형 DB보다 성능이 우수한 오픈소스 및 인덱스 기반의 데이터 저장 구조를 가진 이른바 NoSQL이라는 새로운 형태의 데이터 스토리지 솔루션이 개발자들사이에 많이 회자되고 있네요. 재정이 빈약한 Web 2.0 기업들이 구글이나 아마존, MS 등의 대기업군을 따라 잡을려면 오픈 소스 기반의 NoSQL 밖에는 대안이 없다고 생각한다는 증거죠. 한 예로, 페이스북은 기존 데이터베이스인 MySQL이 아니라 카산드라(Cassandra) 데이터 스토어에서 개발해 새로운 검색 기능을 추가해서 전세계 개발자들에게 주목 받았죠. 그래서 관련 Paper인 Rick Cattell의 High Performance Scalable Data Stores라는 내용을 한번 정리해 보았습니다. 이들 NoSQL 이라는 데이터 저장 시스템의 공통된 특징들은... 데이터 베이스라 부르기를 거부하고 Key & Value로 저장되고 분산 환경 지원되고 Call level interface 지원(DBMS에 접근하는 표준) 막대한 양의 데이터를 처리할 수 있는 대용량 데이터의 빠른 인덱싱 클러스터나 그리드에서의 구동을 위해 다양한 테이블로 데이터베이스를 나눠야 하는 복잡한 작업과 ‘샤딩(sharding)’ 없이 손쉽고 저렴하게 여러 서버들의 수평적 확장(horizontal scaling)됨 데이터의 스키마와 속성들을 동적 정의 Data Stores의 다양한 관점에서 종류들을 요약해보자면... 1. Key-...

#038 톰켓을 사용하는데 필요한 20가지 Tips

미분류
1. jdk 1.5이상이면 아래 설정을 JAVA_OPTS안에 추가한다면 YourKit을 가지고 힙덤프를 분석할 수 있다. -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/heapdump 2. Jasper 2 JSP Engine 지원을 위해 $CATALINA_BASE/conf/web.xml 설정 변경하라. - development : false, genStringAsCharArray : true, modificationTestInterval : true, trimSpaces : true - 자세한 건 여기를 참조하라. 3. 가용성 확보를 위해 Tomcat의 clustering/session replication을 사용하라. - 사용방법은 여기를 참조하라. 4. error pages를 작성하여 적용하라.(web.xml) - <error-page> <error-code>404</error-code> <location>/error/404.html</location> </error-page> 5. 어플리케이션에서 System.out과 System.err를 제거하고 Log4j를 사용하라. 6. application마다 같은 라이브러리는 WEB-INF/lib에서 CATALINA_HOME/shared/lib로 옮겨서 공유하라. - 메모리를 절약할 수 있다. 7. memory parameters를 잘 활용하라. 8. 불필요한 어플리케이션을 제거하라. 9....

#037 Tomcat 성능 향상 방법들

미분류
*. JVM Tuning 튜닝 1. 메모리 가용성을 확보한 다음 힙 사이즈를 늘려라 - -server -Xms768M -Xmx768M 2. garbage collector를 튜닝하라(GC 로깅 분석 후) - -XX: +UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:-TraceClassUnloading 3. 원격지에서 모니터링을 주기적으로 하라(물론 상용에선 빼라) - -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false *. Tomcat 튜닝 1.  중복 로그 접점을 제거하고 하나로 통일하라(logging.properties) - .handlers = 1catalina.org.apache.juli.FileHandler,java.util.logging.ConsoleHandler 부분을 .handler = 1catalina.org.apache.juli.FileHandler로 변경 2. 로그 Overflow 예방하기 위해 아래 설정을 logging.properties에 추가하라 - 1catalina.java.util.logging.FileHandler.pattern =${catalina.base}/logs/catalina.%g.log - 1catalina.java.util.log...

#067 JDK 7

미분류
1. Improved Type Inference for Generic Instance Creation  - 단순해진 Generics 이전 : Map<String, List<String>> anagrams = new HashMap<String, List<String>>(); JDK7 : Map<String, List<String>> anagrams = new HashMap<>(); - 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000009.html 2. Language support for collections - Java 코드의 사이즈를 줄여주고, 가독성을 높여줌 이전 : final List<Integer> piDigits = Collections.unmodifiableList(Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9 )); JDK7 : final List<Integer> piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9]; - 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/001193.html 3. Automatic Resource Management - exception handling을 줄여줌 - C++’s RAII과 C#’s using에...

#066 쓰레드(Thread)

미분류
- Application을 구성하는 기능 하나가 하나의 쓰레드 - Java에서는 Method를 하나의 쓰레드로 취급 - 기본적으로 Single Thread ->메서드 하나씩 순차적으로 실행 - 두개이상의 Method를 동시에 실행 Multi Thread 1.Thread클래스를 상속 class ThreadTest extends Thread{ public void run(){/*내용*/} //Thread클래스의 run()을 오버라이딩 } 2.Runnable 인터페이스를 구현 class ThreadTest implements Runnable{ public void run(){/*내용*/} //Runnable인터페이스의 추상메서드 run()을 구현 } 멀티쓰레드 프로그래밍 1. java.lang.Thread를 상속받음 2. public void run()에 멀티쓰레드로 실행할 내용구현 3. Thread의 start()호출 -> 멀티쓰레드로 2개이상의 메서드가 동시에 실행 -> 멀티쓰레드의 스케쥴은 렌덤   1. java.lang.Runnable 인터페이스를 상속 2. public void run()에 멀티쓰레드로 실행할 내용구현 3. Thread 생성자의 인자로 Runnable 인터페이스를 구현할 객체의 Reference Variable t.start ->target 속성이 null이 아니면 targer이 가르키는 객체의 run()을 멀티쓰레드로 실행 Thread상속 접기 public class ThreadTest1 { public...

#001 구글 파일 시스템 분산환경

미분류
Sanjay Ghemawat, Howard Gobioff, and the Shun-Tak Leung Google*   ABSTRACT 구글 파일 시스템은 대용량 분산 데이터전문 어플리케이션을 위한 유연한 분산파일 시스템으로,  저가의 일반적인 하드웨어 상에서 동작하면서도 무정지 기능(failuer tolerance)과 많은 수의 클라이언트에 대한 높은 군집성능(high aggregate performance)을 제공한다. 이러한 시스템설계의 기능상 목표는 기존의 분산 파일시스템들과  많은 부분이 공통되지만, 선행 파일시스템들의 예측과의 결정적인 차이점으로, 우리는 현재, 그리고 앞으로 예측되는 어플리케이션의 부하(workload)와 기술적 환경에 중점을 두고 설계하려고 노력했고,  이로 인해  전통적인 시스템디자인 방식을 재검토하고 근본적으로 다른 디자인컨셉을 시도하게되었다. 이 파일 시스템은 우리가 필요로했던 저장기능을 성공적으로 수행했으며 구글의 주 저장 플랫폼으로 채택되어 오랫동안 구글 서비스뿐만 아니라 대량의 데이터 셋을 요구하는 연구와 개발 분야에 사용되었다.  이중 가장 큰 클러스터는 수천개의 디스크에 걸쳐 구성된 수백 테러바이트의 사이즈를 가지며 동시에 수백명의 클라이언트에 의해 접속되고 있다. 여기서는 분산 어플리케이션을 지원하기위해 설계된 파일 시스템 인터페이스 확장을 소개하고, 이 설계의 다양한 측면과 실제 상황과 이론상의 벤치마크결과에 대해 이야기하려고 한다.   1.Introduction 구글 파일 시스템(GFS)은 급속히 늘어...