jquery 동적 테이블 click 이벤트 처리 delegate


jquery 로 클릭 이벤트 처리를 위해서 보통은 아래와 같은 방법으로 처리 한다.

$(".trashCan").click(function(){
      console.log("ddddd");
});

하지만 동적테이블을 쓰게 되면 새로 만들어진 TR, TD 들은 클릭 이벤트가
되지 않는다.

그럴땐 아래처럼 delegate 를 사용하면
새로 만들어진 TR, TD 도 이벤트 처리가 잘된다.

$(document.body).delegate('.trashCan', 'click', function() {
console.log("ddddd");
});

별거 아닌거 같지만 막상 찾으려면 가끔은 검색이 잘 안된다.

나라별 콘센트 모양 정보


맛집 이야기, 옥천군 찐한식당(맛있는 집)

여름휴가중 옥천근처를 지나갈 일이 있어서 갑자기 방문한 찐한식당.
사실 나는 민물고기를 별로 안좋아 한다. 
그래도 지금 아니면 언제 가볼지 기약할수 없고 점심 먹을 아는 식당도 없었기에 가봤다.


11시쯤 도착 했는데 내가 첫손님 인듯?
한가하니 아주 좋았다.
내가 다 먹고 출발 할때쯤엔 손님들이 계속 도착 하는걸 보니 더 다행 ㅎ


가게옆에는 줄서는 사람들을 위해 의자를 놓은것 같다.
주말엔 줄을 서는 모양이다.


화장실은 보수한지 얼마 안되었는지 깨끗했다.
보통 오래된 식당들 화장실은 보통 더러워서 식당의 이미지가 급추락 한다. 
많은 식당들이 화장실에 투자를 해주었으면...







이식당... TV에 많이 나왔다. 김탁구에도 나왔다니 신기하군.


역시 난 민물고기랑 안맞는걸 다시 느끼지만 먹을만 하다.
와이프는 맛나다고 했으니 맛있는걸로 ㅎ 


이음식은 도리뱅뱅이다.
별생각 없이 먹었는데 아주 맛나다.
운전만 아니면 막걸리에 먹음 더 맛있었을텐데 아쉽다.
바삭한 생선과 매콤한 양념이 인상적이다. 

 

와이프가 도리뱅뱅이에 술이 빠지면 안된다고 해서 막걸리를 하나 주문 했다.
지역막걸리 같은데 맛이 깔끔하니 아주 좋았다.
유통기한만 길다면 사오고 싶었지만 아쉽다...
난 운전 하닌깐 아주 쪼끔 혀만 담갔다. ^^;


요새는 TV 에 나오는 식당들 가보면 긴줄을 서야 하고 맛도 없는데
여기는 가볼만 하다. 
하지만 줄을 서야 한다면 굳이 가진 않겠다.

sql server 백업파일 다른이름으로 복원 명령문


특정한 다른이름 으로 복원 하려문 매니지먼트 에서 제공하는 복원 기능 으로는 안된다.
아래처럼 쿼리문 으로 해야한다.


-- 백업 파일 내용 확인
RESTORE FILELISTONLY
FROM DISK='D:\SPOT_HT.bak' -- 백업해둔 .BAK 파일 경로

-- 새로운 이름으로 데이터베이스 복원
RESTORE DATABASE [Spot_HT] --새롭게 복원할 DB명
FROM DISK='D:\SPOT_HT.bak' --백업해둔 .BAK 파일 경로
WITH RECOVERY,
MOVE 'SP_KC_O' TO 'D:\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Spot_HT.mdf', --MOVE 'HVI_2011'은 첫번째 LOCALNAME (PMS_Data)
MOVE 'SP_KC_O_log' TO 'D:\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Spot_HT.ldf', REPLACE --MOVE 'HVI_2011_LOG'는 2번째 LOGICALNAME (PMS_Log)


기존의 데이터베이스를 지우고 위의 명령어로 다시 만들었다면
해당 데이터베이스 연결시 에러가 날것이다.
이럴땐 아래 명령어로 해당 아이디를 업데이트 해줘야 한다.

sp_change_users_login 'update_one', 'spot', 'spot'  







spring boot Interceptor 설정

spring boot Interceptor 설정 하는 방법 입니다.

생각 보다 간단 하네요.



우선 WebMvcConfig.java



package com.kr.spot.system;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

/** * Created by ian on 2017. 7. 12.. */
@Configuration@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
   
   @Override   
   public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
      configurer.enable();   }

   @Bean   
   public InternalResourceViewResolver viewResolver() {
      InternalResourceViewResolver resolver = new InternalResourceViewResolver();      
      resolver.setPrefix("views/");      
      resolver.setSuffix(".jsp");      
      return resolver;   
   }

   /* 로그인 인증 Interceptor 설정 */   
   @Autowired   
   private com.kr.spot.system.LoginInterceptor loginInterceptor;   
   /* 캐시 Interceptor 설정 */   
   @Autowired    
   private com.kr.spot.system.CachingInterceptor cachingInterceptor;   
   /* 기본 Interceptor 설정 */   
   @Autowired   
   private com.kr.spot.system.BaseInterceptor baseInterceptor;
   
   @Override   
   public void addInterceptors(InterceptorRegistry registry) {
      registry.addInterceptor(loginInterceptor)
            .addPathPatterns("/**")
            .excludePathPatterns("/CO0301/**");

      registry.addInterceptor(cachingInterceptor)
            .addPathPatterns("/**")
            .excludePathPatterns("/CO0301/**");

      registry.addInterceptor(baseInterceptor)
            .addPathPatterns("/**");   
   }

}




addPathPatterns 는 Interceptor 가 실행 되어야할 페이지 규칙

excludePathPatterns 는 Interceptor 가 실행 제외되어야할 페이지 규칙 입니다.



다음은 LoginInterceptor.java 입니다.



package com.kr.spot.system;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class LoginInterceptor implements HandlerInterceptor {
   
   private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);      

   @Override   
   public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      //로그인 정보 확인 및 처리            
      //1. 세션 정보 확인       
      if(request.getSession().getAttribute("sEmpNo") == null){
         // 로그인 페이지 이동          
         logger.info( "go login page");         
         response.sendRedirect("/CO0301");      
      }
      
      return true;   
   }

   @Override   public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,                          
                                      ModelAndView modelAndView) throws Exception {
      // TODO Auto-generated method stub   
   }

   @Override   public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
         throws Exception {
      // TODO Auto-generated method stub   }

   }


이렇게 하시면 됩니다.

크게 어려울건 없네요.



spring boot 설정 하면서 이게 제일 쉬운거 같네여 ㅜㅜ

















spring boot java.lang.OutOfMemoryError: PermGen space

intellij 에서 개발 할때는 문제가 없었는데 같은 소스를 이클립스로 돌려보니
java.lang.OutOfMemoryError: PermGen space
이런 에러가 발생 했다.

내장 톰캣을 쓰다보니 설정을 어떻게 해야 할지 막막 했다.
구글을 아무리 뒤져 보아도 마땅한 답이 안나온다.(내가 몰라서 그럴지도...)

결국 찾은 답은 VM option 에
-Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m
이렇게 메모리 설정을 해줘야 한다.


이클립스 > Run > Debug Configurations 을 클릭하면 아래 팝업이 열린다.



나는 스프링부트 내장 톰캣을 사용하므로 Spring Boot App 에서 내가 쓰는 어플리케이션을 선택 하고
Arguments 탭의 아랫부분 Vm arguments 에 아래 내용을 추가 한다.
-Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m

찾아보면 별것도 아닌데 이거 찾기가 참 어렵다...
물론 내 지식이 딸려서 그런것도 있지만...

스프링부트로 프레임웍 구성 하는데 삽질 장난 아니다.
근데 잘 사용하면 꾀 편해보인다.










탐험가 ian 의 자전거 들고(?) 뉴질랜드 여행하기(7편)

오늘은 호키티카 까지 갈 생각 입니다.
거리는 얼마 안되는데 6시쯤엔 그날의 라이딩을 끝내야 저녁 장도 보고 숙박도 잡고 하기에 6시쯤 끝내는 것이 가장 좋더라고여.
제가 짐도 많아서 하루에 최대 80km 는 절대 넘지 않으려고 루트를 설계했습니다.
그리고 뉴질랜드는 마을간 거리도 멀고 마을을 지나면 아무것도 없는 곳이 많아 마을을 기점으로 그날의 목표를 잡았습니다. 탈려면 하루에 100km도 타겠지만 머 급할거 있나여 ㅎ


이거 제자 자주 먹던 아이스크림 입니다. 뉴질랜드는 과자도 맛나고 아이스크림도 맛나고 과일도 맛나고
왜 다 맛날까여...


뉴질랜드는 거의 대부분 도로들이 왕복 2차선 입니다.위 사진의 다리는 1차선 이라 반대편에 차가 오면 다른편엔
기다려야 하지요. 제가본 많은 다리들이 저런식 입니다. 처음엔 왜 이렇게 불편하게 사나...다리 새로 만들면 되지... 하고 생각 했는데 생각해 보니 차도 그렇게 많지 않고 여기사람들은 빨리빨리 다니지도 않고 필요가 없더라 고요. 그리고 저렇게 멋진 다리들을 멀쩡한데 새로 만들 필요도 없지여.
맨날 공사만 하는 우리나라가 참 아나깝네여.



제가 점심먹은 식당인데 벌꿀 전문점 입니다. 가게안에 저렇게 벌집을 만들어 놓아 구경도 하고 꿀도 모으더라고여.
이집에서 프렌치토스트 먹었는데 빵에 꿀이 뿌려져 있었는데 엄청 맛났어여.


호키티카 에서 숙소를 찾다가 길가에서 이이정표를 보고 가격이나 물어 볼까 하고 들어갔는데
생각보다 저렴 했습니다. 대신 주방은 쓸수 없더라고여. 머 밥이야 사먹으면 되져 ㅎㅎㅎ






정원이 참 아름답네여. 정원이 좋다고 하니 사장님이 아주 기뻐하십니다.



몇일전 캠핑하면서 샌드플라이에게 공격당한 다리 입니다 ㅜㅜ


웬만한 동네들은 이렇게 한가 합니다. 차도 거의 안다니고 사람도 별로 없고.
어딜가나 참 조용 하네여. 제 스타일 입니다~




숙소를 잡고 나와서 먹음 파스타~ 이거 맛나네여.


저녁엔 역시나 와인 한잔~ ㅎ
알콜중독 될듯 하네여...

아침이 다시 밝았습니다. 전날 호키티카 isite에 물어보니 하리하리 라는 동네에 모텔및 홀팍이 있다 하여
오늘의 목표는 하리하리 입니다. 자 출발~~~




점심때쯤 도착한 로스 라는 동네 입니다.
이곳의 카페에 밥 먹으러 가보니 여행용 자전거가 엄청 많네여. 여행자의 쉼터 같은 분위기 입니다.
폭스클라시어네 가까워질 수록 사람도 많아지는 모양 입니다.


45km 남았네여 윽윽.
속도계가 없으니 내가 얼마나 오고 얼마나 남은건지 알수 없어 어렵네여 ㅜㅜ
계속 작은마을 들만 지나오다 보니 속도계 살만한 곳이 하나도 없네여.
전화 안터지는 동네도 여럿 됩니다.


이곳은 공사 할때도 안전적인 부분이 참 잘되어 있는거 같아여.
간이신호등을 만들어 놨네여.
가끔 이런 비포장 나오면 재미도 있고 좋네여.



가다가 캐나다에서 오신 할아버지를 만났는데 포스가 남다르더라고여.
하루에 150km는 가실듯 하네여. 가방엔 옷가지랑 일부 품목만 가볍게 가지고 다닌다 합니다.
웬만한건 다 카드로 해결 하는거 같아여.
저런 여행스타일도 좋을듯 합니다.


물색이 정말 신기 합니다. 이것이 바로 빙항 녹은물 입니다.
에머랄드빛깔. 자전거 멈추고 한참 구경 하고 갑니다.
물이 차가운지 함 만져 볼껄 그랬나 바여 ㅋㅋ
가다가 몇일전부터 계속 마주치던 독인인 부부와 또 만나 같이 하리하리 까지 왔습니다.
숙소도 같은 모텔로 잡았죠. 다음날 비소식이 있던데 살짝 걱정 입니다.
근데 비가 와도 내일은 우중라이딩을 할 생각 입니다.
한번은 해봐도 좋을것 같고 내일 가면 폭스글라시어에 도착 하고 그곳에서 2박3일동안 액티비티를 하며
머물 예정이라 별 부담이 없네여.




이동네엔 마트 이런거 없고 슈퍼 하나가 유일한데 요리할만한걸 팔지도 않거니와 샤워하고 오니 6시 인데도 문을
닫았네여... 너무 가정적인... ㅜㅜ
결국 맞은편 카페로 왔습니다.
오늘은 고기가 급땡겨 스테이크를 주문 합니다. 으히히히.


모텔 사장님이 주신 인터넷 이용권.
뉴질랜드는 어딜가나 대부분 저런걸 줍니다. 우리나라 처럼 인터넷이 빠르지도 않고
무료 wi-fi 도 거의 없습니다. 40MB ㅋ 너무 적네여.

몇일동안 이동거리가 많진 않지만 부지런히 탔네여.
이제 내일 폭스글라시어 가서 놀다가 버스로 와나카 호수로 갈예정 입니다.
폭스글라시어 부터는 길이 험하다는 말을 많이 들어 겁나네여 ㅎ

제가 사진을 잘 안찍는 스타일 이라 사진이 많지 않아 좀 그러네여.
사진이 없으니 여행기 쓰기가 이렇게 어려울 수가... 이젠 사진 많이 찍고 나중에 지우든 할까바여.

새로운 취미생활 RC TRX-6, UDR 영정사진들

서울에 살때는 RC카를 하고 싶어도 장소가 없어서 선뜻 시작이 어려웠다. 교외로 나가자면 차를 갖고 가야하고 최소 1시간은 나가야 할듯했다. 매번 이러다 보면 그횟수가 점점 줄어들어 포기 할까봐 시작하지 않았다. 하지만 전주로 이사와서 친구 한명...