DB Connection Pool 사용 중 가끔 데이터베이스 커넥션이 끊기는 현상 발생.


[오류로그 일부]

[org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was62250 seconds ago.The last packet sent successfully to the server was 62250 seconds ago, which  is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.] 


해당 문제를 해결하기 위해서 'wait_timeout' 시간을 늘리거나 'autoReconnect=true' 설정을 사용하라는 문구가 보인다.


[wait_timeout]

- wait_timeout으로 설정된 시간이 초과되면 커넥션을 종료시키는 옵션이다.

- 옵션의 시간을 무한정 늘릴 수 없기 때문에 근본적인 해결책으로 보기 어렵다.


[autoReconnect=true]

- 해당 옵션은 쿼리 수행 다음 DB 세션에 문제가 있으면 단순히 SQLException을 리턴한 다음 재접속을 시도한다.

- 만약 트랜잭션 구동 환경이라면 수행중이던 작업은 롤백처리되어야 하고, 남은 작업들은 수행되지 말아야 하는데 해당 옵션은 이러한 작업을 처리하지 않는다.

- 따라서 해당 옵션 사용시 트랜잭션에 대한 처리를 따로 해주어야 한다는 문제가 있다.


==> 위와 같은 문제로 다른 파해법을 찾아 보니 validationQuery 라는 것을 찾게 되었다.


[validationQuery]

- 커넥션의 유효성을 검사하는 옵션

- 해당 옵션은 단순 검증을 위한 옵션이기 때문에 자원 소비를 최소화 하기 위해 아래와 같은 Query를 사용하도록 권장한다.

오라클 : SELECT 1 FROM DUAL

MSSQL : SELECT 1

MySQL : SELECT 1

CUBRID : SELECT 1 FROM DB_ROOT

- 설정

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

    <property name="driverClassName" value="${Globals.DriverClassName}" />

    <property name="url" value="${Globals.Url}" />

    <property name="username" value="${Globals.UserName}"/>

    <property name="password" value="${Globals.Password}"/>

    <property name="defaultAutoCommit" value="true"/>

    <property name="validationQuery" value="select 1"/>

    <property name="testWhileIdle" value="true"/>

    <property name="timeBetweenEvictionRunsMillis" value="7200000"/>

</bean> 


[참고]

http://uip80.tistory.com/entry/24%EC%8B%9C%EA%B0%84-%EB%8F%99%EC%95%88-connection-%EC%98%A4%EB%A5%98-mysql

http://kshmc.tistory.com/entry/MyBatis-Datasource-%EC%B0%B8%EA%B3%A0

http://www.mybatis.org/mybatis-3/ko/configuration.html

http://d2.naver.com/helloworld/5102792

'SQL > MySQL' 카테고리의 다른 글

MySQL 데이터타입  (0) 2015.12.28
Posted by OnewayK
,

Javascript 개요

WEB/Javascript 2015. 12. 30. 14:43

자바스크립트란?


1. 웹 브라우저에 내장되어 있는 스크립트(script) 언어

- HTML의 각 요소에 접근, 제어


2. 객체지향(object oriented) 프로그래밍

- 한 프로그램을 구성하는 여러개의 조각들을 객체들로 파악한다.

- 객체들은 특정상태를 나타내는 속성과 행위를 나타내는 함수로 되어 있다.

- 프로그램이 실행되면 객체들이 서로 준비된 함수들을 이용해 메시지를 주고받고 데이터를 처리해 원하는 결과를 만들어냄

- 자바스크립트의 객체는 프로퍼티 이름과 프로퍼티 값의 쌍으로 존재. 프로퍼티에 값을 지정하면 속성이 되고, 함수를 지정하면 행위가 된다.

- 상속 지원


3. 인터프리터(interpreter) 방식

- 컴파일러 방식 : 프로그래밍 언어로 구성된 소스코드를 컴파일 하고 머신코드를 생성하고 머신코드를 실행(컴파일 타임과 런타임이 구분)

- 인터프리터 방식 : 컴파일 타임과 런타임이 구분되지 않아 런타임시 소스코드 번역과 실행을 모두 실행(과거에는 실행속도가 느리다는 평가를 받기도 함)


4. 동적이면서 약한 타입(dynamic and weak typing) 언어

- 다른 언어에 대한 경험이 있다면 쉽게 접근 가능

- 변수 선언시 데이터타입 명시하지 않음(대입한 값에 따라 데이터 타입 결정)



웹 개발환경의 변화


- 1994년 Brendan Eich가 개발

- 1995년 넷스케이프 네비게이터 2.0에 탑재

- 모든 웹 브라우저에 내장된 클라이언트 측 스크립트 언어

- 2005년 초 Ajax 기술의 보급으로 중요성 대두

- 2008년부터 가열된 웹 브라우저간의 자바스크립트 엔진 성능 경쟁

- 서버 측에서의 자바스크립트 프로그래밍

- 2009년 Ryan Dahl이 Node.js 개발

- HTML 5의 중심에 놓여 웹 표준으로서 위상을 가짐

- 모바일 환경까지 그 응용 범위의 세를 더욱 확장



모바일 앱 개발환경과 자바스크립트의 위상


- 2007년 아이폰의 등장과 함게 시작된 스마트폰의 열풍으로 엄청난 모바일 앱 시장의 성장

- 스마트 폰 플랫폼의 다양성으로 인한 문제 발생

+ 개발 비용의 증가, 유지보수 비용의 증가(아이폰/아이패드 - Object-C, C, C++ | 안드로이드 - Java, C | Windows - C#)

- 모바일 웹 브라우저의 신속한 HTML 5 지원

- JQuery Mobile, Sencha Touch 와 같은 모바일 웹 앱 개발 프레임워크 등장

- 모바일 웹 앱(mobile web app) - 속도의 한계

- 하이브리드 모바일 앱(hybrid mobile app) 대안 (네이티브 + 모바일 웹앱)

- 모바일 시대의 앱 개발에 있어 자바스크립트의 위상과 중요성이 날로 높아짐



자바스크립트 개발도구 설치


- 통합개발환경 Eclipse를 기반으로 한 Aptana Studio

- 오픈소스

- Windows, 맥OS, Linux  지원


'WEB > Javascript' 카테고리의 다른 글

예/아니오 창 만들기  (0) 2015.12.28
Posted by OnewayK
,

자바 NULL 비교시

자바에서는 비교문자.equals("")시 null을 비교 못하는 경우가 발생한다.

그래서 null값을 확인하고 싶다면 !"".equals(비교문자)를 하는게 좋다.


[사용법]

1. 비교문자 != null

2. !"".equals(비교문자)

3. 비교문자.length() != 0


[응용]

if(비교문자 != null && !"".equals(비교문자) && 비교문자.length() != 0){

// 수행기능

}

Posted by OnewayK
,