Posted
Filed under JSP, JAVA
<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>3.3.2</version>
  </dependency>


디버깅 할 때 클래스 객체를 스트링으로 변환해서 출력 해주는 util
  vo 클레스에 추가 한다.

   @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
    }

baseVO를 만들고 해당 vo에 추가한다.
2015/02/23 17:32 2015/02/23 17:32
Posted
Filed under JSP, JAVA
//java save data as image from image url

public static void image_download(String turl, String fname) throws Exception{
   URL url = new URL(turl);
   InputStream in = new BufferedInputStream(url.openStream());
   ByteArrayOutputStream out = new ByteArrayOutputStream();
   byte[] buf = new byte[1024];
   int n = 0;
   while (-1!=(n=in.read(buf)))
   {
      out.write(buf, 0, n);
   }
  
   out.close();
   in.close();
   byte[] response = out.toByteArray();
  
   FileOutputStream fos;
   fos = new FileOutputStream(fname);
   fos.write(response);
   fos.close();
 }
2015/02/12 16:36 2015/02/12 16:36
Posted
Filed under Linux
[원문]:http://ns.actrun.com/bbs/board.php?bo_table=adm_server&wr_id=563

첫페이지 로딩속도는 그 사이트의 운명을 좌우할 만큼 중요합니다.

왜냐면 대부분의 웹사용자는 3초를 기다리지 못하고 사이트를 떠나는게 현실이며

0.1초라도 더 빨리 첫페이지를 보여주는 것이 운영자의 사업이익과도 직결된다고 할 수 있겠습니다.

공통된 문제는 대부분의 사이트 첫페이지가 실시간으로 DB에 접속하고 DB에서 게시물을 가져온다는 것입니다.

이러다 보니 동시접속자가 많아지면 자연 로딩속도가 늘여지고 이탈현상이 발생되는 것이지요.

보여줄 메인HTML(최근 게시물 등 기타 MySQL쿼리 결과물 포함)을 미리 만들어 놓고 운영하는 방법입니다.

자세히 설명드리면

Linux에는 cron이라는 것이 있는데 이는 특정시간에 특정Job을 수행하는 시스템유틸리티 입니다.

이를 이용하여 매시간 5,15,25,35,45,55분에 10분뒤에 사용할 메인HTML을 만들고

사용자에게는 10분전에 만들어진 현재 시간대의 메인HTML을 보여주는것이지요.

예로 13:15이면 cron에 의해 main_1320.htm을 만들고 사용자는 main_1310.htm을 보여주고 main_1300.htm은 지웁니다.

이를 구현한 Full Source입니다.

1) cron의 내용

   $ crontab -l [Enter]
     5,15,25,35,45,55 * * * * /절대PATH/make_main.sh
   $

   크론과 쉘이 무었인지 잘 모르시면 Linux 참고문헌을 보세요.

  
2) make_main.sh의 내용

   cd /절대PATH/
   php < ./make_main.php
  
  
3) make_main.php의 내용

   <?php
   $main_path = "/절대PATH/main_";
   $before    = $main_path.substr(date("Hi",strtotime("-10 minute")),0,3)."0.htm";
   $after     = $main_path.substr(date("Hi",strtotime("+10 minute")),0,3)."0.htm";
  
   $falg = 0;
   $fi   = fopen ("http://도메인/main.php", "r");
   $fo   = fopen ($after, "w");
   while (!feof ($fi)) {
           $buff = fgets($fi,4096);
           if (ereg("<!-- MAIN.HTM 시작 -->",$buff)) $flag = 1;  //앞부분 버림
           if ($flag == 1) fputs($fo, $buff);
   }
   fclose ($fo);
   fclose ($fi);
   if (file_exists($before)) unlink($before);
   ?>

4) index.html의 내용

   <?php
    include("상단HTML");
    $main_path = "/절대PATH/main_";
    $current = $main_path.substr(date("Hi",strtotime("now")),0,3)."0.htm";
    include($current);
    include("하단HTML");
   ?>
2015/02/12 10:40 2015/02/12 10:40
Posted
Filed under Mysql
  트리거는 테이블에 INSERT, UPDATE, DELETE 가 발생 할 때 그 과정의 전후로 무언가를 하도록 지정 할 수 있다.

 

DELIMITER $$

CREATE TRIGGER 트리거이름
BEFORE UPDATE ON 테이블이름
FOR EACH ROW 
BEGIN 
 IF (NEW.AA <> OLD.AA) THEN
    SET new.BB = new.AA;
 END IF ;
END$$
;
 

 

위의 쿼리는 트리거의 한 예제이다.

 

이 쿼리는 특정 테이블에 UPDATE가 발생 할 때 AA 의 값이 이전값과 이후값이 다를 경우에 

 

BB 컬럼에 값을 새로운 AA의 값으로 치환하라는 트리거이다.

 

녹색 : AFTER, BEFORE 

붉은색 : INSERT, UPDATE, DELETE

푸른색 : 쿼리(INSERT, UPDATE, DELETE 등)

 

NEW : 새로운 값

OLD : 이전 값

AFTER 를 사용할 때 같은 테이블에 INSERT, UPDATE, DELETE를 하게된다면 문제가 발생할 수 있다.

[원문] http://wofmaker.blog.me/220116117593

2015/01/28 23:33 2015/01/28 23:33
Posted
Filed under Linux
common.lib.php  파일의  2788번째 줄의 소스를 아래와 같이 아이피로 수정 한다.

// 아이코드 사용자정보
function get_icode_userinfo($id, $pass)
{
    //$res = get_sock('http://www.icodekorea.com/res/userinfo.php?userid='.$id.'&userpw='.$pass);
    $res = get_sock('http://211.172.232.124/res/userinfo.php?userid='.$id.'&userpw='.$pass);
    $res = explode(';', $res);
    $userinfo = array(
        'code'      => $res[0], // 결과코드
        'coin'      => $res[1], // 고객 잔액 (충전제만 해당)
        'gpay'      => $res[2], // 고객의 건수 별 차감액 표시 (충전제만 해당)
        'payment'   => $res[3]  // 요금제 표시, A:충전제, C:정액제
    );

    return $userinfo;
}
2015/01/12 16:39 2015/01/12 16:39
Posted
Filed under Link
1. 서버를 운영하다보면, 시스템의 메모리가 꽉차서 ... 재시작  을 해야되는 상황이 생긴다.
  해결책은 단순 하다 재부팅 (reboot)하면 되겠지만. 잘 운영되는 서버를 리붓 하기에는 서비스 지연이 생길 수 있고 부담이 발생한다.
 그래서 버서가 느려진다면, 아래 명령어를 통해서 매모리를 최적화 시켜준다. 

  echo 1  >/proc/sys/vm/drop_caches
  echo 2  > /proc/sys/vm/drop_caches
  echo 3  > /proc/sys/vm/drop_caches


/usr/local/memory/memory_init.sh
chmod 755 ./memory_init.sh

크론탭 등록
00 08 * * * root /usr/local/memory/memory_init.sh
00 12 * * * root /usr/local/memory/memory_init.sh
00 18 * * * root /usr/local/memory/memory_init.sh

service crond restart


2015/01/12 16:16 2015/01/12 16:16
Posted
Filed under JSP, JAVA
c:set var="pages" value="${totalCnt/rowsPerPage}" />

 

내림 : ${pages-(pages%1)}

올림 : ${pages+(1-(pages%1))%1}

반올림 : ${pages+((pages%1>0.5)?(1-(pages%1))%1:-(pages%1))}

2015/01/07 19:15 2015/01/07 19:15
Posted
Filed under JSP, JAVA
dev-tool  : sts
spring - version 3.2.x

when i use spring-mobile-device then  
error ocured fallowing
"Could not instantiate bean class [org.springframework.mobile.device.Device]: Specified class is an interface] with root cause"

i try to solved this problem , 
example : https://spring.io/guides/gs/device-detection/ 
 
but 

same error occoured..


 .. search and more .. google...

1.  pom.xml <-- inject to dependency

<dependency>
   <groupId>org.springframework.mobile</groupId>
   <artifactId>spring-mobile-device</artifactId>
   <version>1.1.3.RELEASE</version>
  </dependency>

2. web.xml  <--add  filter config

<!--device filter_start() -->
 <filter>
        <filter-name>deviceResolverRequestFilter</filter-name>
        <filter-class>org.springframework.mobile.device.DeviceResolverRequestFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>deviceResolverRequestFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 <!--device filter_end() -->

3. using like this ... (controller)
 
 if( DeviceUtils.getCurrentDevice(request).isMobile() ||  DeviceUtils.getCurrentDevice(request).isTablet() ){
   model.addAttribute("is_mobile", true);
  }else{
   model.addAttribute("is_mobile", false);
  }



2015/01/07 11:39 2015/01/07 11:39
Posted
Filed under JSP, JAVA
spring 3.2 부터
<exclude-mapping path="/login/**/"/>추가 되었습니다.
3.1 버전은 에러 발생 ..
pom.xml에서 spring 버전을 변경 합니다.
<!--
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
-->
<org.springframework-version>3.2.2.RELEASE</org.springframework-version>

sts tool을 이용하여 작업시 위 사항들을 유의 합니다.
<mapping path="/**/"/>  로그인 인터셉터를 사용하기 위해서 모든 url을 로그인 체크를 합니다.
<exclude-mapping path="/login/**/"/>로그인 페이지는 로그인을 누구나 할 수 있도록 해야 하기 때문에 intercepter에서 체크 할 대 제외 시킵니다.

[example]
<interceptors>
  <interceptor>
   <mapping path="/**/"/>
   <exclude-mapping path="/login/**/"/>
   <exclude-mapping path="/resources/**/"/>
   <beans:ref bean="LoginInterceptor"/>
  </interceptor>
 </interceptors>
2015/01/06 10:48 2015/01/06 10:48