-> Networking                                                           
  │       -> Networking support (NET [=y])                              
  │         -> Networking options                                               
  │           -> Network packet filtering (replaces ipchains) (NETFILTER [=y])   
  │             -> Core Netfilter Configuration               
<*> Netfilter Xtables support (required for ip_tables)                      
  │ │ <*>   "CLASSIFY" target support                          
  │ │ <*>   "MARK" target support                                  
  │ │ <*>   "NFQUEUE" target Support                                   
  │ │ <*>   "NOTRACK" target support                                   
  │ │ <*>   "comment" match support                                    
  │ │ <*>   "conntrack" connection tracking match support              
  │ │ <*>   "DCCP" protocol match support                              
  │ │ <*>   "helper" match support                                     
  │ │ <*>   "length" match support                                          
  │ │ <*>   "limit" match support                                           
  │ │ <*>   "mac" address match support                                     
  │ │ <*>   "mark" match support                                            
  │ │ <*>   "pkttype" packet type match support                             
  │ │ <*>   "realm" match support                                           
  │ │ <*>   "sctp" protocol match support                                   
  │ │ <*>   "state" match support                                           
  │ │ <*>   "string" match support                                          
  │ │ <*>   "tcpmss" match support                   

-> Networking                                                              
  │       -> Networking support (NET [=y])                                
  │         -> Networking options                                                                
          │
  │           -> Network packet filtering (replaces ipchains) (NETFILTER [=y])   
  │             -> IP: Netfilter Configuration
<*> IP tables support (required for filtering/masq/NAT)                   
  │ │ <*>   IP range match support                    
  │ │ <*>   Multiple port match support               
  │ │ <*>   TOS match support                          
  │ │ <*>   recent match support           
  │ │ <*>   ECN match support                              
  │ │ <*>   DSCP match support                             
  │ │ <*>   AH/ESP match support                           
  │ │ <*>   TTL match support                              
  │ │ <*>   Owner match support                            
  │ │ <*>   address type match support                     
  │ │ <*>   hashlimit match support                        
  │ │ <*>   Packet filtering                            
  │ │ <*>     REJECT target support                      
  │ │ <*>   LOG target support                            
  │ │ <*>   ULOG target support (OBSOLETE)                
  │ │ <*>   TCPMSS target support                          
  │ │ <*>   Full NAT                                       
  │ │ <*>     MASQUERADE target support                     
  │ │ <*>     REDIRECT target support                        
  │ │ <*>     NETMAP target support                          
  │ │ <*>     SAME target support                             
  │ │ <*>     Basic SNMP-ALG support (EXPERIMENTAL)            
  │ │ <*>   Packet mangling                                    
  │ │ <*>     TOS target support                                
  │ │ <*>     ECN target support                                
  │ │ <*>     DSCP target support                                
  │ │ <*>     TTL target support                                  
  │ │ <*>   raw table support (required for NOTRACK/TRACE)
by cranix 2006. 12. 18. 17:12
# genkernel --menuconfig all

- 원하는 옵션선택후 reboot 하면 알아서 적용됨.
by cranix 2006. 12. 18. 16:40


- 아래와같이 로컬 포트를 확인하면 mysql 이 살아있지만
# nmap localhost

- 아래와같이 외부포트를 확인하면 mysql 이 죽어있는경우
# nmap cranix.net

- mysql 의 아래 설정파일에서 변경해 주면 된다.
# /etc/mysql/my.cnf 에 bind-address=127.0.0.1 부분 주석걸면 된다.
by cranix 2006. 12. 18. 15:03

원래 jk2.properties 파일이 톰켓 conf 디렉토리에 있어야 하지만 톰켓 5.5 에서 jk2 가 deprecated  되었기때문에 없다. 개발자들의 흥미가 떨어져서 중단됬다고 한다..ㅡ.ㅡ;

그러나 걱정하지 말자 server.xml 파일에 기존의 jk 커넥터가 기본으로 설정되어 있으니 그냥 사용하면 된다. (똑같은 jk 이기때문에 호환 되는거 같다.)

그리고 아파치로 서비스 하게되면 8080 번 포트의 기본 커넥터가 필요없어지니 server.xml 파일에서 주석 걸어두는게 좋을 것이다.



이 문서는 apache2 와 tomcat5.5 가 설치되어있다고 가정한다.



1. UBUNTU 에 JK2 설치하기


$ sudo apt-get install libapache2-mod-jk2



2. jk2.conf, jk2.load 파일 apache2 conf 파일에서 Include 하기

- apache2 conf 파일을 열어보면 아래와같은 부분을 볼수있다.


Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf


- /etc/apache2/mods-enabled 디렉토리에 load 나 conf 파일을 넣어준다면 자동 Include 된다는 소리다.

- /etc/apache2/mods-available 디렉토리에 있는 jk2.conf,jk2.load 파일을 mods-enabled 로 링크 해주자.


3. jk2.conf 파일을 열어보면 아래와같이 또 인클루드 하는데 해당 파일이 없을테니 만들어주자


JkSet config.file /etc/apache2/workers2.properties



4. /etc/apache2/workers2.properties 파일


# Define the communication channel
[status:]
[uri:/jkstatus/*]
group=status:
[shm:]disabled=1
[channel.socket:localhost:8009]
info=Ajp13 forwarding over socket
tomcatId=localhost:8009


# Web Applicaton
[uri:/jsp-examples/*]
info=Map the whole webapp



5. 톰켓 & apache2 재시작


6. http://localhost/jsp-examples/ 들어가봤을때 제대로 나오면 성공이다.

by cranix 2006. 12. 16. 20:17

익스플로어 6으로 넘어오면서 보안설정이 강화되어서 다른 URL 에서 쿠키를 쓰려면 아래와같이 P3P 표준 규격을 따르도록 헤더를 따로 설정해 줘야한다.

예를들어 IFRAME 내에있는 사이트가 쿠키나 세션 연동이 안될경우 쓰면 된다.



- JSP -


response.setHeader("P3P","CP='CAO PSA CONi OTR OUR DEM ONL'");




- 웹서버 -


Header add P3P "CP=\"ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC\""
Header set P3P "CP=\"ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC\""



- HTML -


<meta http-equiv="p3p" content='CP="CAO DSP AND SO " policyref="/w3c/p3p.xml"' >



- 아파치서버 conf/httpd.conf -


<IfModule mod_headers.c>
Header add P3P "CP=\"DSP CUR OTPi IND OTRi L FIN\""
IfModule>



- PHP -


Header("p3p: CP=\"CAO DSP AND SO ON\" policyref=\"/w3c/p3p.xml\"");

@header('P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"');



by cranix 2006. 12. 16. 20:16

annotation 한글로 읽으면 어노테이션 사전적 의미로는 "주석" 이다.

주석은 이미 있지않은가?

이게 java5 에 왜 추가가되었을까?

뭐..좀더 확장된 개념의 주석이라고 보면되겠다.

기존의 주석과 달라진점은 프로그램상에서 처리가 가능하다는것이다.

주석을 프로그램상에서 처리할일이 뭐가있지? 라고 생각은 했는데..

아래예제와같이 테스트프로그램 같은데서 쓰일수 있다.



먼저 어노테이션 사용법을 알아보자


1. 먼저 어노테이션 인터페이스를 선언하자

- maker.java


package cranix.test;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
public @interface maker {
int num();
String name();
String id();
String date() default "unsigned";
}


- 위에서 주석이라고 했지만 class 형태로 만들어진다.

- 어노테이션은 인터페이스에만 선언이 가능하다.

- @Retention(RetentionPolicy.RUNTIME) : 이 어노테이션을 쓰게되면 정보를 CLASS 파일에 저장하도록 한다. (이래야지만 파싱할수 있다.)

- 어노테이션의 선언은 @interface 로 하면된다.

- 메소드들의 내용은 올수없고 형태만 올수있다.

- default 가 찍히지 않은 메소드는 필수로 입력해야 한다.


2. 자 이제 위에서 만든 어노테이션을 사용해 보자

AnnotationCopyright.java


package cranix.test;
import java.lang.annotation.*;

@maker(
num=1,
name="정의돈",
id="cranix"
)
public class AnnotationCopyright {
public static void main(String args[]) {
for (Annotation a: AnnotationCopyright.class.getAnnotations()) {
  System.out.println("Annotation : " + a);
}
}
}


- class.getAnnotations() 와 같이 어노테이션을 파싱할수 있다.

- 물론 어노테이션 인터페이스에서 @Retention(RetentionPolicy.RUNTIME) 를 선언해 줘야지만 가능하다


3. 이제 위엣걸 실행시켜 보자


Annotation : @cranix.test.maker(date=unsigned, num=1, name=정의돈, id=cranix)


- @ 하나는 하나의 어노테이션이니까 루프를 한번만 도는거다.






이제 annotation을 이용해서 jUnit 과 비스무리한 초간단 테스트 프로그램을 만들어 보겠다.


1. 어노테이션 인터페이스를 만들어준다.

- Test.java


package cranix.test.annotation;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test {}




2. 테스트할 프로그램을 만든다.

- TestClass.java


package cranix.test;
import cranix.test.annotation.*;

public class TestClass {
@Test public static void m1() {}
public static void m2() {}
@Test public static void m3() {
throw new RuntimeException("런타임 익셉션");
}
public static void m4() {}
@Test public static void m5() {}
@Test public static void m6() throws Exception {
throw new Exception("엑셉션");
}
public static void m7() {}


public static void main(String args[]) throws Exception {
AnnotationTest.test(TestClass.class);
}
}


- 어노테이션이 들어간것이 보이는가?

- 테스트를 원하는 메소드 앞에 @Test 라는 어노테이션을 선언해 주자.



3. 이제 어노테이션이 들어간 클래스를 파싱해서 테스트 해보도록 하자


- AnnotationTest.java


package cranix.test.annotation;
import java.lang.reflect.*;

public class AnnotationTest {
public static void test(Class clazz) throws Exception {
int passed = 0;
int faild = 0;
for (Method m: clazz.getMethods()) {
  if (m.isAnnotationPresent(Test.class)) {
   try {
    m.invoke(null);
    passed++;
   }
   catch(Throwable e) {
    System.out.printf("%s 메소드에서 테스트실패 - 이유 : %s\n",m,e.getCause());
    faild++;
   }
  }
}
System.out.printf("테스트 종료 - 성공 : %d, 실패 : %d\n",passed,faild);  
}
}


- m.isAnnotationPresent(Test.class) 라는것은 메소드가 Test.class 어노테이션을 받고있는것인가 검사하는 것이다.

- 이렇게 하면 @Test 어노테이션을 받고있는 메소드만 테스트를 수행하게 되는것이다.


4. 실행을 하면 아래와같이 나온다.


public static void cranix.test.TestClass.m3() 메소드에서 테스트실패 - 이유 : java.lang.RuntimeException: 런타임 익셉션
public static void cranix.test.TestClass.m6() throws java.lang.Exception 메소드에서 테스트실패 - 이유 : java.lang.Exception: 엑셉션
테스트 종료 - 성공 : 2, 실패 : 2


- 이런 멍청한 테스트 프로그램을 쓰지는 않겠지만 충분히 응용가능하다고 본다.




자 이제까지 간단하게 어노테이션을 알아봤다.

jUnit,EJB3 에서도 어노테이션을 쓴다고 한다.

EJB3 는 안써봐서 모르겠고 jUnit 은 충분히 이해할만 하다.


자바 프로그래밍의 개념이 조금 확장된것이 느껴지지 않는가?

'알짜정보 > Java' 카테고리의 다른 글

JNLP 테스트  (36) 2010.02.14
JAVA 리눅스 IP 주소 알아내기  (38) 2008.12.02
apache 프로젝트의 commons-dbcp 를 이용하여 connection pool 만들기.  (42) 2008.08.15
java 에서 xmlrpc 사용하기  (38) 2008.07.13
JAVA5(1.5) 달라진점!  (19) 2006.12.16
by cranix 2006. 12. 16. 20:14

java5 로 넘어오면서 많이 바꼈는데 가장 맘에드는건 저너릭스와 enum 타입이 생긴것이다.

annotation 은 어떤곳에 써야할지 아직은 감이 안잡힌다.





1. static 멤버 import 하기

  - static import 를 사용하면 클래스명을 안쓰고 static 멤버변수와 static 메소드에 접근할수 있다.


import static java.lang.Math.*;

public class StaticImportTest {
public static void main(String args[]) {
double y = sin(1.2);
System.out.println("SIN(1.2) : " + y);
System.out.println("PI : " + PI);
}
}




2. Eunumerated 타입

  - c 언어의 enum 타입처럼 자동으로 숫자를 매겨주는 변수를 만들수 있다

  - 이것과 관련해서 enumMap 이라는 클래스도 있다


public class EnumTest {
public enum testEnum {ITEM1,ITEM2,ITEM3};

public static void main(String args[]){
System.out.println(testEnum.ITEM1);
}
}




3. 새로운 for 문 형태

  - 자바스크립트의 for in 구문 같이 배열을 자동으로 탐색할수있다.

  - 단 for 문 안에서 꼭 String tmp 와 같은형태로 선언해야 한다는것은 좀 이상했다.


public class NewForTest {
public static void main(String args[]) {
String strs[] = {"test1","test2","test3"};
for (String tmp : strs) {
  System.out.println(tmp);
}
}
}




4. autoBoxing, autoUnBoxing

  - wrapper 클래스로 변환히 한층 더 자유로워졌다.


public class AutoBoxingTest {
public static void main(String args[]) {
Integer i = 10;
int i2 = i;

System.out.println("I:" + i2);
}
}




5. c언어의 printf 와 유사한기능 추가

  - . 뒤에있는것이 소숫점이하 자릿수가 아니라 전체 자릿수이다.


public class PrintfTest {
public static void main(String args[]) {
double PI = 3.141592;
System.out.printf("%7.3g",PI);
}
}




6. 가변 파라메터(varargs)를 갖는 메소드

  - 이건 왜 이제야 지원하는지 의심스럽다.


public class VarargsTest {
public static int sum(int... data) {
int total = 0;
for (int n : data) {
  total += n;
}
return total;
}
public static void main(String args[]) {
int total = sum(1,2,3,4,5,6,7,8,9,10);
System.out.println("SUM : " + total);
}
}





7. 저너릭스(generics)

  - 이제 클래스 생성할때 리턴 타입도 지정받을수 있게 됬다.

  - 아래 예제를 보면 알겠지만 클래스를 만들때 리턴 타입까지 고려해서 만들수가 있게되었다.


class MyMemory<M> {
private int size = 0;
private Object objects[];

public MyMemory(int size) {
this.size = size;
objects = new Object[size];
}

public M get(int i) {
return (M)objects[i];
}
public void put(int i,M obj) {
objects[i] = obj;
}
public int getSize() {
return size;
}
}


public class GenericsTest {
public static void main(String args[]) {
MyMemory<String> mem = new MyMemory<String>(10);
mem.put(1, "test");
mem.put(2, "test2");
mem.put(3, "test3");
System.out.println(mem.get(1));
System.out.println(mem.get(2));
System.out.println(mem.get(3));
}
}




8. 주석(annotation)

  - 이놈은 좀 길기때문에 다음회에 연재하겠다.

'알짜정보 > Java' 카테고리의 다른 글

JNLP 테스트  (36) 2010.02.14
JAVA 리눅스 IP 주소 알아내기  (38) 2008.12.02
apache 프로젝트의 commons-dbcp 를 이용하여 connection pool 만들기.  (42) 2008.08.15
java 에서 xmlrpc 사용하기  (38) 2008.07.13
annotation 주석?  (43) 2006.12.16
by cranix 2006. 12. 16. 20:13