OctoberSky 참여 후 얻은 여러 사이트들 링크

기본

web

http://firejune.com/

Express

http://firejune.io/express

Expresso

http://doortts.tistory.com/213

BDD

http://doortts.com/vows/

node.js

http://www.yuiblog.com/blog/2010/05/20/video-dahl/

https://no.de/

http://nodejs-kr.org/

http://doortts.tistory.com/

Cloud9IDE

http://cloud9ide.com/

HTML5 graph library

http://www.rgraph.net/

Advertisements

스프링에서 RESTful 적용기

기본

스프링으로 RESTful 스타일의 웹 개발을 하려다 보니 /project/* 또는 /app/* 같이 어떠한 뎁스를 하나 주지 않으면 static 리소스들의 접근도 디스패처 서블릿이 다 먹어 버리는 문제가 있었습니다. 지저분하다고 생각했지만 그냥 쓰고 있었는데, 토비님의 스프링 3.0.4 를 이용해서 UrlRewriteFilter없이 깔끔한 URL을 만들기 포스트를 보고 적용해 보니 더이상 URL에 뎁스를 하나 더 주지 않아도 돼서 너무 좋았습니다.

그런데 기쁨도 잠시 를 추가하고 나니 웹 애플리케이션에 접근이 전혀 안됐습니다. 매핑 정보가 없다는 에러 로그가 계속 나타나더라구요. 분명히 static 리소스들에는 접근이 가능한데 말이죠. 톰캣을 리스타트 해보니 매핑 정보에 디폴트 서블릿이 /** 빼고는 매핑되는게 전혀 없었습니다. 원인을 찾아보니 가 핸들러를 하나 추가하면서 스프링에서 디폴트로 등록해 주는 핸들러나 어탭터가 등록이 안돼서 그렇더군요.

사용하는 핸들러가 DefaultAnnotationHandlerMapping 밖에 없어서 설정 파일에 슥 추가해 주고, 톰캣을 리스타트 시켰더니 로그에 매핑 정보들이 드디어 나타났습니다.

아니 그런데 또 접근이 안되더군요. 원인이 뭘까 생각해 보다가 로그를 가만히 보니 매핑 순서가 디폴트 서블릿이 /** 먼저 잡히고 그 다음 /index 등등이 잡히는게 원인 같아 보였습니다. 설정 파일에서 DefaultAnnotationHandlerMapping을 위로 옮겨보니 맨 마지막에 디폴트 서블릿 매핑이 잡혀서 잘 구동이 됐습니다. 이얏호!

그러다가 문뜩 생각난

구글링 해보니 박성철님의 스프링 설정 이 구체적으로 뭘까?란 포스트가 눈에 들어왔습니다. 읽어보니 @mvc 관련 핸들러, 어탭터를 등록해 주더라구요. 아까의 삽질을 상기 시키며 위에 추가하고 수동으로 등록한 핸들러, 어탭터를 제거하고 톰캣을 띄워보니 잘 돌아갑니다. 아~ 깔끔하구만 ㅋ

Maven 플러그인 carbon5로 데이터베이스 마이그레이션하기

기본

박재성님의 자바 세상의 빌드를 이끄는 메이븐을 보던 중, carbon5로 데이터베이스 마이그레이션 하는 부분이 잘 안돼서 방법을 찾아봤습니다.

1. 플러그인 인식을 못하는 문제

c5-db-migration 플러그인 페이지에서 Wiki -> MavenPlugin 페이지에 있는 예제 코드가 책에 나와있는 것과 같은데, 버전 차이가 나서 그런건지 플러그인 인식을 못하더라구요.

그래서 c5 저장소 페이지에 들어가서 pom 파일을 열어보다가 그룹 아이디가 좀 다른 것을 발견했습니다. 예제 코드에선 com.carbonfive.db-suuport 요렇게 되있는데 pom 파일을 확인해 보니 com.carbonfive 그냥 이렇게 되있더라구요. 그리고 <version>부분에서 RELEASE로 설정하면 에러가 발생하고 LASTEST로 했더니 경고가 발생합니다.(에러였던가?) 그래서 최신 버전으로 바꿔줬습니다.

<groupId>com.carbonfive</groupId>

<artifactId>db-migration-maven-plugin</artifactId>

<version>0.9.7</version>

2. db-migration:migrate 골 실행 시, JDBC URL에 접근할 수 없다는 에러가 발생하는 문제

c5 플러그인을 사용하기 전에 DB가 만들어져 있고 데이터도 들어 있었습니다. 그래서 그런지 에러가 발생했습니다. 이상하게 db-migration:drop 골도 에러가 발생하더라구요.

DB를 수동으로 drop 시키고 다시 migrate골을 실행해도 같은 문제 발생. DB를 수동으로 만들지 않고 db-migration:create 골을 이용해서 생성하고 다시 db-migration:migrate 골을 실행하니 정상적으로 돌아갔습니다.

migration 파일들이 생성되는 경로를 수정하고 디폴트 페이즈에 얹는 작업을 한 최종 결과:

<plugin>
	<groupId>com.carbonfive</groupId>
	<artifactId>db-migration-maven-plugin</artifactId>
	<version>0.9.7</version>
	<configuration>
		<url>${jdbc.url}</url>
		<username>${jdbc.username}</username>
		<password>${jdbc.password}</password>
		<migrationsPath>src/mavenpilot/config/migrations/</migrationsPath>
	</configuration>
	<dependencies>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.16</version>
		</dependency>
	</dependencies>
	<executions>
		<execution>
			<id>migrate-db-schema</id>
			<phase>process-test-resources</phase>
			<goals>
				<goal>migrate</goal>
				<goal>validate</goal>
			</goals>
		</execution>
	</executions>
</plugin>

Spring MVC 인코딩 문제

기본

1. web.xml에 인코딩 필터를 등록합니다. (이건 GET방식으로 들어오는 데이터는 커버하지 못하고 POST는 처리할 수 있습니다.)

<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>

 

2. server.xml (workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf )

GET으로 들어오는 데이터의 인코딩은 여기서 처리할 수 있습니다. (Tomcat 7 기준으로 userBodyEncoding=”true”는 먹히지 않더라구요.)

<Server …>

<Service …>

<Connector … URIEncoding=”UTF-8″/>

</Connector>

</Service>

</Server>

 

3. 그리고 jsp, html 파일에서 인코딩을 지정합니다.

<?xml version=”1.0″ encoding=”UTF-8″ ?>

<%@ page language=”java” contentType=”text/html; charset=UTF-8″    pageEncoding=”UTF-8″%>

<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />

 

이렇게 지정 하니까 GET, POST로 왔다갔다 하는 데이터는 인코딩 문제가 없었습니다 🙂