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

서울에 살때는 RC카를 하고 싶어도 장소가 없어서 선뜻 시작이 어려웠다.
교외로 나가자면 차를 갖고 가야하고 최소 1시간은 나가야 할듯했다.
매번 이러다 보면 그횟수가 점점 줄어들어 포기 할까봐 시작하지 않았다.
하지만 전주로 이사와서 친구 한명 없던 시간을 보내던중 새로운 취미와
취미를 핑계로 사람들을 만나고 싶기도 해서 RC를 시작 한다.
첫번째 차는 TRX-6, 두번째 차는 UDR 이다.
성향이 달라 번갈아 노는 재미가 있다.







QM3 미쉐린 프리미어 올시즌 타이어 로 교체


가장 가성비 좋은 튜닝은 타이어 라고 하는 말이 있고
QM3 승차감이 별로라 타이어 끝판왕 이라는 미쉐린으로 
장착 했습니다.(차에 비해 오버스펙 이네요...)
사이즈는 215/50/17 로 했습니다.

요새는 정보가 너무 많아서 더 어려운듯 합니다.
옛날엔 동네 타이어 가게 가서 적당히 사면 됐는데
요새는 어떤타이어가 좋다 어떤 타이어가 안좋다 부터
인터넷이 싸다 유지보수 하려면 타이어가게가 좋다는둥
선택할게 너무 많습니다.

예전부터 고급차에 끼워져있던 미쉐린 타이어는 
왜이리 곱던지...
그리고 승차감 향상과 안전에 투자 하자는 여러 이유로
미쉐린 mxm4를 열심히 알아 보던중 프리미어 올시즌 제품이 
한국에 출시 됐다는 뉴스를 접하고 알아보니
내구성이 향상된 모델 이더군요.
해외 테스트 점수도 상당히 높았습니다.

자 이제 어디서 사야 할지 개미지옥이 시작 됩니다.
타이어 가게를 새로 오픈한 고등학교 동창에게 물어보니
개당 14.7 만원 + 배송비 4천원 입니다.
그런데 지역이 달라 이걸 받아서 장착해줄 믿을만한 장착점 찾기도 
어렵고 추후에 공기압점검, 타이어위치교환을 생각해 포기하고 
일반 대리점 으로 알아보다가 전주에서 인지도 있는 곳을 찾아 물어 보니 
장착, 얼라이먼트, 휠밸런스, 추후 관리, 타이어위치교환 
해주는 조건으로 개당 16만원 견적 받아 장착했습니다.
참고로 인터넷은 전국장착점에서 장착 해주는 조건으로 148,710원 입니다.
여기에 휠밸런스 4만원 정도만 추가해도 제가 싸게 한듯 하네요.

제가 여러 타이어를 써보지 않아서 잘 모르지만
과속방지턱 넘을때 좀 부드럽고 일반도로도 미끄러지듯 
나가는 듯한 느낌적인 느낌?
고속 주행시 안정감은 상승 하는것 같습니다.
새타이어라 그런가 먼가 잘나가는 느낌이네요 ^^;




그런데 장착후 가만 보니
위에 이미지에 있는 타이어 옆면 눈, 비오는 이미지가 있는데 내껀 없었다.
순간 이건 머지... 짝퉁인가... 
해서 알아보니 내가 장착한 타이어 사이즈는 extra load 여서 다른것 같다.
한국 미쉐린 사이트에서 사이즈표를 보면



내 타이어는 215/50 R17 95V
해외 사이트들을 뒤져보니


해당 사이즈에는 91H SL, 95V XL 이렇게 두가지 모델이 존재 한다.
한국에 수입되는 모델은 95V XL 뿐 이다.(XL 과 extra load 는 같은 의미다)
아무래도 이것 때문에 옆면의 모습이 다른듯 하다.
XL 사이즈가 더 많은 공기압을 넣을수 있고 더 많은 짐을 싣을수 있다니
짝퉁 SUV 인 QM3 에 더 적합한듯 하기도 하고 ㅋㅋㅋ
암튼 자료 찾아보며 공부 좀 했다.


타이어를 인터넷으로 사면 무조건 쌉니다.
하지만 타이어 관리 측면 에서는 일반 대리점이 좋은것 같습니다.
자전거도 인터넷이 싸지만 인터넷으로 사면
자전거 가게에서 바람 넣는 것도 돈 줘야 합니다.
유지보수 비용은 분명 증가 합니다.

다음달엔 라이트를 퓨어비젼 으로 업그레이드 해야겠어요.
너무 어두워서 한방에 업그레이드를...

타이어 사진만 올리려 했는데 글이 길어졌네요.
그럼 이만~~~











Hotswap 를 위한 DCEVM 설치시 ClassNotFoundException 에러날때 jdk 버젼을 확인하자.

이클립스로 스프링 프로젝트를 하다보면
java, xml 수정 할때마다 톰캣을 재기동했던 경험.
누구나 있을 것이다.
Hotswap 기능이 간절 하다.
그래서 많이 쓰던게 jRebel 인데 2018년 7월부터 유료화가되었다.
값이 1년에 2,3만원 이면 결제 하겠는데
가격이 너무 비싸서 방법을 찾던중 오픈소스 기반의 DCEVM 를
알게 되었다.

DCEVM 설치 방법은 인터넷 검색해 보면 많이 나오니
검색해 보시길.

그런데 내가 처음 설정 할땐 에러가 나서 삽질 좀 했다.
해서 내가 해결한 방법을 공유 하려고 한다.

에러내용은 아래와 같다.

HOTSWAP AGENT: 12:10:57.772 INFO (org.hotswap.agent.HotswapAgent) - Loading Hotswap agent {1.3.0} - unlimited runtime class redefinition.
HOTSWAP AGENT: 12:10:58.223 ERROR (org.hotswap.agent.config.PluginRegistry) - Error in plugin initial processing for plugin package 'org.hotswap.agent.plugin'
java.lang.ClassNotFoundException: org/hotswap/agent/plugin/hotswapper/HotswapperPlugin
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:278)
at org.hotswap.agent.config.PluginRegistry.scanPlugins(PluginRegistry.java:89)
at org.hotswap.agent.config.PluginManager.init(PluginManager.java:125)
at org.hotswap.agent.HotswapAgent.premain(HotswapAgent.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:397)

7월 27, 2018 12:10:58 오후 org.apache.catalina.startup.Catalina addClusterRuleSet
정보: Cluster RuleSet not found due to [java.lang.ClassNotFoundException: org/apache/catalina/ha/ClusterRuleSet]. Cluster configuration disabled.
7월 27, 2018 12:10:58 오후 org.apache.catalina.startup.Catalina addClusterRuleSet
정보: Cluster RuleSet not found due to [java.lang.ClassNotFoundException: org/apache/catalina/ha/ClusterRuleSet]. Cluster configuration disabled.
7월 27, 2018 12:10:58 오후 org.apache.tomcat.util.digester.Digester startElement
심각: Begin event threw error
java.lang.ExceptionInInitializerError
at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.<clinit>(GlobalResourcesLifecycleListener.java:66)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:383)
at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:145)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1303)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1576)
at org.apache.catalina.startup.Catalina.load(Catalina.java:617)
at org.apache.catalina.startup.Catalina.load(Catalina.java:668)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)
Caused by: java.lang.NullPointerException
at org.apache.tomcat.util.modeler.Registry.loadDescriptors(Registry.java:766)
at org.apache.catalina.mbeans.MBeanUtils.createRegistry(MBeanUtils.java:1058)
at org.apache.catalina.mbeans.MBeanUtils.<clinit>(MBeanUtils.java:93)
... 28 more

java.lang.ExceptionInInitializerError
at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.<clinit>(GlobalResourcesLifecycleListener.java:66)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:383)
at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:145)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1303)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1576)
at org.apache.catalina.startup.Catalina.load(Catalina.java:617)
at org.apache.catalina.startup.Catalina.load(Catalina.java:668)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)
Caused by: java.lang.NullPointerException
at org.apache.tomcat.util.modeler.Registry.loadDescriptors(Registry.java:766)
at org.apache.catalina.mbeans.MBeanUtils.createRegistry(MBeanUtils.java:1058)
at org.apache.catalina.mbeans.MBeanUtils.<clinit>(MBeanUtils.java:93)
... 28 more


해결 방법은 jdk 버젼 문제다.
내가 설치한 버젼은 jdk1.7.0_80 인데 구글을 아주 열심히 찾아 보니
버젼 문제로 보여 jdk1.7.0_67 로 낮추니 해결 되었다.
이노무 jdk 버젼 문제...

다른 사람은 나처럼 삽질 안하길...





파랑 파랑 파랑


전 파랑색을 좋아하긴 하나봐여.

지금보니 자전거도 파랑, 헬멧도 파랑, 장갑도 파랑 ^^;




대림동 삼거리 먼지막순대국 - 국물 보단 부속고기

지난번 수요미식회에 순댓국을 주제로 몇몇집이 소개 되었다.
그중 집에서 가장 가까운곳이 대림동 삼거리먼지막순대국 이다.
낮에 가면 분명히 대기줄이 있을것 이다.
아무리 맛있어도 줄서서 밥 먹는건 용납 할수 없다는게 평소
나의 지론!!!
그래서 아침 오픈 시간인 8시에 가기로 했다.
그래서 첫손님이 되었다 ㅎ
참고로 가게앞 골목이 상당히 좁아서 차 가지고 들어가면
낭패 보기 쉽다. 그러나 나는 아침 일찍 가서 가게옆에 주차 똭!!!





 인테리어가 오래된 식당임을 증명 하는것 같다.


김치맛이 제법 좋다. 
하지만 나는 순댓국 먹을때 생채가 더 좋더라~


6천원 짜리 따로국밥을 먹었다.
일단 부속고기가 상당히 많았으며
탱탱한 식감이 좋았다.
가장 인상적인 것은 서울에서 이렇게 신선한
부속고기 주는 집을 처음 봤다. 대부분 흐믈흐믈...
국물은 맑은편이라 부담이 없다.
그리고 잡내도 거의 안나는것 같다.

평소에도 자주 가고 싶지만 집에서 멀고
낮엔 대기시간이 길것 같아서 엄두가 안난다...

개인적으로 서울에서 먹은 순댓국 중에 
가장 높은 점수를 주겠다.

전국에선 전주 남부시장의 순댓국이 쵝오.

새로운 여행의 동반자가 될 브롬톤(부부톤) 구매 이야기

예전부터 나의 작은 소망은 자전거로 출퇴근 이었다.
그런데 그렇게 하려면 자전거 보관이 제일 큰문제였다.
길거리에 세워 두자니 분명 도난 사고가 날거고
사무실에 놓자니 자전거가 너무 크고...
그래서 생각 한게 세상에서 가장 작게 폴딩되는 브롬톤 이었다.
하지만 가격이 비싸서 가볍게 살 물건은 아니었다.
제일 큰문제는 샀다가 안타면 어쩔것 인가...

그러다가 최근에 여의도로 출퇴근 하면서 따릉이를 타고 다녔는데
너무 좋았다. 지하철의 안좋은 공기 안마셔도 되고
만원 전철의 고통과 환승의 피로를 날려버렸다.
퇴근길엔 저녁 노을을 보고 아침엔 일출을 보며
야외에서 라면도 먹고 동네 구경도 하고 출퇴근이 이렇게
즐거웠던 적이 없었다.

그런데 따릉이를 탈려고 가면 재고가 없을때도 있었고
불량이 걸려 변속이 안되거나 안장이 고정이 안되거나 등등
문제가 많았다. 잘못 걸리면 완전 개고생...

그래서 큰맘먹고 질렀다.
무려 부부톤으로...






구매는 압구정 위클에서 하였고 
최신버젼인 2018년 모델을 구경만 하자며 갔으나 
2016년 모델을 25% 할인 한다는 말에 그자리에서 덜컥 구매 해버렸다 ^^;
구형이라도 별차이 없겠지? 혹은 나중에 질리면 업그레이드 하면 되지... 
란 생각 으로 GoGoGo ㅋ






언젠간 이런 mtb 와 로드까지 구매하면
차종별로 셋팅 완료!!!


브롬톤은 브룩스로 떡칠해야 멋진데 그러자면 자전거값 나올듯.
일단은 참자...




나는 처음부터 브롬핑을 염두에 두었기에 가방이 필요했다.
그런데 브롬톤 가방을 만드는 회사도 별로 없고 종류도 별로 없다.
(내가 찾아본 결과)
그러다가 라라라님 이라는 분이 직접 가방을 만들어 팔고 있었다.
자전거를 출고 하고 바로 라라라님 사무실까지 직접 찾아가서 아주 자세한
상담을 받고 세개의 가방을 데리고 왔다.
물론 캠핑 하려면 몇개의 가방이 더 필요 하지만 일단은 이것만 사기로 했다.
1시간 30분 동안 많은 설명과 노하우를 들려주신 라라라님께 감사 드립니당~
가방 가격이 저렴하다. 전에 오트리브 풀세트로 두세트 살때는 
100만원이 훌쩍 넘었는데 그거에 비하면 완전 저렴...




라라라님이 생활방수 된다 하여 신문지 넣고 샤워기로 물을 뿌려 보았는데
지퍼쪽 에서 물이 새는듯 하다.
가벼운 비에는 큰문제는 없을것 같고 비가 많이 온다면 방수커버을 씌우면 그만.
이가격에 오트리브급 방수를 기대하면 양심이 없는듯 하다.
이정도면 합격 이다.


미니벨로는 처음 타보는데 재미 있을것 같다.
더군다나 폴팅이 되니 버스나 지하철, 기차등을 연계하면
기존의 자전거 여행과 다른 매력의 여행이 될것 같아 
벌써부터 설레인다.
이름도 지어줘야 하나 ㅋ












제주도 자전거 일주 영상을 대충 만들어 보았다.- surly disc trucker 의 첫 비행

2017년 추석... 황금연휴라 부모님께 간곡한 승낙을 받아
우리 부부는 제주도로 출발 했다!!!
사실 3월에 이미 마일리지로 발권은 해놓고 허락 못 받음
비행기표를 버릴 생각 이었다 ㅋㅋㅋ

사실 2015년에도 자전거를 가져 갔지만 비오는날 타다가
와이프 자전거의 허름한 브레가 내리막길 에서 먹통이 되어
낙차 사고가 있어 도중에 렌트카 여행으로 전환 했었다.
그 사고후 우리는 결혼을 하면서 커플 자전거를 새로 장만하고
드디어 2017년 10월 투어를 나갔다.

우여곡절도 있었으나 많이 힘든건 없었다.
역시 국내투어는 걱정 할게 없다.

여행기를 써보려 했으나 투어중 사진 찍는 것도 귀찮고
여행기 쓰는건 더 귀찮고... ㅋ
여행기는 내 마음속에 두기로 했다. ^^;
하지만 아무것도 안남기면 거시기 하니 간단한 영상 하나
올려 추억해 보기로 한다.


jquery element 의 hide 여부 판단 하기.is(':visible');

특정 element 의 display 속성이 none 인지 아닌지 
판단 할때 아래와 같이 사용 하면 쉽다.

$('#myDiv').is(':visible');

display: none 일때는 false 를 반환 한다.


jquery 팝업으로 폼(form)전송, 팝업에서 부모창 폼(form)전송 시키기

* 부모 페이지 폼 html
<form name="fnForm" id="fnForm" method="post" target="popup_window">
    <input type="hidden" name="sBrchCd" />
</form>



* 팝업 으로 폼전송 스크립트
$("input[name=sBrchCd]").val( "aaa" );
$("#fnForm").attr("action", "/abc.do");
window.open("", "popup_window", "toolbar=no, location=no, width=745, height=705");
$("#fnForm").submit();



* 팝업 에서 부모창의 폼전송 스크립트
window.opener.$("input[name=sBrchCd]").val( "sss" );
window.opener.$("#fnForm").attr("action", "/aaa.do");
window.opener.$("#fnForm").attr("target", "");
window.opener.$("#fnForm").submit();

jquery 6자리 랜덤 숫자(집 비밀번호 변경용)

click demo 6 자리 랜덤 숫자

$(document).ready(function() { , $(function() {

jquery 를 사용 하면 아래의 문법으로 시작 하게 된다.
가장 많이 쓰이는 방법이다.

$(document).ready(function() {

});

그런데 여기저기 jquery 를 사용한 사이트를 보면 아래와 같은 방법을 쓰는걸
볼수 있다.
코드량을 줄이기 위함이다.

$(function() {

});

위쪽을 더 많이 써서 그런지 더 가독성이 좋아 보인다.

Datejs 스크립트 날짜 관련 유용한 라이브러리

스크립트로 날짜를 계산 하면 정말 짜증 난다.
자료를 찾아서 해봐도 내가 원하는 결과는 쉽게 나오지 않는다.
다른 언어들은 편한데 스크립트는 복잡 하다.
그러다 datejs 라는걸 알게 되었다.


3일전 날자를 구하는걸 예로 들어 보겠다.
기존의 스크립트들은 아래와 같다.
var strDate1 = "2015-5-6";
var arr1 = strDate1.split('-');
var dat1 = new Date(arr1[0], arr1[1], arr1[2]);

document.write("* 현재날짜 : " + strDate1 + "<br/>");
document.write("* 3일 더하기 : " + dat1.getFullYear() + "-" + dat1.getMonth() + "-" + (dat1.getDate() + 3) + "<br/>");
document.write("* 3일 빼기 : " + dat1.getFullYear() + "-" + dat1.getMonth() + "-" + (dat1.getDate() - 3) + "<br/><br/>");


Datejs 은 아래와 같다.
Date.today().add(-3).day()

한줄로 끝나 버린다.
이걸 찾고 그동안 수차례 고생한 지난 일들이 생각 나며 억울 하다 ^^;

앞으로는 삽질 안해도 되겠군...

자세한 내용은 아래를 참고 하시길...
date.js 를 다운받아 프로젝트에 넣은후 사용 하면 됨.

소개 사이트

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시간은 나가야 할듯했다. 매번 이러다 보면 그횟수가 점점 줄어들어 포기 할까봐 시작하지 않았다. 하지만 전주로 이사와서 친구 한명...