8월, 2015의 게시물 표시

Phoenix 라이브러리 - ERROR 2008 (INT10): Unable to find cached index metadata 발생 시

Phoenix 4.1 을 사용하고 있는데, 인덱스 테이블 오류로 인해 테이블을 drop 후 데이터를 upsert하는 도중 아래와 같이 오류가 발생 했고, 이어서 Hbase Region Server가 다운 되는 현상이 발생 했다. Region Server를 모두 재기동 후, Region Server는 모두 정상이었지만, 더이상 data upsert를 진행 할수 없었고, 로그를 확인 하던 도중 meta data 를 찾을수 없다는 로그를 발견하였다. 위의 상황과 똑같은 이슈가 올라와 있어 링크를 걸어 놓았다. https://issues.apache.org/jira/browse/PHOENIX-1005 장애가 나는 순서를 적어보면 1. 해당 테이블에 upsert data가 발생하고 있는 도중에 Drop index table이 발생하면 에러가 발생    이때  Cannot find row in hbase:meta for table  로그가 남는다. 2. meta data를 찾을수 없다는 로그와 함께 Region Server들이 shutdown 되는 현상이 발생한다. (Phoenix 쪽 failure policy 대로 region server에 shutdown 이 날아간다.) 3. Region Server 재기동 후 여전히 meta data 를 찾을수 없다면서 로그가 발생. (다시 다운되는 현상은 없지만 upsert data가 불가하다) 해결 방법  1. 버전 업 - 상위 버전에서 fix 되었다고는 하나. 안되는 것을 확인하였다. 2. Region server 재기동후 drop한 index를 생성후 region 서버 재기동  - 이경우 테스트를 통해 잘 작동하는 것을 확인하였다. * 주절주절 -  장애가 난 당시에 관련 레퍼런스들을 찾아보았으나 해결 방법이 딱히 없었다. 해결 방법이라곤 hbck를 이용하라는 것인데, 해도 복구가 되지 않았다. 해결 방법을 더 찾다 보면 새로 설치 하라는 말들이 많았는데, 결국 zook

[Spring Framework] Interceptor 구현 및 xml수정하기

이미지
* 세션을 유무에 따른 인터셉터 구현 로그인을 안한 사용자가 로그인 후 보일 페이지 또는 임의 주소를 입력하여 접근 하는 것을 막는 것. 1. Interceptor 클래스 파일 생성 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class SessionInterceptor extends HandlerInterceptorAdapter{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if(request.getSession().getAttribute("LOGIN_USER") != null) //세션체크 return true; else{ response.sendRedirect("loginForm.do"); //로그인이동 return false; } //로그인 정보를 담은 세션을 가져와서 세션 정보가 있으면 패스~  //그렇지 않으면 loginForm.do로 이동 하라는 거! } //이 밑에 부분도 설정 할 수 있음. 자세한 설명은 다시 검색 해보기! @Override public void postHandle(HttpServletRequest request, HttpServlet

[Spring Framework] Redirect +a 궁금증! ver_0.1

현재 스프링을 다뤄 본지 얼마 안되서 거의 ModelAndView를 사용한 코드가 대다수이다. 그러다가 문득 Redirect를 시켜, 객체 값을 넘기고 싶다는 생각이 들었다. 안된다는 이야기가 많이 있던데... 뭐 찾아본 결과를 적어본다. 1. Redirect 하는 방법 //ModelAndView를 이용하여 Redirect시 mv = new ModelAndView("redirect:/testRedirect.do"); return mv; //Public 블라블라 시 @RequestMapping(value="/vlavla.do") public String joinvlavla( HttpServletRequest request, HttpServletResponse response) { return "redirect:/mvctest/joinvlatest.do" } * 또는 RedirectView를 사용하면 된다. 2. 값을 넘기고 싶다!!! - session을 이용해도 되고, 파라미터로 넘기면 되지만 또다른 편한 방법이 있다고 해서 기록한다. (소스를 분석 해볼 것!!) * 스프링 3.1 버전 특징인, Flash Attribute, Redirect Attribute를 사용하면 간편하다고 한다. http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-redirect-attributes http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-flash-attributes 음.. 그니깐 두 컨트롤러 사이에 뭐.. redirect 시 값을 넘겨주는? 방법 중 하나랄까? 현재 기억은 나지 않지만, 둘중 하

nodejs install and start 1

이미지
* 예전 어쩌다[?]보니 node.js라는 javascript에 대해 들어보게 되었다. 이게 무언고 하니??? *  http://nodejs.org 1. node.js란? 서버 환경에서 돌아가는 자바스크립트이다. 대규모 네트워크 애플리케이션을 개발하기 위해 만들어 졌다. 이벤트를 기반으로 하는 비동기 방식으로 처리한다. 2. node.js의 장단점은? [장점] V8자바스크립트 엔진을 사용한다. C++확장이 가능하다. [단점] 자바스크립트이기 떄문에 속도가 느리다 (C/C++로 만든 것보다는 속도가 느림) 아직 개발이 불안정[?] 모듈이 많지가 않다. 3. node.js의 설치? http://nodejs.org 에 접속하여 각 운영체에 맞는 파일을 다운받고 실행 하면 된다. * 실행 결과 화면! (윈도우에서 설치후 사용 해본 것이다. mac이 더 편한듯 하다.) * 스레드 기반 동기방식 과 이벤트 기반 비동기 방식이란? 스레드 기반 동기방식 기존 네트워크 프로그램이 사용하는 방식으로, 스레드를 여러개 생성하여 동시에 일을 처리한다. 하지만, 스레드가 많이 생성 될수록 메모리를 많이 잡아 먹게 된다. 이벤트 기반 비동기 방식 스레드를 하나만 생성하여 사용하지만 이벤트 처리 방식이기 때문에 속도가 빠르다. 하지만, 어느 한쪽에 이상이 생겼을 경우 프로그램 전체에 영향을 미치는 단점이 존재한다. 주절주절:) 사실 나는 자바스크립트에 대한 많은 경험이 없다. 그냥 자바스크립트 하면 웹에서 동작하는 언어라고만 생각, 즉 클라이언트 측 언어라고 생각했다. 하지만 node.js는 자바스크립트인데 웹브라우저가 아닌, 서버 환경에서 동작한다고 한다. 처음에는 '그게 뭐?'란 생각이 들었지만, 계속 해서 공부하면서 좀 알게 된 듯 하다. 또한 공부를 하면서 이벤트 기반과 스레드 기

MYSQL PASSWORD() 이용하여 암호화 주의 할점 및 TIP

PASSWORD()함수를 이용하여 암호화 복호화를 할 수 있는데, 자꾸 안되서 이것저것 찾아본 결과 여러가지 사실을 알게 되었다. (하루 종일 삽질만 ㅋㅋㅋㅋ괜찮다 ㅋㅋㅋㅋ 다음에 실수 안하면 되니까~!) 우선 주의할 점 및 팁부터 적겠다. 1. password의 사이즈를 정할 때 암호화 했을때의 글자수를 생각해서 넉넉히 잡도록 한다. 예) password varchar(20) 으로 해놓고  암호화 하면 짤린다. 울뻔 했다.. 2. MYSQL 4.대와 MYSQL 5.대 주의 할 점~! OLD_PASSWORD(), PASSWORD() 4.1대의 PASSWORD()의 경우 16바이트 해시값을 생성 했었는데 이게 지금와서는 OLD_PASSWORD()로 바뀌었다. 4.1대  기존의 PASSWORD() -> OLD_PASSWORD()함수로 5.대의 경우 41바이트 해시값을 통해 생성하며, PASSWORD()로 사용한다. etc/my.cnf에 [mysqld] old_password=?? ?? ->0이면 password, old_password각각 함수에 맞게 생성 ?? ->1이면 password, old_password 동일하게 16바이트 해쉬값 생성 MYSQL에서 패스워드 암호화 하기 및 검색하기 예제)   Insert into `t_memberinfo` (   `id`,               `name`,               `email`,               `password`,               `reg_date` )values ('test','test임','jihye@example.com',  PASSWORD('test') , SYSDATE()) 예제) select * from t_memberinfo where password=  PASSWOR

DB 쿼리문 간략 메모

가끔 쓰긴 하지만 때론 헷갈려서 구글링 하는 것중 하나! 바로 쿼리문 -_-; Select문은 기억이 나지만, Create와 Insert 등 헷갈리는 것이 몇 있다.  따라서 헷갈리는 것 몇가지를 기록 해두려고 한다. 1. Create  Create Table `테이블명`(                               `필드명` varchar(??) NOT NULL,                               `필드명` varchar(??) NOT NULL,                               `필드명` int NOT NULL,                               `reg_Date` datetime NOT NULL,                               PRIMARY KEY(`필드명`) ) * MySql 몇 버전 이상부터는 varchar가 Byte가 아닌, 글자수를 뜻한다고 한다. 참고 할 것! 2. Insert Insert Into `테이블명`( `필드명`, `필드명`, `필드명`, `필드명` ) values (' ', ' ', ' ', ' ') * `'기호 구분해서 쓸것! 마지막 필드명에는 ,기호 붙이지 말것! (mac에서 SQL프로그램 사용시 작동함) 3. Update update 테이블명 SET 해당컬럼명='값', 해당컬럼명='값' WHERE 컬럼명='값' 예) update t_memberinfo set name='누굴까' where id='admin' 4. Delete delete from테이블명 where 해당컬럼명='값' 예) delete from t_memberinfo  where id='test'

[Eclipse+웹 어플리케이션 개발] java.lang.OutOfMemoryError: PermGen space

 OS - Mac  Java - mac 기본, 1.6  Spring, Ibatis, Mysql 5.5, Apache Tomcat 7 j ava.lang.OutOfMemeoryError: PermGen space spring으로 간단한 로그인 기능 만들고 있는데 이런 에러가 발생하였다. 대충 봐도 메모리 쪽인 것같은데 역시나 permgen space는 JVM에서 관리하는 영역중 하나로 프로그램이 끝날때까지 영역을 차지 한다고 한다. 이부분은 좀더 찾아봐야 할 듯 하다.  발생 원인 - 나의 경우 로그인 실패시 redirect하지 않고 forward시켜 loginForm 페이지에 오류 메시지를 보이려 했었고,    지속적으로 새로고침을 해버린 결과 저런 에러가 발생하였다.    발생 후 톰캣을 재 실행 하고 나니 잘 작동~! 해결 방법 1. 톰켓 설치가 된 디렉토리에 가서 bin밑에 있는 catalina.bat, catalina.sh에 JAVA_OPTS를 추가한다. JAVA_OPTS="-Xms1024m -Xmx10246m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m " *단 윈도우에서는 set JAVA_OPTS , 리눅스 환경에서는 export JAVA_OPTS *자신이 원하는 만큼 늘려주면 될듯 하다     그 후 톰캣 재 시동 2. 톰캣 conf/web.xml파일에 servlet안에 추가 하도록 한다. <init-param>             <param-name>enablePooling</param-name>             <param-value>false</param-value> </init-param> 3. 이클립스에서 수정하기 Window -

[Eclipse+웹 어플리케이션 개발] setting property 'source' to ~ did not find a matching property 에러

이미지
* 에러 내용은 다음과 같다. (spring구동시 발생한 에러)  setting property 'source' to 'org.eclipse.jst.jee.server:프로젝트      명' did not find a matching property. * 해결방법 1. Server 옵션에서 설정하도록 한다. * publish module contexts to separate XML files체크한다. 2. 서버 재 구동~! :) 그런데, 이렇게 하면 된다고 하지만 나는 되지 않았다 -_- 잘 찾아보니 이 문제가 아니라 그 위 에러가 하나 더 났기 때문이다. 그거 고치고 나니깐 잘만 작동됨.. 그래도 혹시 모르니 적어 두기로 한다.

[Eclipse+웹 어플리케이션 개발] 자동으로 컴파일이 안 될시

이미지
웹 어플리케이션 개발 도중 알게 된 소소한 Tip 코드 작성하고~ 실행 해보니 자꾸 에러가 발생. 코드 확인  했고(오타 + 문법 오류), 서버 Clean 도 하고 해봤는데도 실행이 되지 않았다. 뭔가 수정한 코드가 적용이 안되는 듯한? 나중에 확인 해보니  Build Automatically가 해제 되어 있었다는 사실! 설정 하고 다시 해본 결과 잘 작동 됨을 확인 할 수 있었다. 1. 상황상 문제가 없는데도 에러가 뜨는가? 2. 수정한 코드가 적용은 되고 있는가? 3. Build Automatically 설정을 한번 확인해보자!

[안드로이드] 로딩 화면 구현 하기

안드로이드 책을 옆에 끼고 처음부터 차근차근 보는 것보단, 무엇이라도 만들어 보는 것이 좋다 생각했다. 어느정도 알고는 있지만 깊게 알지는 못하는 나-_-a 로딩 화면 구현도 여기저기 찾아 보고 이를 바탕으로 작성 해보았다. (대부분 로딩 화면 구현과 비슷할 듯 하다) 1. 로딩 화면 구현 하기 MainActivity public   class  MainActivity  extends  Activity {     private  Handler  mHandler ;      @Override      protected   void  onCreate(Bundle savedInstanceState) {         startActivity( new  Intent( this , SplashActivity. class ));  //SplashActivity적어줍니다. SplashActivity실행          super .onCreate(savedInstanceState);         setContentView(R.layout. act_main );  //Main레이아웃          initialize();  // 적어도 되고 안적어도 됩니다. 이 경우 스레드 작업을 위한 함수입니다.     }          // Splash화면이 뜨는 동안 다른 작업을 할 수 있도록 처리 하는 방법입니다.      // 해당  출처   http://isulnara.com/tt/227      private   void  initialize(){           InitializationRunnable init =  new  InitializationRunnable();            new  Thread(init).start();      } } SplashActivity public class SplashActivity extends Activ

install perl to MacOS

이미지
* 윈도우에서는 다운받기 쉬운데 mac에서는 항상 까먹어버려서 ㅠ 적어본다. 1. XCode의 Command line Tools 설치 (XCode-Preference-Downloads-Commandline Tools  install) 2. Perlbrew설치 및 등록 터미널 오픈 > curl -kL http://install.perlbrew.pl | bash  홈디렉토리 .bash_profile에 다음라인 적고 저장 (bash_profile없으면 만들면되요) > source ~/perl5/perlbrew/etc/bashrc 쉘 초기화 >. ~/.bash_profile 3. Perl설치 및 버전 적용(기본으로 설치 되어 있지만 원하는 버전 설치하세용) 원하는 버전 설치 >perlbrew install perl-(원하는버전) * perlbrew 옵션도 있으니 용도에 맞게~ 설치 버전 적용 >perlbrew switch perl 4. P erl 버전 확인하기 >perl -v