2024년 1월 28일 일요일

다이슨 슈퍼소닉 할인구매(에어랩도 가능)

 

1. 페이코에서 GSSHOP 검색후 쿠폰 다운받기


2. 지에스샵앱에서 

    다이슨 슈퍼소닉 검색 499,000원

    자동으로 5%쿠폰 24,950원 할인적용 

    회원등급별로 제공되는 

    GS SHOP할인권 23,700원 할인적용

    결제가는 450,350원

    결제수단은 페이코!


3.페이코에서 다운받은 쿠폰을 적용시켜 

   최대2만원을 할인 받아 결제금액은 430,350원!

   여기서 나는 쇼핑몰에서 10%할인가능한

   국민탄탄대로 올쇼핑카드를 사용함.

   그래서 총 결제금액은 약40만원!   



내가할수있는 최대의할인 싸게샀다

드라이기따위가40만원 싼거맞냐고


#다이슨 #슈퍼소닉 할인

#다이슨할인 #슈퍼소닉할인 #에어랩할인

#GSSHOP #지에스샵 #페이코 #페이코쿠폰

#국민티타늄카드

(Cluster) Wildfly standalone-ha.xml 를 사용한 Cluster 구성 방법

 (Cluster) Wildfly standalone-ha.xml 를 사용한 Cluster 구성 방법

Wildfly 를 서로 다른장비에서 cluster 하려고 하면 크게 두가지 방식이 있습니다.

standalone-ha 방식과 domain 방식이 존재합니다.

 

위 방식의 차이는 메뉴얼에 자세히 나와있으니 방식에 대한 설명은 건너띄고.. standalone-ha 를 사용해서 domain 모드보다 심플하게 관리하고 싶을때

UDP방식의 멀티캐스트 방식이 아닌 TCPPING 방식으로 cluster을 하는 방법에 대해 정리하겠습니다.

http://docs.wildfly.org/14/High_Availability_Guide.html#JGroups_Subsystem

 

standalone-ha 방식에 대해 정리 (TCPPING) 

wildfly 14버전의 jgroup 메뉴얼에는 TCPPING 방식에 대해 정의되있지 않습니다.

하지만, 기존 버전에는 설정 지원이 됐었고 번거롭게 UDP방식의 멀티캐스트 방식이 아닌 심플하게 서버대 서버로 TCP통신을 해서 간단하게 cluster을 하고 싶을때 사용하면 좋은 방식입니다.

 

 

1. standalone-ha 로 구성합니다.

  • 파일 : standalone-ha.xml
  • 내용 : 붉은색 표시된 부분을 추가해주시고 기존  불필요한 UDP부분은 삭제하시면 됩니다. 
             추가로 port-offset은 0으로 구성했으며, 0값일때 사용되는 TCP 7600 port을 그대로 사용했습니다. 
             충돌날경우 사용환경에 맞게 변경해서 사용하세요.

1,2번 서버 공통 TCP로 변경한다.

 

         <subsystem xmlns="urn:jboss:domain:jgroups:6.0">

            <channels default="ee">

                <channel name="ee" stack="tcp" cluster="ejb"/>

            </channels>

            <stacks>

                <stack name="tcp">

                    <transport type="TCP" socket-binding="jgroups-tcp"/>

                    <socket-discovery-protocol type="TCPPING" socket-bindings="jgroups-test1 jgroups-test2" />

                    <protocol type="MERGE3"/>

                    <protocol type="FD_SOCK"/>

                    <protocol type="FD_ALL"/>

                    <protocol type="VERIFY_SUSPECT"/>

                    <protocol type="pbcast.NAKACK2"/>

                    <protocol type="UNICAST3"/>

                    <protocol type="pbcast.STABLE"/>

                    <protocol type="pbcast.GMS"/>

                    <protocol type="MFC"/>

                    <protocol type="FRAG2"/>

                </stack>

            </stacks>

        </subsystem>

 

 

1,2 번 서버 공통 any 추가해주고 ip만 변경

 

     <interfaces>

        <interface name="management">

            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>

        </interface>

        <interface name="public">

            <inet-address value="${jboss.bind.address:127.0.0.1}"/>

        </interface>

        <interface name="private">

            <inet-address value="${jboss.bind.address.private:127.0.0.1}"/>

        </interface>

          <interface name="any">    // 임의로 any2 이름 생성

              <inet-address value="10.10.10.1"/>    //  1번 서버의 경우 10.10.10.1 IP사용,

          //   2번 서버일 경우 10.10.10.2 고정 IP를 사용

          </interface>

 

    </interfaces>

1,2번 서버 공통으로 아래 변경사항을 추가합니다

 

<socket-binding-group name="standard-sockets" default-interface="any" >

        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>

        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>

        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>

        <socket-binding name="http" port="${jboss.http.port:8080}"/>

        <socket-binding name="https" port="${jboss.https.port:8443}"/>

        <socket-binding name="jgroups-tcp" interface="any" port="7600"/>       

        <socket-binding name="txn-recovery-environment" port="4712"/>

        <socket-binding name="txn-status-manager" port="4713"/>

        <outbound-socket-binding name="mail-smtp">

            <remote-destination host="localhost" port="25"/>

        </outbound-socket-binding>

 

        <!-- other configuration here -->

        <outbound-socket-binding name="jgroups-test1">

            <remote-destination host="10.10.10.1" port="7600"/>

        </outbound-socket-binding>

        <outbound-socket-binding name="jgroups-test2">

            <remote-destination host="10.10.10.2" port="7600"/>

        </outbound-socket-binding>

    </socket-binding-group>

 

 

keycloak 에서 session cluster 을 사용하고자 할 경우 wildfly 와는 좀 다릅니다.

<cache-container name="keycloak"> 명시되있기에 해당 부분에서 owners 를 연결하는 서버 수 만큼 적어줘야 하며,

서로 다른 서버의 session 경우를 하고 자 할 경우 서버 수 만큼 서로의 세션을 복제해야 하므로 owners 를 정해줘야 합니다

 

        <subsystem xmlns="urn:jboss:domain:infinispan:7.0">

            <cache-container name="keycloak">

                <transport lock-timeout="60000"/>

                <local-cache name="realms">

                    <object-memory size="10000"/>

                </local-cache>

                <local-cache name="users">

                    <object-memory size="10000"/>

                </local-cache>

                <distributed-cache name="sessions" owners="2"/>

                <distributed-cache name="authenticationSessions" owners="2"/>

                <distributed-cache name="offlineSessions" owners="2"/>

                <distributed-cache name="clientSessions" owners="2"/>

                <distributed-cache name="offlineClientSessions" owners="2"/>

                <distributed-cache name="loginFailures" owners="2"/>

                <local-cache name="authorization">

                    <object-memory size="10000"/>

                </local-cache>

                <replicated-cache name="work"/>

                <local-cache name="keys">

                    <object-memory size="1000"/>

                    <expiration max-idle="3600000"/>

                </local-cache>

                <distributed-cache name="actionTokens" owners="2">

                    <object-memory size="-1"/>

                    <expiration max-idle="-1" interval="300000"/>

                </distributed-cache>

            </cache-container>

 

 

 

2. 기동스크립트 옵션 추가 

  • 옵션 추가 :  export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.jgroups.stack=tcp"
    udp -> tcpping 로 변경했으나, 좀 더 명확한 작업을 위해 tcp  명시
  • 옵션 추가 :  export JAVA_OPTS=" $JAVA_OPTS -Djboss.as.management.blocking.timeout=3600"
  •  ERROR 내용 : Lost data because of graceful leaver pSso2_prd_sso_keycloak_1 에러 발생시 아래 옵션을 추가합니다.

10:53:25,396 INFO  [org.infinispan.CLUSTER] (remote-thread--p9-t3) [Context=keycloak-server.war] ISPN100008: Updating cache members list [pSso1_prd_sso_keycloak_1], topology id 11

10:53:25,407 INFO  [org.infinispan.CLUSTER] (remote-thread--p7-t2) [Context=client-mappings] ISPN100008: Updating cache members list [pSso1_prd_sso_keycloak_1], topology id 11

10:53:25,407 INFO  [org.infinispan.CLUSTER] (remote-thread--p9-t3) [Context=default-server] ISPN100008: Updating cache members list [pSso1_prd_sso_keycloak_1], topology id 11

10:53:25,424 WARN  [org.infinispan.CLUSTER] (remote-thread--p6-t11) [Context=sessions] ISPN000312: Lost data because of graceful leaver pSso2_prd_sso_keycloak_1

10:53:25,424 INFO  [org.infinispan.CLUSTER] (remote-thread--p6-t11) [Context=sessions] ISPN100008: Updating cache members list [pSso1_prd_sso_keycloak_1], topology id 12

10:53:25,445 WARN  [org.infinispan.CLUSTER] (remote-thread--p6-t11) [Context=clientSessions] ISPN000312: Lost data because of graceful leaver pSso2_prd_sso_keycloak_1

10:53:25,445 WARN  [org.infinispan.CLUSTER] (remote-thread--p6-t1) [Context=loginFailures] ISPN000312: Lost data because of graceful leaver pSso2_prd_sso_keycloak_1

10:53:25,446 INFO  [org.infinispan.CLUSTER] (remote-thread--p6-t1) [Context=loginFailures] ISPN100008: Updating cache members list [pSso1_prd_sso_keycloak_1], topology id 12

10:53:25,446 INFO  [org.infinispan.CLUSTER] (remote-thread--p6-t11) [Context=clientSessions] ISPN100008: Updating cache members list [pSso1_prd_sso_keycloak_1], topology id 12

10:53:25,449 INFO  [org.infinispan.CLUSTER] (remote-thread--p6-t9) [Context=actionTokens] ISPN100008: Updating cache members list [pSso1_prd_sso_keycloak_1], topology id 12

10:53:25,461 INFO  [org.infinispan.CLUSTER] (remote-thread--p6-t9) [Context=work] ISPN100008: Updating cache members list [pSso1_prd_sso_keycloak_1], topology id 12

10:53:25,462 WARN  [org.infinispan.CLUSTER] (remote-thread--p6-t1) [Context=offlineSessions] ISPN000312: Lost data because of graceful leaver pSso2_prd_sso_keycloak_1

10:53:25,462 INFO  [org.infinispan.CLUSTER] (remote-thread--p6-t1) [Context=offlineSessions] ISPN100008: Updating cache members list [pSso1_prd_sso_keycloak_1], topology id 12

10:53:25,464 WARN  [org.infinispan.CLUSTER] (remote-thread--p6-t9) [Context=offlineClientSessions] ISPN000312: Lost data because of graceful leaver pSso2_prd_sso_keycloak_1

10:53:25,464 WARN  [org.infinispan.CLUSTER] (remote-thread--p6-t11) [Context=authenticationSessions] ISPN000312: Lost data because of graceful leaver pSso2_prd_sso_keycloak_1

 

 

  

3. <distributable/> 설정 추가

session 공유를 위해서 배포할 war에 WEB-INF/web.xml 설정에 <distributable/>을 추가합니다.
keycloak 경우는 별도 안해도 위에 설정한 jboss:domain:infinispan 부분에 추가되있어서 괜찮습니다.

<web-app>

....

<distributable/>

</web-app> 

  

4. Session Cluster Log 확인

cluster 성공 및 session cluster 잘 됐는지 로그를 확인합니다

session cluster 을 구성한뒤, 1번 서버를 내리고 2번서버에 세션연결이 잘되는지 테스트 해보고..

또 반대로 2번 서버 내리고 1번서버 기동시 세션이 잘 유지되는지 확인해야 합니다.

2개의 서버중 한대를 다운했을때 wildfly 서버 로그에는 아래와 같이 After merge 된 로그가 나와야지 정상 작동 된 겁니다. 

아래 로그 내용은 2대의 keycloak 를 wildfly 14버전으로 구성한뒤 각 서버를 shutdown 했을때 정상적으로 세션클러스터링이 된 것을 설명한 로그입니다.

 

 

11:07:26,949 INFO  [org.infinispan.CLUSTER] (stateTransferExecutor-thread--p25-t54) [Context=sessions] ISPN100007: After merge (or coordinator change), recovered members [pSso1_prd_sso_keycloak_1] with topology id 12

11:07:26,949 INFO  [org.infinispan.CLUSTER] (stateTransferExecutor-thread--p25-t19) [Context=authenticationSessions] ISPN100007: After merge (or coordinator change), recovered members [pSso1_prd_sso_keycloak_1] with topology id 12

11:07:26,949 INFO  [org.infinispan.CLUSTER] (stateTransferExecutor-thread--p25-t29) [Context=offlineClientSessions] ISPN100007: After merge (or coordinator change), recovered members [pSso1_prd_sso_keycloak_1] with topology id 12

11:07:26,960 INFO  [org.infinispan.CLUSTER] (stateTransferExecutor-thread--p25-t54) [Context=clientSessions] ISPN100007: After merge (or coordinator change), recovered members [pSso1_prd_sso_keycloak_1] with topology id 12

11:07:26,965 INFO  [org.infinispan.CLUSTER] (stateTransferExecutor-thread--p25-t19) [Context=work] ISPN100007: After merge (or coordinator change), recovered members [pSso1_prd_sso_keycloak_1] with topology id 12

11:07:26,967 INFO  [org.infinispan.CLUSTER] (stateTransferExecutor-thread--p25-t19) [Context=offlineSessions] ISPN100007: After merge (or coordinator change), recovered members [pSso1_prd_sso_keycloak_1] with topology id 12

11:07:26,968 INFO  [org.infinispan.CLUSTER] (stateTransferExecutor-thread--p25-t19) [Context=loginFailures] ISPN100007: After merge (or coordinator change), recovered members [pSso1_prd_sso_keycloak_1] with topology id 12

11:07:26,969 INFO  [org.infinispan.CLUSTER] (stateTransferExecutor-thread--p25-t19) [Context=actionTokens] ISPN100007: After merge (or coordinator change), recovered members [pSso1_prd_sso_keycloak_1] with topology id 12

11:07:27,051 INFO  [org.infinispan.CLUSTER] (thread-4,null,null) ISPN000094: Received new cluster view for channel ejb: [pSso1_prd_sso_keycloak_1|4] (1) [pSso1_prd_sso_keycloak_1]

11:07:27,051 INFO  [org.infinispan.CLUSTER] (thread-4,null,null) ISPN100001: Node pSso2_prd_sso_keycloak_1 left the cluster

11:07:27,053 INFO  [org.infinispan.CLUSTER] (thread-4,null,null) ISPN000094: Received new cluster view for channel ejb: [pSso1_prd_sso_keycloak_1|4] (1) [pSso1_prd_sso_keycloak_1]

11:07:27,054 INFO  [org.infinispan.CLUSTER] (thread-4,null,null) ISPN100001: Node pSso2_prd_sso_keycloak_1 left the cluster

11:07:27,054 INFO  [org.infinispan.CLUSTER] (stateTransferExecutor-thread--p23-t29) [Context=keycloak-server.war] ISPN100007: After merge (or coordinator change), recovered members [pSso1_prd_sso_keycloak_1] with topology id 12

11:07:27,054 INFO  [org.infinispan.CLUSTER] (stateTransferExecutor-thread--p23-t2) [Context=default-server] ISPN100007: After merge (or coordinator change), recovered members [pSso1_prd_sso_keycloak_1] with topology id 12

11:07:27,054 INFO  [org.infinispan.CLUSTER] (thread-4,null,null) ISPN000094: Received new cluster view for channel ejb: [pSso1_prd_sso_keycloak_1|4] (1) [pSso1_prd_sso_keycloak_1]

11:07:27,054 INFO  [org.infinispan.CLUSTER] (thread-4,null,null) ISPN100001: Node pSso2_prd_sso_keycloak_1 left the cluster

11:07:27,057 INFO  [org.infinispan.CLUSTER] (stateTransferExecutor-thread--p24-t1) [Context=client-mappings] ISPN100007: After merge (or coordinator change), recovered members [pSso1_prd_sso_keycloak_1] with topology id 12

11:07:49,987 INFO  [stdout] (default task-1) 20190219 11:07:49 [NONE] LoadJarBytes scouter.http 13520 bytes

 


[출처] http://www.chlux.co.kr/bbs/board.php?bo_table=board02&wr_id=95

MacOS PostGIS install : 맥북에 PostGIS 설치하기

MacOS PostGIS install 

맥북에 PostGIS 설치하기


  • Homebrew를 통하여 설치한 경우

brew install postgresql

brew install postgis


  • dmg 파일로 설치한 경우 

(postgresql-12.2-4-osx.dmg)

/Applications/PostgreSQL 12/Application Stack Builder.app 실행


설치 완료 후 아래 스크립트 실행

-- Enable PostGIS (as of 3.0 contains just geometry/geography)

CREATE EXTENSION postgis;

-- enable raster support (for 3+)

--CREATE EXTENSION postgis_raster;

-- Enable Topology

CREATE EXTENSION postgis_topology;

-- Enable PostGIS Advanced 3D

-- and other geoprocessing algorithms

-- sfcgal not available with all distributions

CREATE EXTENSION postgis_sfcgal;

-- fuzzy matching needed for Tiger

CREATE EXTENSION fuzzystrmatch;

-- rule based standardizer

CREATE EXTENSION address_standardizer;

-- example rule data set

CREATE EXTENSION address_standardizer_data_us;

-- Enable US Tiger Geocoder

CREATE EXTENSION postgis_tiger_geocoder;




관련 사이트 및 블로그