2010/05/18 20:41 2010/05/18 20:41
Posted by freeism
새로 참여한 프로젝트에서 jsp 대신 freemarker를 사용하게 되었다.

eclipse 에서 jsp는 기본적으로 syntax highlighting을 해주는데, freemarker는 까만 글씨로만 나와서 답답하다.

(기본이 아닐지도 모르겠다, jsp만 써왔으니 젤 첨에 설치해놓고 까먹었을지도...)

http://freemarker.org/eclipse/update/ 요 사이트 주소는 먹통이고,

http://sourceforge.net/projects/freemarker/files/ 이쪽으로 들어가보면 플러그인은 deprecated 되었단다.

구글링으로 찾아보니, 프로젝트가 jboss 쪽으로 옮겨진 듯 하다.

http://download.jboss.org/jbosstools/updates/JBossTools-3.1.0.GA/ 주소를 등록하면

freemarker plugin 을 설치할 수 있다.
2010/05/04 20:59 2010/05/04 20:59
Posted by freeism

그동안 mockito만 사용하다가 harmcrest-library를 사용하게 되었다.

AssertThat(A, is(B)); 코드를 사용하려면 위 lib가 필요하더라.

그런데 아래와 같은 exception 발생했다.

java.lang.SecurityException: 
class "org.hamcrest.Matchers"'s signer information does not match signer
information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:769)
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:484)

구글링 결과 두 개의 동일한 lib가 존재해서 충돌나는 것이라고 한다.

http://emptylist.wordpress.com/2010/02/14/org-hamcrest-matchers-and-eclipse-java-lang-securityexception/

알아봤더니 mockito에서 harmcrest core lib를 포함하고 있다. (mockito-all 버전)

그래서 mockito-core 버전을 받아서 쓰기로 했다.

추가 : 갈릴레오 eclipse에서 사용하는 기본 junit 4.4 버전에도 harmcrest core lib가 있다. 이것도 제거

2010/03/18 11:24 2010/03/18 11:24
Posted by freeism
nginx 라는 초경량화된 웹서버가 있다. 뭐, 아파치랑 비슷한 역할을 하는데, 좀 가볍다는 정도인 듯 하다.

그런데 해당 웹서버를 쓰는 서버에 자바로 http client를 물리니 소켓 커넥션 시에

"Software caused connection abort" 라는 오류 메시지가 나타난다.

구글링을 해보니, ACK가 도달 안하고 어쩌고.. @%#$!!... 대충보니, 네트워크 핸드쉐이킹할 때 쳐내는 것 같다.

똑같은 프로그램인데, 아파치로 구동시에는 정상 응답이 오고.. nginx로 구동시에는 에러 응답이 온다.

HTTP/1.1 200 OK
Date: Wed, 10 Mar 2010 16:41:07 GMT
Server: Apache/2.2.0 (Unix) mod_jk/1.2.15
Cache-Control: no-cache

<?xml version="1.0" encoding="utf-8" ?>
<response>
</response>

HTTP/1.1 200 OK
Server: nginx/0.7.61
Date: Wed, 10 Mar 2010 16:41:34 GMT
Content-Type: text/xml;charset=UTF-8
Connection: close
Pragma: no-cache

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/0.7.61</center>
</body>
</html>

도대체 이유를 잘 모르겠다. 뭔가 내가 쓰고 있는 라이브러리에서 request header를 조금 가공시키나?

좀 더 고민해봐야할 문제인 듯 하다^^

2010/03/12 19:11 2010/03/12 19:11
Posted by freeism

[ERROR][2010/03/11 18:03:05] Context initialization failed - ContextLoader::initWebApplicationContext()
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxDAO' defined in class path resource

방금 전까지 잘 돌아가던 이클립스+톰캣이었는데,
 
아무런 이유없이 위같은 exception을 뱉어내면서 톰캣이 뜨지를 않는다.

완전 삽질하다가 결국 톰캣 옵션이 문제인 것을 알았다.



저기에서 Enable security 옵션이 체크되어 있네... -_- (원래 체크 안되어 있었다)

무슨 옵션인지 정확하게는 모르겠지만, 나도 모르는 사이에 실수로 클릭을 했나보다.

일단은, 바쁜고로 넘어가고.. 저 옵션에 대해서는 다음번에 연구해보기로 한다.

2010/03/11 18:06 2010/03/11 18:06
Posted by freeism

우리가 알고 있는 시간은 10시10분10초 혹은 10:10:10 이렇게 표현이 되지만,

컴퓨터가 알고 있는 시간은 결국 long 타입이다.

실제로 컴퓨터 시간을 찍어보면 1265275107687 처럼 나온다.

(저게 1970년 언제를 기준으로 계속 센 거라나 머라나..-ㅅ-)

여튼 그런데 프로그래밍할 때, 조작해보려면 여간 까다롭지 않다.

그래서 / % 연산자를 써서 C언어 식으로 조작할 수도 있지만,

자바에서는 가뿐하게 API를 사용해서 해결할 수 있다.


public void test() {
long today = System.currentTimeMillis(); // long 형의 현재시간
System.out.println(today);

DateFormat df = new SimpleDateFormat("HH:mm:ss"); // HH=24h, hh=12h
String str = df.format(today);
System.out.println(str);

Date date = new Date(today);
System.out.println(date);
}


currentTimeMillis() 는 아까 얘기했던 컴퓨터의 시간을 long 타입으로 읽어오는 메소드이다.

DateFormat 요 객체로 쉽게 조작이 가능한데, HH는 24시간제로 hh는 12시간제로 표시된다.

그리고 long 타입의 숫자를 Date 객체의 생성자에 넣어주면 자기가 알아서 파싱해준다.

예전에 쓰던 Date.parse() 따위 deprecated 된지 오래다.

위처럼 하면 결과는,

1265275107687
18:18:27
Thu Feb 04 18:18:27 KST 2010


요렇게 나온다.

2010/02/04 18:25 2010/02/04 18:25
Posted by freeism
custom 태그를 이용해서 보이는 글자수 이상이 되면 ... 으로 잘라내도록 되어 있다.

그런데 거기에 css로 영역을 넘어가는 것에 대해서는 text-overflow:ellipsis 로 잘라내도록 되어 있다.

어떻게 보면 중복 적용인가?

여튼 그런 경우에 css 영역에는 6자 제한을 두고, tag 에는 7자 제한을 두게 되었다.

이 때, IE 와 FF에서 서로 다른 반응을 보인다.

IE에서는
 

FF에서는
 

IE에서는 tag가 우선되어 먼저 글자수를 잘라내고 ...으로 표현되었고,

FF에서는 css가 우선되어 먼저 ellipsis로 잘라내서 7번째 글자가 살짝 잘려서 표현됐다.


코드 상에 크게 문제가 없으니 웹페이지 렌더링하는 방식이 다른 것 같다.. 면서

그냥 둘 다 같은 6자 제한으로 맞췄다.. -ㅅ-

(굳이 우주에서 쓸 수 있는 볼펜 만들 필요없잔아, 그냥 연필쓰면 되는데...)
2010/02/04 14:33 2010/02/04 14:33
Posted by freeism

스위치의 분류 :

L2 : OSI 레이어 2에 속하는 MAC 어드레스를 참조하여 스위칭하는 장비


L3 : OSI 레이어 3에 속하는 IP주소를 참조하여 스위칭하는 장비


L4 : OSI 레이어 3~4에 속하는 IP 주소 및 TCP/UDP 포트 정보를 참조하여 스위칭하는 장비


L7 : OSI 레이어 3~7에 속하는 IP 주소, TCP/UDP 포트 정보 및 패킷 내용까지 참조하여 스위칭함





L4/L7 스위치의 용도 :


일반적으로 서버들의 로드밸런싱을 위해 사용됨


복수개의 웹서버가 있을 때, 임의의 웹서버에 접속을 시도하면, 스위치가 각 서버의 부하를 고려하여


적당한 서버와 연결시켜준다.


설정에 따라 순차적 연결 또는 접속이 가장 적은 서버에 연결하는 방식 등이 있다.



L4 스위치 :


Layer 4에서 패킷을 확인하고 세션을 관리하며, 로드밸런싱을 제공하는 스위치

TCP/UDP 패킷 정보를 분석해서 해당 패킷이 사용하는 서비스 종류 별로 처리(HTTP, FTP, SMTP...)

세션관리, 서버/방화벽 로드밸런싱, 네트워크 서비스 품질 보장


 
 
L7 스위치 :

L4 스위치의 서비스 단위 로드밸런싱을 극복하기 위해 포트 + 데이터 페이로드 패턴을 이용한 패킷 스위치

(e-mail 내용/제목, URL ...)

connection pooling(시스템 부하 감소), Traffic Compression (컨텐츠 압축 전송), 보안 기능


 
L4 vs L7 :
 
공통점 : 스위치로 들어온 패킷을 적절한 목적지로 전송해줌 (불필요한 패킷은 drop시킴)

차이점 :
 
  기능과 역할은 동일하나 패킷을 분석하는 인텔리전스가 다름

  L7은 보안 기능 강화

  (DOS/SYN 공격 방어, CodeRed/Nimda 등 감염 패킷 필터링, 네트워크 자원 독점 방지 등)

L7 스위치에 대한 오해 :
 
  L7 스위치는 레이어 7 계층을 위한 스위치이다.

     : 기본적으로 L2, L3 및 부분적으로 L4 스위치를 지원한다. 레이어5 세션 계층 위주이다.

  L7 스위치는 URL 기반 스위치다.

     : L7 스위치 기능에 대한 일부분을 말한 것이다.

  L7 스위치는 모든 TCP/UDP 포트(0-65535)에 대한 인지가 가능하다.

     : 알려진 일반 포트에 대한 세션처리는 가능하지만, 순간적으로 사용하는 임시 포트는 제한적이다.

 
sticky session :
 
L4 스위치를 통해 분배된 서비스 세션은 하나의 연결 요청에 1~n 중에 한 대의 서버에 분배된다.
 
여러 번 시도해도 그 때마다 1~n 중에 한 대에 분배되므로, 같은 서버에 접속될 확률은 1/n이 된다.
 
그러나 처음에 접속했던 서버와 같은 서버에 계속 연결시킬 수 있다.
 
바로  sticky 옵션이다.
 
(일반적인 상태)
사용자A -> L4 -> 1번서버
사용자A -> L4 -> 3번서버

(sticky 상태)
사용자A -> L4 -> 1번서버
사용자A -> L4 -> 1번서버

기존 사용자의 세션 상태를 timeout 시간 내에는 계속 유지시켜주는 것이 sticky session이다.

timeout 시간은 60분 이내로 조절 가능하다.
 
 
sticky session의 문제점 :

L4 스위치의 가장 큰 목적(?)인 로드밸런싱이 제대로 동작하지 않을 수 있다.
 
개별 사용자가 사용할 경우에는 세션 timeout이 있으므로 어느 정도 로드밸런싱을 충족시킨다.
 
하지만 프록시서버를 사용하는 경우 문제가 된다.
 
예를 들어 회사에서 외부로 나가는 경우 각 PC의 IP가 아니라 프록시서버의 IP를 달고 나간다.
 
여러 사람이 timeout 시간 내에 접속하는 경우, 계속해서 한 서버에만 로드가 집중된다.
 
(외부에서 보기에는 동일한 사람으로 보이므로)


대안 :

SSL이나 기타 다른 보안모듈을 이용해서 인증된 특정 사용자에 대해서 Cookie/DB에 기록 후
 
해당 사용자에 대해서만 세션을 유지하도록 한다. (단점 : performance 저하 및 기타 cost)
 
그래서 L7 스위치를 사용한다.

 
< L7 스위칭 방식 >

URL 스위칭 :

URL 주소에서 특정 String을 검사하고, 검색된 문자열을 기준으로 부하를 분산시키는 방식이다.
 
http://www.test.com/test.html 이라는 주소로 사용자들이 웹페이지를 요청한다.
 
해당 페이지는 이미지가 빈번히 변경되고, 이미지 크기도 크다. (전체적으로 로딩이 느리다)
 
이런 경우, client의 http request 내용에 html이 들어가면, 메인 웹서버로 전송하고..
 
해당 request에 jpg 등의 이미지를 요청하는 경우 이미지 웹서버로 분산할 수 있다.
 

Cookie 스위칭 :
 
Http header의 cookie 값에 따른 특정 String을 기준으로 부하를 분산하는 방식이다.
 
Cookie 값 필드를 보고 설정된 분류 기준에 따라 어느 서버로 보낼지 결정한다.


 
Content 스위칭 :
 
legacy한 L7 스위칭은 URL/Cookie 스위칭을 사용했으나,
 
최근 L7 스위칭은 Content 스위칭 방식을 이용한다.
 
기존에는 제한적인 기능, 즉 호스트네임, URL, Cookie 를 기준으로 로드밸런싱을 하였으나,
 
L7 content 스위칭은 추가적인 기능을 지원한다.
 
  Http header 의 모든 필드를 기반으로 한다.
 
  XML content를 기반으로 한다.
 
  XML tags 나 multiple Http header를 기준으로 복잡한 로드밸런싱을 구현한다.
 
  Cookie 와 http header의 insertion과 deletion을 포함한 contents-rewrite 기능을 지원한다.
 
  alternate한 url이나 도메인의 redirecting request를 지원한다.


* 이미지출처 : 인터넷에 떠도는 것을 긁어왔습니다(마땅히 출처를 알 수가 없어요) 문제가 되면 연락주세요^^
2010/02/01 14:05 2010/02/01 14:05
Posted by freeism
예전에 textcube 플러그인 중에서 sytax highlighter가 왠일인지 잘 작동을 안해서

고쳐 볼 생각은 안하고 귀찮아서 내던졌다.

솔직히 좀 쪽팔리기는 한데..

실은 아래에 있는 코드들 전부 텍스트에 html로 색깔 입힌거다-_-a

그런데 작성하는 코드량이 많아지면서

점점 필요성을 느끼던 차에..

감사하게도 업그레이드된 버전이 나와서 적용했다.

잘 된다.. ㅋ


public static void main(String[] args) {
System.out.println("Hello Java");
}


참고 사이트 : http://theeye.pe.kr/entry/SyntaxHighlighter-13-using-Google-Code-Pretify#trackback18431
2010/01/23 15:32 2010/01/23 15:32
Posted by freeism
프로그래밍 언어에서는 day + 1 처럼 뭔가 연산식을 사용하게 되는데,

리눅스 서버에서는 통하지 않는다.

/bin/date +1 을 하게 되면 1

/bin/date +%Y.%m.%d+1 을 하게 되면 2010.01.21+1

로 출력된다.

date --date '1 days ago' 라고 하면 2010.01.20 으로 하루 전 날짜가 잘 표현된다.

뭔가 연산식이 아니라, 말로 표현된 명령어 옵션이라니.. 조금 당황;;

근데 1day ago 나 1days ago 나 같은 결과를 갖는다.

사람의 언어 문법을 몰라도 쓸 수 있도록 배려한 걸까^^
2010/01/21 19:09 2010/01/21 19:09
Posted by freeism
이전페이지 1 2 3 4 5 ... 18 다음페이지
사이드바 열기