Redis 설치 & 사용

이미지
key-value store 를 찾던중 Redis(http://redis.io/)를 보는데 설치, 사용, 문서가 딱 마음에 든다. 쓰고 싶게 만드는구나. 내가 만들었던 플랫폼들을 보면서 약간의 반성과 교훈을 얻은듯 # 설치 $ wget http://redis.googlecode.com/files/redis-2.6.9.tar.gz $ tar xzf redis-2.6.9.tar.gz $ cd redis-2.6.9 $ make # 서버 실행 $ src/redis-server #클라이언트 실행 $ src/redis-cli redis> set foo bar OK redis> get foo "bar" # 튜토리얼 (10분) http://try.redis.io/ # 튜토리얼 정리 > SET foo bar > GET bar - SETNX (SET-if-not-exists) 키가 없을때만 값을 셋팅 - INCR 키를 자동증가 SET connections 10 INCR connections => 11 INCR connections => 12 DEL connections INCR connections => 1 아래같은 상황을 위해 만든거라고 한다. 1. Client A reads count as 10. 2. Client B reads count as 10. 3. Client A increments 10 and sets count to 11. 4. Client B increments 10 and sets count to 11. 원하는건 12여야 하는데 결과는 11이라는거지. 그런데 이걸 이렇게 구현하나? - EXPIRE, TTL SET resource:lock "Redis Demo" EXPIRE resource:lock 120 // 120초 후에 사라짐 TTL을 이용해 expired time이 얼마 남았는지도 확인

전통?적인 PropertyPlaceholderConfigurer 과 SpEL

전통적인? 방법과 SpEL을 사용해 properties파일 가져오는 방법 1. PropertyPlaceholderConfigurer 사용 2. SpEL 사용 아래 2개로 깔끔하게 처리 - <util:properties id="dataProps" location="classpath:properties/data.properties"> - #{dataProps['redis.host']}

Spring JMX

Spring에서 설정만으로 기본 객체를 MBean으로 등록해 JMX클라이언트가 호출할 수 있게 한다. @ManagedAttribute와 @ManagedOperation 차이는 getter/setter로 처리할 수 있는 속성은  @ManagedAttribute로 어노테이션하고, 그외 getter/setter가 아닌 메소드호출을 위해서는 @ManagedOperation으로 어노테이션한다. @ManagedOperation JDK 1.5+ method-level annotation that indicates to expose a given method as JMX operation, corresponding to the ManagedOperation attribute. Only valid when used on a method that is not a JavaBean getter or setter.  @ManagedAttribute JDK 1.5+ method-level annotation that indicates to expose a given bean property as JMX attribute, corresponding to the ManagedAttribute attribute. Only valid when used on a JavaBean getter or setter.

tomcat Content is not allowed in trailing section

tomcat Content is not allowed in trailing section 톰켓로드 될때 설정xml 파일을 읽지 못했을때 발생한다. 어설프게 xml 파일끝에 공백이나 가비지 값이 있는지 확인해 봐야 한다.

pem파일을 가지고 ssh로 Amazon EC2 접속

접속 방법 >> ssh -i pk.pem root@xxx.xxx.xxx.xxx 위와 같은 방법으로 접속을 시도하면 ppk는 ignored되고 비밀번호를 넣으란다. 검색하니 바로 답이 나오네  [1] Permissions 0644 for 'pk.pem' are too open. It is recommended that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: NHNOpenSourceWeb.pem root@xxx.xxx.xxx.xxx's password:  chmod 600으로 바꿔주고 접속하니 잘 된다. >> chmod 600 pk.pem  [1] http://stackoverflow.com/questions/201893/ssh-into-amazon-ec2-instance

MacOS Lion 설치 후, no acceptable C compiler found in $PATH

이미지
새로 받은 맥북프로에 SSD를 달았는데 뭔가 궁합이 안맞는지 전원을 켜면 하드를 못읽는 화면을 내밷곤 했다. 용량이 작아 사진과 음악을 포기하고 살았는데 이참에 다시 HDD로 원복 + ODD(Secondary HDD)  작업까지 해버렸다. 그런데 Lion을 새로 설치하고 Macport를 이용해 필요한 패키지들을 설치하려는데 아래처럼 Macport가 설치되지 않았다. checking for cl.exe... no configure: error: in `/opt/mports/trunk/base': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details 어라? 컴파일러가 없어??? 정말 컴파일러가 패스에 없다. 그전에는 분명 /Developers라는 폴더가 있었고 그안에 관련 bin들이 있었는데 이젠 생기지 않았다. 여기저기 뒤적이니 더이상 Developers폴더를 제공하지 않는단다. App Store를 통해 설치한 XCode에서 우클릭 > "패키지 내용 보기"를 하니 그 안에 Developers폴더가 있다. 이 안에 bin을 path로 걸어줄까? 이렇게 바보같이 했을까? 라고 좀 더 찾아보니... Xcode를 실행시키고 Preferences > Download에서 Command Line Tools를 다운로드/설치하면 되더라.  [1] 아니면 아래 처럼 직접 웹페이지에서 다운로드 받아 설치하면 된단다. Xcode > Open Developer Tool > More Developer Tools... ODD작업하는 사진을 찍지 못한게 아쉽네 ㅋㅋ [1]  http://guide.macports.org/chunked/installing.xcode.html

Android, MediaPlayer IllegalStateException 상황

이미지
참고 :  http://developer.android.com/reference/android/media/MediaPlayer.html TF에서 MediaPlayer를 Override할 일이 생겨 테스트하는데 Play/Stop을 하면 연신 IllegalStateException를 일으킨다. MediaPlayer문서를 보니 답이 있다. 잊기전에 주요한 내용들 정리해보자. 아래 State Diagram는 MediaPlayer가 사용자 액션을 받아 취해지는 상태(State)를 의미 객체가 생성되면 Idle상태에서 사용자 이벤트(메소드호출)에 따라 상태가 변함, (편의를 위해 만든 create는 Initialized상태로 됨.) 촉이 한개인 화살표는 Sync, 쌍촉? 화살표는 Async로 이벤트가 처리되는 것을 의미 [중요]  상태(State)흐름이 Stopped가 되면 그 상태에서 Paused, Started, PlaybackCompleted로 이동하지 못한다. 즉, stop()메소드가 불러지면 start(), seekTo(), pause() 메소드를 다시 부를 수 없다는 의미이다. 내가 혼돈했던것이 이부분이다. 보통 Start/Stop을 할 수 있다고 생각하지 않나? 그건 내생각이고 그 원하는 바로 되려면 Start/Pause이다. Stop된 객체를 다시 Start하고 싶으면 Prepare()해야한다. 이렇게 State이동을 잘못하면 IllegalStateException이 발생한다. MediaPlayer를 이용한 작업을 마치면 반드시 release()를 해서 리소스 반환 MediaPlayer 객체를 생성하는 방법 create()와 new, create()를 사용하면 바로 Initialized상태로 진입, new를 사용하면 Idle상태로 진입. 당연한것이 create()를 할때 datasource를 넣어 객체를 한다. 

CAP theorem

이미지
분산환경에서의 CAP theorem 자료 출처 : http://blog.nahurst.com/visual-guide-to-nosql-systems 번역 : http://blog.outsider.ne.kr/519 C (Consistency) : 모든 노드가 같은 시간에 같은 데이터를 보여줘야 한다. A (Availability) : 몇몇 노드가 다운되어도 다른 노드들에게 영향을 주지 않아야 한다. P (Partition Tolerance) : 몇몇 메시지가 손실되어도 시스템은 정상 동작을 해야 한다. [1]  http://sjlee.egloos.com/5447532 [2]  http://freesearch.pe.kr/archives/1831