세션클러스터링을 이용하기 위해 검색하면 많이 나오는 방법을 사용했지만 리눅스 eth0 설정부터

방화벽등으로 쉽지 않음.

 

WAS끼리 직접 서로 주고 받게 설정.

 

<Engine 설정의 맨 마지막 부분 jvmRoute는 apache에서 mod_jk 명칭으로 변경

 

<Receiver 의 설정은 현재 Was에서 받는 IP 및 Port 를 설정

<Member 의 내용은 세션클러스터링 할 WAS IP 및 PORT 설정을 각자 맞게 넣고 설정하면 됨.

uniqueId 의 내용은 맨 끝의 1번 WAS에서는 2로 설정 2번 WAS에서는 1로 설정

 

1번 WAS 클러스터링

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
        <!-- clustering -->
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"  channelStartOptions="3">
                <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
                <Channel className="org.apache.catalina.tribes.group.GroupChannel">
                        <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
                        </Sender>
                        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                        address="127.0.0.1"
                        port="4055"
                        autoBind="0"
                        selectorTimeout="5000"
                        maxThreads="6"/>

                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor" staticOnly="true"/>
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
                        <Member
                                className="org.apache.catalina.tribes.membership.StaticMember"
                                port="4056"
                                host="127.0.0.1"
                                uniqueId="{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2}"
                        />
                        </Interceptor>
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
                </Channel>

                <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;" />
                <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
                <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
        </Cluster>
        <!-- clustering  -->

 

2번 WAS

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
        <!-- clustering -->
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"  channelStartOptions="3">
                <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
                <Channel className="org.apache.catalina.tribes.group.GroupChannel">
                        <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
                        </Sender>
                        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                        address="127.0.0.1"
                        port="4056"
                        autoBind="0"
                        selectorTimeout="5000"
                        maxThreads="6"/>

                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor" staticOnly="true"/>
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
                        <Member
                                className="org.apache.catalina.tribes.membership.StaticMember"
                                port="4055"
                                host="127.0.0.1"
                                uniqueId="{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}"
                        />
                        </Interceptor>
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
                </Channel>

                <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;" />
                <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
                <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
        </Cluster>
        <!-- clustering  -->

 

의 설정으로 실행 후 정상적으로 세션클러스터링이 동작함.

물론 iptables에서 각 4055, 4056 포트는 열어줌..

'개발자 > Server' 카테고리의 다른 글

톰켓 운영 옵션  (0) 2019.01.18
톰켓 심볼릭 링크 인식하기  (1) 2019.01.03
PHP CONFIGURE  (0) 2014.05.23
MYSQL CONFIGURE  (0) 2014.05.23
mysql 외부연결  (0) 2014.05.23
Posted by Swamp of hope
,

수영장에서 수영을 하다보면 너무 힘들어 거리를 자꾸 까먹고

한바퀴 더돌았는지 덜돌았는지, 애매할땐 -1 하고 한바퀴 더 돌다보니 

 

애플워치와 한참을 고민하다가 3월쯤 겔럭시 워치를 구매하였습니다.

갤럭시 워치 액티브가 나오기 직전이었으나 (1주일 안걸리고 나왔어요.. ㅠㅠ)

액티브에서는 수영 체크가 5월부터 진행된다고 하고 40mm가 작아보여서 그냥 워치를 구매 했습니다.

 

제가 사기전에 궁금했던 부분을 적습니다.

 

1. 방수능력 

일반 수영중에 전혀 지장 없이 잘 됩니다.

방수모드 켜라고 하는데 그건 물기가 화면 터치 오작동 때문이고 그냥 해도 방수는 잘 됩니다.

샤워시 착용하고 해도 전혀 지장이 없습니다. 

 

다만 옆부분 스피커쪽에 물이 들어가는데 잘 털어주면 됩니다.

 

수심 5m깊이 풀에서 수영할 일이 종종있고 수심 4.8m정도까지 들어가서 약 30~40초가량있어도 방수는 잘됩니다.

 

그냥 막 들어가는 것은 아니고

프리다이빙 초급 자격증 가지고 있어 잠수 시 이퀄라이징(안되지만 코잡고 합니다 ㅠㅠ) 하면서 들어갑니다.

 

2. 수영거리 측정

정확하지 않습니다. 만약 1km정도 돌았다면 1.1km정도 했다고 나옵니다.

영법 측정은 정확하긴 한데 50m길이 풀에서 25m정도에서 영법을 바꾸면 혼영 체크가 됩니다.

 

50m정도 갔을 때마다 손목에 진동이 옵니다.

 

다만 영법이 바뀔 때, 거리 측정오류가 있을때가 있어 영법을 바꾸는 순간 50m를 갔다고 체크 할때가 자주 있었습니다.

 

2019년 5월 말쯤 갤럭시 워치 업데이트 이후, 거리 측정이 거의 안됩니다.

심박수만 찍힙니다.

 

5월 업데이트 전 거리측정되던 데이터
5월 말 업데이후 심박수만 체크됩니다.

3. 운동체크

이외에 많은 운동을 체크 할 수 있으나 보통 

수영장, 걷기, 자전거 이외에 다른운동은 안하고 있어 3가지 정도만 체크하고 다닙니다.

 

수영장도 거리마다 체크가 되긴하는데 수영중에 뭐라고 하는지 안들려서 모르겠습니다.

요즘은 아예 그것도 없지만요.

간혹 작동할때 물속에서 손목에 진동이 오고 턴할 때 뭐라고 하는걸 듣긴했습니다만..

 

GPS 기능을 이용할려면 갤럭시 워치 앱에서 강제로 실행 시켜야 GPS 체크 되고

일정 거리마다 갤럭시워치에 달려 있는 스피커로

(수영제외 자전거 걷기등 1km 지날때마다) 심박수/거리/평균속도/속도 등을 알려줍니다.

 

나름 좋긴해요. s8+사용하고 있는데 삼성핼스 앱으로 따로 체크해봤습니다.

워치와 데이터 거의 동일합니다. 다만 같이 체크하면 운동이 2개가 체크됩니다.

폰데이터와 워치용 데이터로 나눠져서요.

 

 

 

이정도 되겠네요.

 

5월말 업데이트 이후에 수영거리 체크 안되는거 아무도 클레임을 걸지 않은건지 업데이트가 안되고 있네요.

이전 버전으로 돌아가고 싶어요 ㅠㅠ 그때는 그나마 좋았는데

 

액티브 밀어주기 인지 워치는 버림 받은 기분이네요.

 

애플워치 사야 하나 심히 고민중입니다.

휴대폰이 아이폰이 아니라서 못사고 있을뿐이죠.

'주저리 주저리' 카테고리의 다른 글

옮겨 왔음..  (1) 2014.05.15
Posted by Swamp of hope
,
vi %TOMCAT_HOME%\bin\setenv.sh

CATALINA_OPTS="-Dserver=dev"
JAVA_OPTS=$JAVA_OPTS" -Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -XX:NewSize=512m"
JAVA_OPTS=$JAVA_OPTS" -XX:MaxNewSize=512m -XX:PermSize=1024m -XX:MaxPermSize=1024m"
JAVA_OPTS=$JAVA_OPTS" -Djava.security.egd=file:/dev/./urandom"
JAVA_OPTS=$JAVA_OPTS" -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs"
JAVA_OPTS=$JAVA_OPTS" -XX:ParallelGCThreads=2 -XX:-UseConcMarkSweepGC"
JAVA_OPTS=$JAVA_OPTS" -XX:-PrintGC -XX:-PrintGCDetails -XX:-PrintGCTimeStamps"
JAVA_OPTS=$JAVA_OPTS" -XX:-TraceClassUnloading -XX:-TraceClassLoading"
CATALINA_OPTS="-Dserver=dev"
는 운영서버와 개발서버 구분으로 context-config.xml등 프로퍼티 설정에서
#{systemProperties['server'] != null ?systemProperties['server'] : 'dev'}
를 이용하면 된다.

아래는 예제.
<util:properties id="dbProp" location="classpath:conf/spring/db.#{systemProperties['server'] != null ?systemProperties['server'] : 'dev'}.properties" />
를 이용하여 local dev live 등으로 서버등을 구분할 수 있다.
JAVA_OPTS 는 다른 부분은 별 상관 없으나 CENTOS 또는 JAVA버전에서 톰켓 실행이 늦을 때
-Djava.security.egd=file:/dev/./urandom
의 옵션을 붙여주면 빠르게 실행 된다.
%TOMCAT_HOME%\BIN 폴더에
setenv.sh파일에 넣어주면 catalina.sh 안에 설정을 안해줘도 알아서 인식


'개발자 > Server' 카테고리의 다른 글

Tomcat 세션 클러스터링 멀티캐스트를 이용하지 않는 방법.  (2) 2020.01.15
톰켓 심볼릭 링크 인식하기  (1) 2019.01.03
PHP CONFIGURE  (0) 2014.05.23
MYSQL CONFIGURE  (0) 2014.05.23
mysql 외부연결  (0) 2014.05.23
Posted by Swamp of hope
,

한동안 톰켓 6버전만 사용하고 7버전때 잠깐 고생했던거 같은데 1년전이라 기억도 안남.


심볼릭링크로 연결된 upload 폴더가 톰켓 8.5버전에서 인식이 안됨.


<-- 기존 사용법 -->
<Host name="localhost" docBase="webaaps" allowlinking="true" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="경로" reloadable="true" useHttpOnly="false" allowLinking="true" />
</Host>
<!-- 변경1 -->
<Host name="localhost" docBase="webaaps" allowlinking="true" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="경로" reloadable="true" useHttpOnly="false">
<Resources allowLinking="true" />
</Context>
</Host>
<!-- 변경2 -->
<Host name="localhost" docBase="webaaps" allowlinking="true" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="경로" reloadable="true" useHttpOnly="false">
<Resources>
<PreResourcesa
className="org.apache.catalina.webresources.DirResourceSet"
base="경로/upload"
webAppMount="/upload"
internalPath="/"/>
</Resources>
</Context>
</Host>

이것 저것 다 시도 해봤으나 적용 안됨.
안그래도 바쁜 시기에 별것도 아닌거 가지고 한시간을 날려버럼..

Tomcat 폴더/conf/context.xml 안에 
<Context> 태그가 있다 그 안에 

<Resources allowLinking="true" />

한줄 넣고 모든게 해결.


'개발자 > Server' 카테고리의 다른 글

Tomcat 세션 클러스터링 멀티캐스트를 이용하지 않는 방법.  (2) 2020.01.15
톰켓 운영 옵션  (0) 2019.01.18
PHP CONFIGURE  (0) 2014.05.23
MYSQL CONFIGURE  (0) 2014.05.23
mysql 외부연결  (0) 2014.05.23
Posted by Swamp of hope
,
MYSQL에서 마이그레이션 도중에 AES_ENCRYPT, AES_DECRYPT를 사용 한 컬럼 때문에 고민

google 신이 도와줌..

아 어짜피 MYSQL 이제 오라클꺼니까..  서로 호환 되는건가..






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.GregorianCalendar;
 
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
 
import org.apache.commons.codec.binary.Hex; 
 
public class AesUtil {
    public static void main(String[] args) throws Exception{
        // Encrypt
        final Cipher encryptCipher = Cipher.getInstance("AES");                            
        encryptCipher.init(Cipher.ENCRYPT_MODE, generateMySQLAESKey("암호키""UTF-8"));        
        System.out.println(new String(Hex.encodeHex(encryptCipher.doFinal("암호화 될 변수".getBytes("UTF-8")))).toUpperCase()); 
        
        // Decrypt
        final Cipher decryptCipher = Cipher.getInstance("AES");                            
        decryptCipher.init(Cipher.DECRYPT_MODE, generateMySQLAESKey("암호키""UTF-8"));
        System.out.println(new String(decryptCipher.doFinal(Hex.decodeHex("33362642F191A6FA40E6F2341001D969AE9640831F2314DD7B18832DA8A077B0".toCharArray()))));
    }
    
    public static SecretKeySpec generateMySQLAESKey(final String key, final String encoding) {
        try {
            final byte[] finalKey = new byte[16];
            int i = 0;
            for(byte b : key.getBytes(encoding))
                finalKey[i++%16] ^= b;            
            return new SecretKeySpec(finalKey, "AES");
        } catch(UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }
}
 
 
cs


Posted by Swamp of hope
,

오라클 UTL_URL.ESCAPE

개발자 2016. 7. 27. 10:21

오라클에서 URL을 만들 때, 영문을 제외한 문자들이 IE주소창에서 변환이 안되어 깨지는 경우


아래 함수 사용.


SELECT UTL_URL.ESCAPE(URL => '한글', URL_CHARSET =>  'UTF-8') FROM DUAL



'개발자' 카테고리의 다른 글

윈도우 팁.  (0) 2015.05.10
SYBASE 에서 ALIAS 적용 시 에러 발생 처리 법  (0) 2014.10.22
MS-SQL 에서 쿼리로 컬럼 조회방법  (0) 2014.08.07
Posted by Swamp of hope
,

전자정부 프레임워크에서 발생하는 iBatis 에러 .


Caused by: com.ibatis.sqlmap.client.SqlMapException: Error.  Could not initialize class.  Cause: java.lang.ClassNotFoundException



typeAlias 로 선언된 건 resultClass

resultMap 으로 선언한 건 resultMap 


대충 복붙으로 하다보니 생긴 에러.


Posted by Swamp of hope
,

윈도우 팁.

개발자 2015. 5. 10. 01:47

적은 용량의 ssd를 사용하다 보니 아래와 같은 폴더 때문에 하드가 꽉차서 해결방안을 찾다보니 나온방법.


원글은


http://blog.daum.net/sunyup/80


입니다.



Windows 7/8에서 사용자(Users), Program Files, Program Files (x86) 폴더를 D드라이브로 이동켜서 심볼릭 링크로 링크시키는 방법을 소개하고자 합니다. 심볼릭 링크에 대한 자세한 설명은 이전 글의 내용을 읽어보시길 바랍니다. 사용자 폴더의 경우 간단하게 사용자 폴더의 자신의 계정 폴더 안의 [내 문서], [내 사진] , [즐겨찾기] 등의 폴더를 잘라내기해서 옮겨줄 수도 있지만 저 처럼 사용자 폴더 자체를 통째로 옮기길 원하시는 분들도 계실 것입니다. 저는 그 방법을 소개하고자 합니다.

 

심볼릭 링크를 이용하는 이유는 보통 프로그램이나 게임을 설치하면 C드라이브에 설치가 됩니다. 설치 경로를 D드라이브로 변경할 수 있지만 일부의 경우 레지스트리 등의 문제로 실행이 안되는 경우도 있고, C드라이브로 자동으로 설치되는 경우도 있습니다. 심볼릭 링크를 이용하면 설치 경로가 C드라이브로 돼있어도 실질적으로는 D드라이브에 설치가 되지만 실행해는 문제가 생기지 않기 때문에 사용자(Users), Program Files, Program Files (x86) 폴더를 통째로 D드라이브로 옮겨주고 링크를 걸어주는 것입니다.

 

바로 본론으로 들어가겠습니다. 먼저 PE 화면으로 진입을 해야하는데 잘 모르시는 분들도 계실테니 PE 화면 진입하는 방법부터 알아보겠습니다. 각각 방법은 2가지 정도 됩니다.

 

Windows 7 사용자

- 1. 부팅 시 [F8] 키를 눌러 [컴퓨터 복구]를 눌러 나오는 화면에서 [명령 프롬프트]를 실행

- 2. Windows 7 DVD나 USB로 부팅하여 첫 화면에서 Shift+F10 키를 눌러 [명령 프롬프트]를 실행

 

Windows 8 사용자

- 1. 부팅 속도가 빨라 부팅 시 [F8] 키가 잘 안먹히므로 Windows 상에서 [명령 프롬프트]를 관리자 권한으로 실행하여 shutdown.exe /r /o 명령어를 입력하여 [복구 모드]로 진입한다음 [문제 해결]-[고급 옵션]에서 [명령 프롬프트]를 실행

- 2. Windows 8 DVD나 USB로 부팅하여 첫 화면에서 Shift+F10 키를 눌러 [명령 프롬프트]를 실행

 

 

위의 방법으로 [명령 프롬프트]를 띄웠다면 아래 명령어를 차례대로 입력해줍니다. 세줄만 입력해 주면 끝이므로 매우 쉽습니다.

 

 

※참고로 타이핑이 번거롭거나 귀찮으신 분들은 아래 명령어를 전체 다 메모장에 복사해서 외장하드 or USB 등의 저장 매체나 C, D드라이브에 텍스트 파일로 저장해 줍니다. 그리고나서 PE 화면의 [명령 프롬프트]에서 'notepad'를 입력하여 [메모장]을 실행한 후 [열기]를 눌러 저장했던 텍스트 파일을 불러와서 입력되어 있는 명령어를 세줄씩 복사한 다음 [명령 프롬프트] 창에 마우스 오른쪽 클릭을 하면 붙여넣기기 됩니다. 한줄씩 복사해도 되고 세줄다 한꺼번에 복사해도 됩니다. 마지막 줄에선 Enter를 쳐줘야 마지막 줄이 실행이 됩니다. 그러면 모든 작업이 완료가 됩니다.

 

 

[사용자(Users) 폴더 옮기기]

robocopy C:\Users D:\Users /E /COPYALL /XJ

rd /q/s C:\Users

mklink /D C:\Users D:\Users

 

[Program Files 폴더 옮기기]

robocopy "C:\Program Files" "D:\Program Files" /E /COPYALL /XJ

rd /q/s "C:\Program Files"

mklink /D "C:\Program Files" "D:\Program Files"

 

[Program Files (x86) 폴더 옮기기]

robocopy "C:\Program Files (x86)" "D:\Program Files (x86)" /E /COPYALL /XJ

rd /q/s "C:\Program Files (x86)"

mklink /D "C:\Program Files (x86)" "D:\Program Files (x86)"

 

여기서 내용 추가합니다. [ProgramData] 폴더 옮기는 걸 깜빡해서 말입니다. 숨긴 항목으로 되어있어 눈에 안보여서 깜박했네요. ㅡㅡ;

[ProgramData 폴더 옮기기]

robocopy "C:\ProgramData" "D:\ProgramData" /E /COPYALL /XJ

rd /q/s "C:\ProgramData"

mklink /D "C:\ProgramData" "D:\ProgramData"

'개발자' 카테고리의 다른 글

오라클 UTL_URL.ESCAPE  (0) 2016.07.27
SYBASE 에서 ALIAS 적용 시 에러 발생 처리 법  (0) 2014.10.22
MS-SQL 에서 쿼리로 컬럼 조회방법  (0) 2014.08.07
Posted by Swamp of hope
,

eclipse.ini




-startup

plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar

--launcher.library

plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807

-product

org.eclipse.epp.package.jee.product

--launcher.defaultAction

openFile

--launcher.XXMaxPermSize

256M

-showsplash

org.eclipse.platform

--launcher.XXMaxPermSize

256m

--launcher.defaultAction

openFile

-vm

c:/JAVA/1.6-64/bin/javaw.exe

-vmargs

-Dfile.encoding=UTF-8

-Dosgi.requiredJavaVersion=1.6

-Xverify:none

-Dhelp.lucene.tokenizer=standard

-XX:+AggressiveOpts

-XX:+UseConcMarkSweepGC        

-XX:+CMSParallelRemarkEnabled

-XX:+UseParNewGC

-XX:PermSize=128m

-XX:MaxPermSize=512m

-XX:NewSize=128m

-XX:MaxNewSize=512m

-Xms1024m

-Xmx1024m

Posted by Swamp of hope
,

2014/10/22일 보유현황

Apple 2014. 10. 22. 14:59

2013 late 맥프레 고급형

IPhone 5s

IPad mini 1세대

IPad 3세대

IPod nano 5세대 (1세대 였는데 리콜로 교체받음)

Time Capsule 




'Apple' 카테고리의 다른 글

2014/10/31일날 지름지름지름.  (0) 2014.10.22
2014 WWDC 발표를 보고 느낀점..  (0) 2014.06.03
2014 WWDC..  (0) 2014.06.02
보유 품목...  (0) 2014.05.29
아기다리고기다리던 맥용 카카오 ㅋㅋ  (0) 2014.05.29
Posted by Swamp of hope
,