2015년 8월 11일 화요일

DBCP validationQuery 설정

* 참고 사이트: http://linuxism.tistory.com/579
* 참고 사이트: Configuring the High Concurrency JDBC Connection Pool
* 참고 사이트: DBCP 설정 정리

에러 메시지 일부분
 - is longer than the server configured value of 'wait_timeout'.

원인 
 - 마지막으로 DB에 커넥션을 맺은후 사용이 없다 보니 데이터 베이스 커넥션이 끝겼다. 

해결책
 - 특정 시간마다 커넥션을 확인 하는 셋팅을 지정한다. 

적용 코드
 - MySQL
  • validationQuery="select 1"

 - 오라클의 경우
  • validationQuery="select 1 from dual"


상세 설명
mysql wait_timeout 설정(기본값 28800 , 8시간) 에 의해 커넥션이 연결된 이후 해당커넥션의 close 없이 8시간이 지나면 해당 커넥션을 종료 시키게 된다.
문제는 이렇게 종료된 커넥션을 dbcp의 connection pool 에선 여전히 가지고 있는 상태라는 것이다.이런 상황에서 DB 관련 프로그램이 호출되면 커넥션 관련 에러가 발생된다.
해결방법은 java에서 DB를 사용하기 전에 해당 connection 이 정상적인지 검사를 하도록 하는 것이다. 이 옵션이 validationQuery 파라미터이다.

* 추가 작업
 - timeBetweenEvctionRunsMillis - 사용되지 않는 커넥션을 추출하는 쓰레드의 실행 주기를 지정
    이값을 알맞게 지정해서 사용되지 않는 커넥션을 제거하는것이 좋다 보통 10~20분 단위 검사

 - testWhileIdle - true 일 경우 비활성화 커넥션을 추출할때 커넥션이 유효한지 여부를 검사해서 유효하지 않으면 제거


추가 적용 코드
  • validationQuery="select 1"
  • testWhileIdle="true"   
  • timeBetweenEvictionRunsMillis="30000"
 - testWhileIdle:컨넥션이 놀고 있을때, validationQuery 를 이용해서 유효성 검사를 할지 여부.
 - timeBetweenEvictionRunsMillis:해당 밀리초마다 validationQuery 를 이용하여 유효성 검사 진행.

* 더 추가 작업
 - 이렇게 설정하면 컨넥션을 풀에서 가져 올때도, validationQuery를 통해서 유효성 검사를 진행하게 되는데
 - 퍼포먼스가 문제 될거라고 생각된다면 testOnBorrow( default : true ) 값을 false 로 추가해주면 된다.
 - testOnBorrow : true일 경우 커넥션을 가져올 때 커넥션이 유효한지의 여부를 검사.

웹 프로젝트에 UTF-8 인코딩 설정




Tomcat 및 서블릿 컨테이너 설정 추가

$CATALINA_HOME/conf/server.xml
또는 이클립스 IDE > Servers 폴더 > server.xml 수정.
Connector 에 URIEncoding="UTF-8" 을 추가

web.xml 에 인코딩 필터 추가

     <!-- Encoding filter : UTF-8 -->  
     <filter>  
         <filter-name>EncodingFilter</filter-name>  
         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
         <init-param>  
             <param-name>encoding</param-name>  
             <param-value>UTF-8</param-value>  
         </init-param>  
     </filter>  
     <filter-mapping>  
         <filter-name>EncodingFilter</filter-name>  
         <url-pattern>/*</url-pattern>  
     </filter-mapping>  


JSP 파일에 내용 추가 (2가지 중 아무거나 가능)

1. jsp 파일: <%@ page contentType="text/html; charset=utf-8" %>
2. web.xml: jsp 2.1 부터 JSP의 모든 페이지의 인코딩을 web.xml에 설정 가능
     <!-- All jsp page encoding setting -->  
     <jsp-config>  
         <jsp-property-group>  
             <description>jsp page encoding</description>  
             <display-name>Encoding</display-name>  
             <url-pattern>*.jsp</url-pattern>  
             <el-ignored>false</el-ignored>  
             <page-encoding>UTF-8</page-encoding>  
             <scripting-invalid>false</scripting-invalid>  
             <is-xml>false</is-xml>  
         </jsp-property-group>  
     </jsp-config>  



blogspot tips

code formatting

web.xml sample

 <?xml version="1.0" encoding="UTF-8"?>  
 <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
   version="2.5">  
   
   <!-- JDBC 연결을 위한 정보 -->  
   <resource-ref>  
     <description>OracleDatasource</description>  
     <res-ref-name>jdbc/myoracle</res-ref-name>  
     <res-type>javax.sql.DataSource</res-type>  
     <res-auth>Container</res-auth>  
   </resource-ref>  
   
   <context-param>  
     <param-name>ds</param-name>  
     <param-value>jdbc/myoracle</param-vlaue>  
   </context-param>  
   
   <!-- Filter 설정 (Encoding Filter) -->  
   <filter>  
     <filter-name>Encoding Filter</filter-name>  
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
     <init-param>  
       <param-name>encoding</param-name>  
       <param-value>UTF-8</param-value>  
     </init-param>  
   </filter>  
   
   <filter-mapping>  
     <filter-name>Encoding Filter</filter-name>  
     <servlet-name>action</servlet-name>  
   </filter-mapping>  
   
   <!-- servlet 설정 -->  
   <servlet>  
     <servlet-name>action</servlet-name>  
     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
     <init-param>  
       <param-name>config</param-name>  
       <param-value>/WEB-INF/struts-config.xml</param-value>  
     </init-param>  
     <init-param>  
       <param-name>debug</param-name>  
       <param-value>3</param-value>  
     </init-param>  
     <init-param>  
       <param-name>detail</param-name>  
       <param-value>3</param-value>  
     </init-param>  
     <load-on-startup>0</load-on-startup>  
   </servlet>  
   
   <servlet-mapping>  
     <servlet-name>action</servlet-name>  
     <url-pattern>*.do</url-pattern>  
   </servlet-mapping>  
   
   <!-- 세션 기간 설정 -->  
   <session-config>  
     <session-timeout>30</session-timeout>  
   </session-config>  
   
   <!-- 시작페이지 설정 -->  
   <welcome-file-list>  
     <welcome-file>index.jsp</welcome-file>  
   </welcome-file-list>  
   
   <!-- 존재하지 않는 페이지, 404에러시 처리 페이지 설정 -->  
   <error-page>  
     <error-code>404</error-code>  
     <location>/404.jsp</location>  
   </error-page>  
   
   <!-- 500에러시 처리 페이지 설정 -->  
   <error-page>  
     <error-code>500</error-code>  
     <location>/500.jsp</location>  
   </error-page>  
   
   <!-- NullpointException발생시 처리 페이지 설정 -->  
   <error-page>  
     <exception-type>java.lang.NullPointerException</exception-type>  
     <location>/null.jsp</location>  
   </error-page>  
   
   <!-- 태그 라이브러리 설정 (JSTL"coreTag"을(를) 사용)-->  
   <jsp-config>  
     <taglib>  
       <taglib-url>http://java.sun.com/jsp/jstl/core</taglib-url>  
       <taglib-location>/WEB-INF/tld/c.tld</taglib-location>  
     </taglib>  
   </jsp-config>  
 </web-app>  
   

A web.xml Deployment Descriptor Elements

web.xml elements order ?

2010년 6월 11일 금요일

아이폰의 성공 비결

1. 스마트폰 개발을 위해 지난 4년간 내로라하는 우수 인력 100여명을 투입해서 아이폰 한 종류만 만들었다. 타 업체는 매년 수십종의 휴대폰을 내놓음.

2. 제품 개발의 일관성과 책임성 : 톱 매니지먼트가 직접 제품을 기획한 후 디자인 및 개발 전과정을 직접 지휘했다는 점이 완성도 높은 제품 출시를 가능하게 했다는 설명

3. '뉴톤', '아이팟폰' 등 실패작에서 사용했던 기술이 지금의 아이폰의 바탕을 이룸.

4. 무엇보다 가장 큰 성공이유 : 애플 CEO가 스티브 잡스라서ㅋㅋㅋ(스티브 잡스는 UX 전공자가 아니면서도 현존하는 최고의 UX 디자이너)

 

* 다변하는 모바일 생태계에서 기업이 생존하기 위한 조건 : 일관성(coherence)

 - 서로 다른 것들이 잘 뭉쳐서 전체를 구성하는 것

 - 마치 소설에서 '기승전결'을 따라가며 이야기가 변하지만 주제의 일관성만은 헤치지 않는 것처럼.

 - 다만 표준화와 규격화를 지향하는 '획일적 일관성(consistency)은 버려야 한다.

 - 심리스 UX를 구현하기 위한 '은은한 일관성'이 필요하다.

 - 애플 TV와 아이팟의 조작매뉴얼은 방식이 완전히 다르지만 말로 설명할 수 없는 애플 UX만의 냄새가 난다. 우리도 그것을 만들 수 있어야만 성공할 수 있다.

 

원문 주소 : http://www.zdnet.co.kr/Contents/2010/03/11/zdnet20100311161544.htm

 

2010년 5월 4일 화요일

드럼이란

* 드럼

  • 드럼은 영어로 북을 뜻하는 것으로 서양의 타악기 중의 하나이다.
  • 음악 그룹에서의 드럼은 일반적으로 여러 개의 북과 심벌즈로 이루어진 드럼셋을 의미한다.
  • 드럼셋은 사이드(크래시) 심벌, 탑(라이드) 심벌, 탐탐, 하이햇 심벌, 스네어 심벌, 플로어 탐, 스네어 드럼, 베이스 드럼(대고)로 일반적으로 구성된다.
  • 드럼 연주자를 지칭하는 말로도 쓰인다.
  • 드럼통은 둥근 원통을 이야기한다.

 

 

출처 : 위키백과