1. config/environment.rb 파일에 gem 정보를 config.gem에 추가하기
2. rake gems로 gem 확인
3. rake gems:unpack로 Frozen 시킴
저작자 표시
신고
Posted by 봉보리봉봉
 TAG gem, Rails
PURGE MASTER LOGS BEFORE 날짜

저작자 표시
신고
Posted by 봉보리봉봉
pom.xml 파일 내에 다음 플러그인 설정을 추가.

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <mainClass>fully.qualified.MainClass</mainClass>
      </manifest>
    </archive>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
</plugin>


그 다음에 mvn assembly:assembly를 실행하면, build/finalName에 정의된 이름 뒤에 -jar-with-dependencies.jar를 붙인 jar 파일이 생성된다.


Tip.
mvn clean dependency:copy-dependencies package
다음과 같이 실행하면, target/dependency 디렉토리에 의존 라이브러리들이 복사되어진다.
저작자 표시
신고

'작업 > java' 카테고리의 다른 글

maven에서 dependency를 포함한 jar 생성하기  (2) 2010.07.16
Posted by 봉보리봉봉
기존에 CentOS에서 piranha-gui를 이용해서 Linux Virtual Server를 구축했었는데, 영 감이 안와서... 검색해서 ipvsadm으로 Virtual Server를 구축했다.

다음의 IP로 가상 서버를 구축한다고 가정한다.
Virutal IP : 192.168.1.10
Real IP : 192.168.1.20
Real IP : 192.168.1.21


일단은, 방금 구축한 경험으로 봤을 때 2대의 실 서버를 로드밸런싱하려면 ipvsadm을 동작시킬 서버까지 포함해서 3대가 있어야 될것 같다.(direct routing 방법 사용시)

Virtual Server
일단은 ipvsadm을 설치한다. 나의 경우는 yum을 이용해서 패키지 설치를 했다.
# yum install ipvsadm
# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
#

요렇게 해서 나오면 정상.

이제 가상 IP를 설정한다. 네트워크 디바이스가 eth0으로 할당되어 있다고할 때, eth0:1의 이름으로 가상 디바이스를 생성한다.
# ifconfig eth0:1 192.168.1.10 netmask 255.255.255.0 up
# ifconfig

이렇게 하면 eth0:1의 이름으로 네트워크 디바이스가 생성되어 있을 것이다. 재부팅되었을 때 자동적으로 올라오게 하기 위해서 다음의 파일을 생성한다.
# vi /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.10
NETMASK=255.255.255.0


Virtual Server에서는 가상 IP로 접속되는 연결을 실제 서버로 연결해야 하기 때문에 ip_forward 옵션이 활성화 되어 있어야 한다.
수정할 파일 : /etc/sysctl.conf
net.ipv4.ip_forward=1 로 변경한다.
# sysctl -p
혹은
# sysctl -w net.ipv4.ip_forward=1


이제 ipvsadm에 새로운 서비스를 추가한다.
# ipvsadm -A -t 192.168.1.10:80 -s wlc

옵션에 대한 자세한 사항은 ipvsadm --help 명령으로 확인하기 바란다.
위 옵션은 다음의 의미를 갖는다.
-A : 새로운 서비스 추가
-t : tcp 서비스
-s : scheduling. Weighted Least Connection

이제 서비스를 제공하는 실제 서버에 대한 세팅을 수행한다.
필요한 패키지로는 arptables_jf가 있다. 역시 yum으로 설치한다.
# yum install arptables_jf

arptables_jf 패키지를 설치하는 이유는 다음과 같다고 한다(나도 검색해서 찾았음).
Real Server에도 Virtual IP를 설정해 주어야 하는데, 이렇게 되는 경우 클라인트가 가상 IP를 요청했을 때 동일 네트워크에 Virtual IP를 2개 이상 갖고 있기 때문에 경우에 따라서 Real Server에서 응답을 주는 경우가 있다고 한다. 이렇게 되면 로드밸런싱이 되지 않기 때문에 arptables_jf를 이용해서 응답하지 않도록 해줘야 한다.
arptables_jf 설정을 수행한다.
# arptables -A IN -d <virtual_ip> -j DROP
# arptables -A OUT -d <virtual_ip> -j mangle --mangle-ip-s <real_ip>
# service arptables_jf save
# chkconfig arptables_if on

즉, 192.168.1.20에 해당하는 Real Server를 설정한다면,
# arptables -A IN -d 192.168.1.10 -j DROP
# arptables -A OUT -d 192.168.1.10 -j mangle --mangle-ip-s 192.168.1.20

이 된다.

이제, 네트워크 디바이스를 추가한다.
# ifconfig eth0:1 192.168.1.10 netmask 255.255.255.0

이 설정도 부팅시 자동으로 디바이스가 추가되도록 /etc/sysconfig/network-scripts에 파일을 생성한다.
파일 내용은 이미 기록했기때문에 생략한다.

여기가지 설정이 완료되면, 이제 ipvsadm에 real server를 추가해준다.
Virtual Server에서
# ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.20 -g

여기서 -g 옵션은 direct routing으로 추가하겠다는 의미임.

나머지 Real Server도 동일한 작업을 수행한 뒤 마지막으로 ipvsadm 설정을 저장하고, 서비스를 활성화 시켜준다.

# service ipvsadm save
# chkconfig ipvsadm on


이상이다. 근데 꼭 뭘 빼먹은 것 같은 이 기분은 뭘까...
신고
Posted by 봉보리봉봉

아무래도 우리가 입주해 있는 건물의 네트웍 문제인 것으로 생각된다.
Tomcat 포트를 80으로 변경해서 Apache를 거치지 않고 통신하도록 테스트도 해보고,
내부라인, 외부라인, 패킷 캡쳐 등 별별 짓을 해서 알았다.

애꿎은 Apache HTTP 서버랑 UTM 장비만 의심을 받고 있었네...

문의를 한 상탠데 언제쯤 해결이 될지는 모르겠다.
그래도 원인이 되는 부분은 알았으니, 이제 시간이 해결해 주겠지 ㅎㅎ

연관글

신고
Posted by 봉보리봉봉
Redhat Linux의 Virtual Server 사용을 하고 있는데, 한가지 문제점이 있다.
Tomcat 환경에서 동작하는 JSP 페이지에서 중간 내용까지 출력 후 버퍼를 flush하는 경우, 버퍼의 내용이 전송되어 클라이언트에 보내지고, 그 부분까지 렌더링이 되어야 하는데(렌더링은 브라우저마다 약간의 차이가 있다. IE/FF의 경우 잘 동작하지만, 크롬에서는 잘 안되는 듯) 웹서버에 직접 접근하여 결과를 보는 경우에는 의도한 대로 동작하지만, Virtual Server를 통해 가상 IP로 접속하는 경우 의도대로 동작되지 않는다.

구성은 LVS 세팅에서 Network 타입은 Direct Routing으로 설정되어 있으며, Real Server는 2개의 노드로 되어 있다.

매뉴얼을 찾아보고, 구글링을 해봐도 Virtual Server에서의 패킷 flush 옵션을 찾을 수 없었으며 결국 LVS 사용을 일단 포기한 상태 ㅠㅠ


버퍼 flush의 경우, 민감하게 생각되지 않을 수 있지만 가능한 부분까지 먼저 출력해줘야 사용자 입장에서는 웹 서비스가 동작하고 있다는 것을 느낄 수 있기에 그냥 넘어갈 수 없는 부분이다.

혹시, 누가 이 문제에 대한 해결책을 줄 수 없을까? ㅠㅠ

관련 포스트 : Apache + Tomcat + mod_jk 연동시 flush 문제

흑... 이 문제가 아닌가보다... Apache 문제인듯 한데... 뭔지 잘 모르겠다 ㅠ.ㅠ
신고
Posted by 봉보리봉봉
Tomcat에서 out.flush(), response.flushBuffer()가 잘 되는데
Apache + mod_jk 연동시 Apache를 통해서 접근할 때는 flush 기능이 정상적으로 동작되지 않는 문제가 있음.

한참을 찾아서, mod_jk 옵션 문제라는 것을 알았다.

mod_jk 옵션에 다음의 옵션을 추가해야 flush 기능이 정상적으로 동작함.

JkOptions +FlushPackets

헤더까지 바로 전송하고 싶은 경우는
JkOptions +FlushHeader

옵션을 추가해 주면 됨.

아래는 tomcat connector에 나와 있는 옵션의 설명.

JkOptions FlushPackets, you ask mod_jk to flush Apache's connection buffer after each AJP packet chunk received from Tomcat. This option can have a strong performance penalty for Apache and Tomcat as writes are performed more often than would normally be required (ie: at the end of each response).

  JkOptions     +FlushPackets


JkOptions FlushHeader, you ask mod_jk to flush Apache's connection buffer after the response headers have been received from Tomcat.

  JkOptions     +FlushHeader

신고
Posted by 봉보리봉봉
metadb 명령으로 meta device가 생성된 뒤 metastat 명령어로 확인하면 가끔 다음과 같이 미러링 된 디스크 중 하나가 '관리필요' 상태로 되는 경우가 있다.

# metastat d7
d7: 이중화
    서브미러 0: d17
      상태: 관리 필요    
    서브미러 1: d27
      상태: 확인         
    전달: 1
    읽기 옵션: roundrobin (기본값)
    쓰기 옵션: parallel (기본값)
    크기: 90098304 블록(42 GB)

d17: d7의 Submirror
    상태: 관리 필요    
    호출: metareplace d7 c1t0d0s7 <새 장치>
    크기: 90098304 블록(42 GB)
    스트립 0:
        장치       시작 블록    Dbase         상태 Reloc 핫 스패어
        c1t0d0s7          0     아니          관리    예 


d27: d7의 Submirror
    상태: 확인         
    크기: 90098304 블록(42 GB)
    스트립 0:
        장치       시작 블록    Dbase         상태 Reloc 핫 스패어
        c1t1d0s7          0     아니          확인    예 

이런 경우, device를 복구처리 해줘야 동기화가 다시 진행되는데 아래의 명령을 사용하여 동기화 처리할 수 있다. 위의 경우를 예를 들면 아래와 같은 명령어로 복구할 수 있다.

# metareplace -e d7 c1t0d0s7
d7: 장치 c1t0d0s7이(가) 활성화됨

이후 metastat 명령어로 확인해 보면 재동기화 작업이 자동적으로 시작되는 것을 확인할 수 있다.
신고
Posted by 봉보리봉봉
예전 CVS의 경우 치환 문자를 사용해서 소스 파일 내에 CVS 정보를 입력할 수 있었다. 내 경우 CVS는 써보지 않아서 정확한 정보는 알 수 없지만, 이러한 기능이 있다는 것은 알고 있기때문에, Subversion에도 동일한 혹은 유사한 기능이 있지 않을까 생각해 구글링을 통해 찾아본 결과, 있었다.

방법은 다음과 같다.

일단, 파일 내에 키워드 치환을 위해서는 SVN 속성이 설정되어 있어야 한다. 속성 이름은 svn:keywords이며, 속성 값에 키워드로 사용할 치환자를 입력함으로써 치환 기능을 사용할 수 있다.

속성 값은 다음 중에서 선택할 수 있다.

1) Date(LastChangedDate)
  저장소 내에서 파일이 변경된 마지막 시간으로 치환한다. 동일한 키워드로는 LastChangedDate가 있다.
  변환 예 : $Date:$ -> $Date: 2009-03-16 10:32:11 +0900 (Mon, 16 Mar 2009) $
2) Revision(LastChangedRevision, Rev)
  저장소 내에서 파일의 마지막 리비전으로 치환한다. 동일한 키워드로는 LastChangedRevision, Rev가 있다.
  변환 예 : $Revision:$(또는 $Revision:$) $ -> $Revision: 144 $
3) Author(LastChangedBy)
  마지막으로 커밋한 사용자로 치환한다. 동일한 키워드로는 LastChangedBy가 있다.
  변환 예 : $Author$ -> $Author: hajinsu $
4) HeadURL
  파일의 저장소 Full URL로 치환한다. 동일한 키워드로 URL이 있다.
  변환 예 : $HeadURL$ -> $HeadURL: https://domain.xxx/repo/path $
5) Id
  파일명, 리비전, 최종 수정시간, 수정자의 조합 문자열로 치환한다.
  변환 예 : $Id: file.c 221 2009-03-16 10:32:11Z hajinsu $


이밖에도 svn:eol-style 속성으로 텍스트 파일의 줄바꿈 문자에 대해 지정할 수 있음. 지정 가능한 속성 값은 native, CRLF, LF, CR이 있으며, 텍스트 파일의 경우 native로 설정해주면 subversion client에서 줄바꿈 문자를 클라이언트 OS에서 사용되는 문자로 변경해주기 때문에, OS별로 줄바꿈 문자를 따로 치환해 줄 필요가 없다.

svn:excutable 속성은 실행 가능한 파일임을 체크하는 속성으로 update시 실행 권한을 자동적으로 추가해준다. 속성 값은 필요 없다.


또한, 이러한 속성들은 확장자별로 자동적으로 지정 가능하다.
UNIX 계열에서는 ~/.subversion/config 파일을 수정하면 되며, 윈도우에서 TortoiseSVN을 사용하는 경우 다음과 같이 Setting 메뉴로 들어간 뒤,


위 버튼을 클릭하면, 속성 파일이 메모장으로 열리는데 여기서 주석 처리되어 있는 다음 행을 주석을 제거한 뒤, 파일 맨 하단에 확장자별로 속성을 설정해 주면 된다.

enable-auto-props = yes

[auto-props]
*.c = svn:eol-style=native;svn:keywords=Author Date Id Revision Rev
*.cpp = svn:eol-style=native;svn:keywords=Author Date Id Revision Rev
*.sh = svn:eol-style=native;svn:executable
Makefile = svn:eol-style=native;svn:keywords=Author Date Id Revision Rev
...

신고
Posted by 봉보리봉봉
돌아버리겠네...

어느 위치에서 할당한 리소스가 해제가 안되는지는 알겠는데, 쓰레드로 막 돌아버리니...
어떤 케이스에 해제 안되고 다시 할당되는지 찾기가 너무 힘들고나...
신고

'작업 > C,C++' 카테고리의 다른 글

Thread + Memory Leak  (2) 2009.03.12
KIN VC 2005  (0) 2008.04.26
fread, fwrite, fseek  (0) 2007.12.29
Posted by 봉보리봉봉
이전버튼 1 2 3 4 이전버튼

블로그 이미지
봉보리봉봉

공지사항

Yesterday33
Today5
Total131,868

티스토리 툴바