'분류 전체보기'에 해당되는 글 648건

  1. 2014/08/21 용비 IoT에 대한 짧은 단상
  2. 2014/08/12 용비 Redis Client Wrapper Java Class
  3. 2014/08/08 용비 Linux TCP Connection Setting
  4. 2014/08/07 용비 휴가
  5. 2014/07/21 용비 버럭!

IoT에 대한 짧은 단상

Articles 2014/08/21 14:34 용비
IoT (Internet of Things)는 사전적인 의미로는 인터넷에 연결되어 있는 모든 대상을 포괄하여 지칭하는 용어이다. 하지만, 예전에 이와 비슷한 의미로 있었던 용어들인 M2M, Ubiquitous, Smart Grid를 포함한 Smart류와는 무엇이 다른 것일까?

통신망이 인터넷으로 바뀐 것?
아니면, Machine으로 명시되어 있던 대상이 Things로 추상화된 것?

IT세계에서 새로운 용어가 나온다면, 그것은 개념적으로 전혀 새로운 것보다 의미에 따른 말바꾸기가 더 많다는 냉소적인 누군가의 말이 떠오른다.

의미론적으로 IoT에 해당하는 이야기는 이미 한참 전에 나왔다고 본다.
다만, 기술적으로 성숙하기 위해서는 H/W (인프라 및 네트워크), S/W (각종 표준 프로토콜을 비롯한 SW 개발 기술)이 같이 준비되어야 하는데 그동안에는 기반 여건이 부족했기 때문에 이제와서 IoT라는 새로운 것 같은 용어로 재조명 받는 것이 아닐까.

M2M이든, Ubiquitous든, IoT든 이제부터 시작된다고 여겨지는데,
무엇에 Focus를 맞추고 어떻게 Workflow를 그려나갈 것인지에 따라 시장 진입의 속도가 결정될 것이다.

과연, 이 시대 IoT에서 가장 필요한 것은 무엇일까?
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/614

Redis Client Wrapper Java Class

Articles 2014/08/12 09:43 용비
import java.util.List;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisConnectionException;
import redis.clients.jedis.exceptions.JedisException;

import com.github.jedis.lock.JedisLock;

public class RedisClient {
private static AgLogger logger = AgLogger.getLogger(RedisClient.class);
/**
* Added Date : 2014.05.20
*/
private Node node = null;
private JedisPool pool;
/**
* Added Date : 2014.05.20
*/
public RedisClient() {

this.node = new Node();
node.setIpAddr("localhost");
node.setPort(6379);
pool = new JedisPool(new JedisPoolConfig(), node.getIpAddr(), node.getPort());
}
/**
* Added Date : 2014.05.20
* ---------------------------
*
* @param node : Redis Master Node
*/
public RedisClient(Node node) {
this.node = node;
pool = new JedisPool(new JedisPoolConfig(), node.getIpAddr(), node.getPort());
}
/**
* Added Date : 2014.05.23
* ---------------------------
*
* @param host : Redis Master Node IP
* @param port : Redis Master Node Port
*/
public RedisClient(String host, int port) {
this.node = new Node();
node.setIpAddr(host);
node.setPort(port);
pool = new JedisPool(new JedisPoolConfig(), host, port);
}

/**
* Added Date : 2014.06.17
* ---------------------------
* Redis Ping command for health check.
*
* @return
*/
public String ping() throws JedisConnectionException, JedisException {
logger.info("Redis Ping Start.");
Jedis jedis = borrow();
String result = "";
if (jedis != null) {
result = jedis.ping();
}
        revert(jedis);
logger.info("Redis Ping End.");
return result;
}
/**
* Added Date : 2014.06.16
* ---------------------------
* Write changed configurations to local file.
* This is executed Lua script at redis server side.
*
* @return : Lua Script SHA1 value
*/
public String configRewrite() throws JedisConnectionException, JedisException {
Jedis jedis = borrow();
String result = "";
if (jedis != null) {
result = jedis.scriptLoad("return redis.call('config', 'rewrite')");
}

        revert(jedis);
return result;
}
/**
* Added Date : 2014.06.16
* ---------------------------
* Check the configuration rewrite lua script execution result.
*  
* @param sha1 : Script SHA1 value
* @return : result message. if success, "OK" returned.
*/
public Object configRewriteResult(String sha1) throws JedisConnectionException, JedisException {
Jedis jedis = borrow();
Object result = null;

if (jedis != null) {
result = jedis.evalsha(sha1, 0);
}

        revert(jedis);
return result;
}
/**
* Added Date : 2014.06.16
* ---------------------------
* Change the replication setting.
* Set current slave to master.
*
* @return
*/
public String slaveOfNoOne() throws JedisConnectionException, JedisException {
Jedis jedis = borrow();
String result = "";

if (jedis != null) {
result = jedis.slaveofNoOne();
}

        revert(jedis);
return result;
}
/**
* Added Date : 2014.06.16
* ---------------------------
* Change the replication setting.
* This is the same as SLAVEOF command.
*
* @param host : Master Node IP Address
* @param port : Master Node Port
* @return
*/
public String slaveOf(String host, int port) throws JedisConnectionException, JedisException {
Jedis jedis = borrow();
String result = "";
if (jedis != null) {
result = jedis.slaveof(host, port);
}
        revert(jedis);
return result;
}
/**
* Added Date : 2014.06.12
* ---------------------------
*
* @return : all key count
*/
public long dbSize() throws JedisConnectionException, JedisException {
Jedis jedis = borrow();
long result = 0;
if (jedis != null) {
result = jedis.dbSize();
}

        revert(jedis);
return result;
}
/**
* Added Date : 2014.06.09
* ---------------------------
* Redis Configuration Setter
*
* @param parameter : config parameter
* @param value : config value
* @return
*/
public String configSet(String parameter, String value) throws JedisConnectionException, JedisException {
Jedis jedis = borrow();
String result = "";
if (jedis != null) {
result = jedis.configSet(parameter, value);
}

        revert(jedis);
       
return result;
}
/**
* Added Date : 2014.06.09
* ---------------------------
* Get all configuration
*
* @param pattern
* @return
*/
public List<String> configGet(String pattern) throws JedisConnectionException, JedisException {
Jedis jedis = borrow();
List<String> result = null;
if (StringUtils.isNullString(pattern)) {
if (jedis != null) {
result = jedis.configGet("*");
}
}
else {
if (jedis != null) {
result = jedis.configGet(pattern);
}
}
        revert(jedis);
return result;
}
/**
* Added Date : 2014.05.27
* ---------------------------
* Get all keys by pattern
*
* @param pattern
* @return
*/
public Set<String> keys(String pattern) throws JedisConnectionException, JedisException {
Jedis jedis = borrow();
Set<String> result = null;
if (jedis != null) {
result = jedis.keys(pattern);
}

        revert(jedis);
return result;
}
/**
* Added Date : 2014.05.20
* ---------------------------
* auto increment by key
*
* @param key
* @return
*/
public long incr(String key) throws JedisConnectionException, JedisException, InterruptedException {
Jedis jedis = borrow();
long result = 0L;
    JedisLock lock = new JedisLock(jedis,  "incr_lock:" + key, 100, 100);
 
  lock.acquire();
if (jedis != null) {
  result = jedis.incr(key);
}
if (lock != null) {
            lock.release();
}
        revert(jedis);
return result;
}
/**
* Added Date : 2014.05.20
* ---------------------------
* auto decrement by key
*
* @param key
* @return
*/
public long decr(String key) throws JedisConnectionException, JedisException, InterruptedException {
Jedis jedis = borrow();
long result = 0L;
    JedisLock lock = new JedisLock(jedis, "decr_lock:" + key, 100, 100);
  lock.acquire();
if (jedis != null) {
  result = jedis.decr(key);
}
 
if (lock != null) {
            lock.release();
}

revert(jedis);
return result;
}
/**
* Added Date : 2014.05.20
* ---------------------------
* delete info by key
*
* @param key
* @return
*/
public long del(String key) throws JedisConnectionException, JedisException, InterruptedException {
        Jedis jedis = borrow();
long result = 0L;
    JedisLock lock = new JedisLock(jedis, "del_lock:" + key, 100, 100);

  lock.acquire();
if (jedis != null) {
  result = jedis.del(key);
}
   
if (lock != null) {
lock.release();
}
        revert(jedis);
   
    return result;
   
}
/**
* Added Date : 2014.05.20
* ---------------------------
* get info by key
*
* @param key
* @return
*/
public String get(String key) throws JedisConnectionException, JedisException {
Jedis jedis = borrow();
String result = "";
if (jedis != null) {
result = jedis.get(key);
}
        revert(jedis);
return result;
}
/**
* Added Date : 2014.05.20
* ---------------------------
* set info by key (insert, update)
*
* @param key
* @param value
* @return
*/
public String set(String key, String value) throws JedisConnectionException, JedisException, InterruptedException {
        Jedis jedis = borrow();
String result = "";
    JedisLock lock = new JedisLock(jedis, "set_lock:" + key, 100, 100);
       
  lock.acquire();
   
if (jedis != null) {
result = jedis.set(key, value);
}
   
    if (lock != null) {
    lock.release();
    }
   
        revert(jedis);
       
        return result;
}
/**
* Added Date : 2014.05.20
* ---------------------------
* remove all data in db.
* If use this method, critical.
* Be careful.
*
* @return
*/
public String clear() throws JedisConnectionException, JedisException {
        Jedis jedis = borrow();
String result = "";
if (jedis != null) {
result = jedis.flushDB();
}
        revert(jedis);
       
        return result;
}
/**
* Added Date : 2014.05.20
* ---------------------------
* Check the key exists or not.
*
* @param key
* @return
*/
    public boolean exists(String key) throws JedisConnectionException, JedisException {
   
        Jedis jedis = borrow();
boolean result = false;

if (jedis != null) {
result = jedis.exists(key);
}
        revert(jedis);
       
        return result;
    }

    /**
  * Added Date : 2014.05.20
* ---------------------------
     * get all redis server info for monitoring
     *
     * @return
     */
    public String info() throws JedisConnectionException, JedisException {
   
        Jedis jedis = borrow();
        String result = "";

if (jedis != null) {
result = jedis.info();
}
       
        revert(jedis);
       
        return result;
    }
   
    /**
  * Added Date : 2014.05.20
* ---------------------------
     * get redis server info for monitoring of given section
     *
     * @param section
     * @return
     */
    public String info(String section) throws JedisConnectionException, JedisException {
   
        Jedis jedis = borrow();
        String result = "";

if (jedis != null) {
result = jedis.info(section);
}
       
        revert(jedis);

        return result;
    }
   
    /**
  * Added Date : 2014.06.09
* ---------------------------
     * migration all keys in given slot to target redis server.
     *
     * @param host
     * @param port
     * @param slot
     * @return
     */
    public String migrateKeysInSlot(String host, int port, int slot) throws JedisConnectionException, JedisException {

    String result = "";

    Set<String> keysInSlot = keys("*");
    int curSlot = 0;
    HashSlot hashSlot = new HashSlot();
   
    for (String s : keysInSlot) {
   
    //Calculate slot of key
    curSlot = hashSlot.slotCalculate(s);
   
    if (curSlot == slot) {
    result = migrate(host, port, s);
    }
    }
       
    return result;
   
    }
   
    /**
  * Added Date : 2014.06.09
* ---------------------------
     * migrate given key to target redis server
     *
     * @param host
     * @param port
     * @param key
     * @return
     */
    public String migrate(String host, int port, String key) throws JedisConnectionException, JedisException {
   
        Jedis jedis = borrow();
        String result = "";
       
if (jedis != null) {
result = jedis.migrate(host, port, key, 0, 100000);
}
   
        revert(jedis);

        return result;
    }
   
    /**
  * Modified Date : 2014.06.12
* ---------------------------
  * Added Date : 2014.06.09
* ---------------------------
     * migration all keys in given slot to target redis server.
     * redis cluster is working, dev mode.
     *
     * @param host
     * @param port
     * @param slot
     * @return
     */
    @Deprecated
    public String migrate(String host, int port, int slot) throws JedisConnectionException, JedisException {
   
    String result = "";

    Jedis jedis = borrow();
    List<String> keys = jedis.clusterGetKeysInSlot(slot, 1000);
   
    for (String key : keys) {
      result = migrate(host, port, key);
    }
   
        revert(jedis);
       
        return result;
       
    }
   
    @Deprecated
    public byte[] bGetJ(String key) throws JedisConnectionException, JedisException {
   
        Jedis jedis = borrow();
        byte[] value = null;
       
        if (jedis != null) {
        value = jedis.get(key.getBytes());
        }
       
        revert(jedis);
       
        if (value != null) {
        return value;
        } else {
            return null;
        }
       
    }
 
    @Deprecated
    public String bSetJ(String key, byte[] value) throws JedisConnectionException, JedisException {
   
        Jedis jedis = borrow();
        String result = "";
 
    if (jedis != null) {
    result = jedis.set(key.getBytes(), value);
    }
       
        revert(jedis);
   
        return result;
    }
 
    @Deprecated
   public List<String> mget(String[] keys) throws JedisConnectionException, JedisException {
   
        Jedis jedis = borrow();
        List<String> result = null;
               
    if (jedis != null) {
    result = jedis.mget(keys);
    }

        revert(jedis);

        return result;
       
    }
 
    @Deprecated
   public Set<String> sCopy(String key, String new_key) throws JedisConnectionException, JedisException {
   
        Jedis jedis = borrow();
        Set<String> oldSets = null;

    if (jedis != null) {
            oldSets = jedis.smembers(key);
            for (String str : oldSets) {
                jedis.sadd(new_key, str);
            }
    }
       
        revert(jedis);

        return oldSets;
       
    }
 
    @Deprecated
    public void sClear(String key, String oldKey) throws JedisConnectionException, JedisException {
   
        Jedis jedis = borrow();

    if (jedis != null) {
            Set<String> oldSets = jedis.smembers(key);
            for (String str : oldSets) {
                jedis.del(oldKey + ":" + str);
            }
            jedis.del(key);
    }

        revert(jedis);
       
    }
 
    @Deprecated
    public Set<String> sMove(String key, String new_key) throws JedisConnectionException, JedisException {
   
        Jedis jedis = borrow();
        Set<String> oldSets = null;
       
    if (jedis != null) {
            oldSets = jedis.smembers(key);
            for (String str : oldSets) {
                jedis.smove(key, new_key, str);
            }
    }

        revert(jedis);

        return oldSets;
    }
   
    /**
     *
     */
    @SuppressWarnings("unused")
private void destory() throws JedisException {
        pool.destroy();
    }
 
/**
*
* @return
*/
private Jedis borrow() throws JedisConnectionException {
        return pool.getResource();
    }
 
    /**
     *
     * @param jedis
     */
    private void revert(Jedis jedis) throws JedisException {
        pool.returnResource(jedis);
    }
   
   
}

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/613

Linux TCP Connection Setting

Articles 2014/08/08 17:23 용비
Linux에서 TCP기반 (HTTP 포함) 서버를 개발할 때, 성능을 위해서 튜닝을 해야하는 항목들이 있다.

Root 계정으로 로그인 한 후, 다음 항목들을 변경하면 HTTP Request의 성능이 향상된다.

1. tcp_tw_reuse 설정
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse


2. tcp_fin_timeout 설정
echo 5 > /proc/sys/net/ipv4/tcp_fin_timeout


3. tcp_orphan_retries 설정
echo 7 > /proc/sys/net/ipv4/tcp_orphan_retries


4. tcp_rfc1337 설정
echo 1 > /proc/sys/net/ipv4/tcp_rfc1337


Port Forwarding을 설정했을 경우에는 다음 항목을 추가로 설정한다.
echo 1000000 > /proc/sys/net/netfilter/nf_conntrack_max
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close_wait
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_fin_wait
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_last_ack
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_syn_recv
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_syn_sent
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_time_wait


받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/612

휴가

Daily Memo 2014/08/07 16:17 용비
지난 주 목요일부터 어제까지 휴가였다.
지난 주에는 대전, 이번 주에는 분당에서 보냈는데...
휴가를 보낸 것 같지가 않다. 시간이 너무 빨리 지나갔어....ㅠ.ㅠ

휴가를 마치고 출근하자마자 본부장님 보고를 하고.. 아, 적응 안돼.
빨리 집에 가고 시프다.
오늘이 올해의 마지막 복날인데, 저녁에 삼계탕이나 해먹자고 할까...

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/611

버럭!

Daily Memo 2014/07/21 09:36 용비
사람이란 참 변화하기 힘든 존재라는 것을 다시 한번 느꼈다.
대전에서 서울로 올라오는 어제 저녁 시간.

일요일마다 아들녀석이 즐겨 보는 런닝맨을 볼 수 없게 되어
올라오는 도중 차안에서 칭얼거리는 아들을 달래기 위해 약속을 하나 했다.

"아빠가 책임지고 런닝맨 재방송 볼 수 있도록 해주고,
집에 도착하면 치킨 시켜 줄테니 오늘은 런닝맨 못보더라도 참자."

어찌어찌 집에 도착했는데 치킨을 시켜 먹고 또다시 아내와 아들의 실랑이가 시작되었다.
설거지를 마치고 나서까지 계속해서 엄마는 혼내고, 아들은 칭얼거리는 상황이 계속되어 순간적으로 속에서 열이 확 뻗쳐 올랐다.

'어떻게 엄마와 아들이 저렇게 생각하는 수준이 똑같을까.'

순간적으로 그런 생각이 들자 아내에게 "윤희야, 좀 적당히 해"라고 한소리 했다.
그러자 아내 지나가면서 한마디. "당신은 좀 가만히 있어!"

내가 뭘? 열이 확 받아서 소리를 버럭 질렀다. "아, 적당히 좀 하라고!"
성질 같아서는 정말... 에휴..

하지만, 아침에 새벽같이 출근하면서 든 생각은 아내도 그렇지만,
나도 참 변화하기 힘든 사람이라는 것을 다시 한번 느꼈다.

세상 살이, 참 쉽지 않다.
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/609