Jan 25

MySQL의 GUI 툴이 2010년 부터 Workbench로 완전 전환되었다.

지난 1월 14일 5.2.14 Beta4 가 릴리즈되었다.

주요 기능은 SQL Development, Data Modeling, Server Administration이다.

장점

  • Windows의 한글입력 문제 해결
  • 실행한 SQL에 대한 History
  • Windows와 Mac OS 등에 대한 동일한 사용자 인터페이스(UI) 제공

단점

  • 동일 SQL 탭에서 개별 SQL을 선택하지 않고 Control+Enter로 실행 불가능

알려진 문제

  • Home탭의 Open Connection 목록의 한글 깨짐

위의 단 점은 상당히 개인적일 수 있다. 이전의 MySQL Query Browser의 경우

여러 개의 SQL이 하나의 탭에 있을 때 해당 SQL에서 Control+Enter로 그 SQL 만 실행되었다면

이제는 모든 SQL이 실행된다는 것이다.

그래서 결과 탭이 SQL 개수 만큼 출력된다.

이 방식은 MS SQL의 GUI 툴에서 사용하는 방식이라 이미 여러 개발자는 익숙해져있을 수 있고,

여러 개 결과를 동시에 볼 수 있다는 장점이기도 하지만 나로선 사용 습관을 바꿔야 한다.

예를 들어 UPDATE나 DELETE가 포함된 여러개 SQL 파일을 열어서 작업할 때

지금까지는 필요할 때만 그 줄에서 실행했는데

이제는 낱 개로 SQL을 실행하기위해 해당 SQL을 선택하고 실행해야 한다.

참고

Aug 20

Tomcat을 사용할 때 가끔씩 다음과 같은 오류가 발생할 때가 있다.

경고: Parameters: Invalid chunk ignored.

이것은 Tomcat의 Parameters 클래스에서 출력하는 것으로 Tomcat 5.5.27 소스를 보면 다음과 같다.

apache-tomcat-5.5.27-src/connectors/util/java/org/apache/tomcat/util/Parameters.java

public void processParameters( byte bytes[], int start, int len,
        String enc )
{
...
    if( nameEnd<=nameStart ) {
        log.warn("Parameters: Invalid chunk ignored.");
        continue;
        // invalid chunk - it's better to ignore
    }
...
}

소스를 보면 이 경고 메시지는 매개변수 명과 값이 구분안되는 경우 (예를 들어 요청중에  &= 또는 &&와 같은 경우) 나타날 수 있다.

호출하는 쪽을 수정하면 좋으나 이것이 불가능할 때는 오류 메시지가 출력되지 않도록 할 수 밖에 없다.

CATALINA_HOME/conf/logging.properties 파일의 마지막에 다음 줄을 추가하고 Tomcat을 재시작 한다.

org.apache.tomcat.util.http.Parameters.level = SEVERE
Aug 13

Tomcat과 같은 어플리케이션 서버를 사용한 인증 방법을 간단히 정리하면 다음과 같다.

1. 어플리케이션 서버

Tomcat에서는 server.xml 파일에 사용자 지정 Realm 설정을 한다.

예제에서는 member 테이블의 email 컬럼을 사용자명으로, MD5로 암호화된 passwd 컬럼을 암호로 사용하고,

역할은 role 컬럼을 사용하도록 했다.

<Realm className="org.apache.catalina.realm.JDBCRealm"
 driverName="com.mysql.jdbc.Driver"
 connectionURL="jdbc:mysql://localhost:3306/sample?useUnicode=true"
 connectionName="user1" connectionPassword="password"
 userTable="member" userNameCol="email" userCredCol="passwd" digest="MD5"
 userRoleTable="member" roleNameCol="role"
/>

2. 웹 어플리케이션

해당 웹 어플리케이션의 web.xml 파일을 설정한다.
여기에서는 예로 /protected 란 디렉토리의 모든 파일을 요청할 때 인증이 필요하며,
인증된 계정은 Admin이나 SuperAdmin의 Role을 가지고 있어야 한다고 설정했다.

<security-constraint>
 <display-name>보안 설정</display-name>
 <web-resource-collection>
 <web-resource-name>SiteManager</web-resource-name>
  <url-pattern>/protected/*</url-pattern>
  <http-method>GET</http-method>
  <http-method>POST</http-method>
 </web-resource-collection>
 <auth-constraint>
  <description>사이트 관리자</description>
  <role-name>Admin</role-name>
  <role-name>SuperAdmin</role-name>
 </auth-constraint>
</security-constraint>

<login-config>
 <auth-method>FORM</auth-method>
 <realm-name>Site Managers</realm-name>
 <form-login-config>
  <form-login-page>/login.jsp</form-login-page>
  <form-error-page>/login_error.jsp</form-error-page>
 </form-login-config>
</login-config>

<security-role>
 <role-name>Admin</role-name>
</security-role>
<security-role>
 <role-name>SuperAdmin</role-name>
</security-role>

로그인 폼인 login.jsp 파일은 다음과 같이 간단하며 로그인이 성공하면 요청한 페이지로 자동으로 이동된다.

<form method="POST" action="j_security_check">
  <input type="text" name="j_username">
  <input type="password" name="j_password">
  <input type="submit" value="로그인">
</form>

로그인이 되면 다음과 같이 로그인 된 회원 정보를 확인할 수 있다.

String remoteUser = request.getRemoteUser();
java.security.Principal principal = request.getPrincipal();
String username = principal.getName();
boolean isAdmin = request.isUserInRole("Admin");
boolean isSuperAdmin = request.isUserInRole("SuperAdmin");

3. 참고