봄싹2011.06.22 14:07



개인적으론.. 윗녀석이 맘에 든다;;;
Posted by is윤군
TAG 봄싹
봄싹2010.07.12 01:20
스프링 3.0 RESTful & restTemplate

2010 한국 자바 개발자 페스티벌 발표자료.;
라이브 코딩을 하려고 했으나.. 인텔리 제이가 떡실신 하는 바람에 ㅠㅠ 
못했;; 아쉽군.흠.
같이 발표한 기선형! 수고 많았!!! 

Posted by is윤군
봄싹2010.02.06 07:41
금일 봄싹 dev 서버 작업을 합니다.. 
주인님이 새롭게 설치 하고 싶다고 하셔서;;;ㅎ

금일은 dev.springsprout.org 관련 모든 접속이 안되겠네요 ..ㅎㅎ


Posted by is윤군
봄싹2010.01.29 15:24


찍는다고 수고하셨어요 ^^;;
시연은 크롬..ㅋㅋ 쵝오..
Posted by is윤군
봄싹2010.01.29 03:36
간만에 스프링 이야기나 해볼까?

@RequestMapping를 달수 있는 곳은 2곳이다..

@RequestMapping("/abc/**")
public class Test{
...
}
이렇게 또는

@RequestMapping("/abc/**")
public void test(String id){
...
}

@RequestMapping(value="/abc/ab", method=RequestMethod.GET)
public void test(String id){
...
}

이렇게..
클래스 위와 메소드 위에..

그렇타면 둘의 큰차이는 멀까??
스프링3.0 최신 소스 기준으로.. AnnotationMethodHandlerAdapter.resolveHandlerMethod(468line) 이곳을 보면..
쉽게 이해 할수 있다..

간단하게 정리 하면 1번의 경우는 패턴에 해당하는 url 정보로 일단 비교해서 가지고 온다음에.. ex) /abc/test 요청..
일단 url과 value가 같은 메소드를 찾고 없으면... 요청의 메소드.(RequestMethod)를 비교해서 일치하는 메소드가 있다면 해당 handler를 실행하고...

2번의 경우는.. 넘어오는 url과... value로 준 값이 동일하게 일치해야지만.. 실행이 된다는 점이다.. (물론 메소드도 비교하지만..)

 결론은 1번의 경우 /abc/xxxx 앞에 abc에 해당하는 패턴에만 일치하고 .. 메소드만 같다면 ... 뒤에 xxx 와 일치하는 값이 없더라도 해당 handler를 실행시키고 2번의 경우는 모든것이 다 일치해야지만 실행된다는거..
알아야 하는 이유는 잘못 모르고 쓰다보면.. 자꾸 엉뚱한 놈이 실행된다던가.. 예상했던 handler가 실행되지 않아서 삽질할 수 잇따는거..

Posted by is윤군
봄싹2009.12.21 20:09
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.1//EN" "http://tuckey.org/res/dtds/urlrewrite3.1.dtd">

<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">

urlrewrite 의 설정 xml의 선언부분이다..
둘의 차이는 버전 차이..

dtd 선언이 런타임시에 큰영향을 주는건지는 오늘 처음 알았다..


    <rule>
        <from>/images/**</from>
        <to>/images/$1</to>
    </rule>
    <rule>
        <from>/js/**</from>
        <to last="true">/js/$1</to>
    </rule>
    <rule>
        <from>/css/**</from>
        <to>/css/$1</to>
    </rule>
    <rule>
        <from>/extJS/**</from>
        <to>/extJS/$1</to>
    </rule>
    <rule>
        <from>/**</from>
        <to>/app/$1</to>
    </rule>

이런 룰들이 있다고 치자..

url이 http://localhost/js/xxxx.js
라고 치면... 3.1로 선언을 하면

http://localhost/app/js/xxxx.js 이렇게 재작성이 된다..
그리고 3.0으로 선언하면..
http://localhost/js/xxxx.js 이렇게 된다..

둘은 엄청 큰차이다... ;;
결론을 이야기 하지 않아도 알듯싶어서 급마물...
Posted by is윤군
봄싹2009.12.08 11:13
필터를 이용해서 트릭을 써야 하나 싶었더니..
역시나 발빠른 스프링 진영에서 ... ㅎ
이미 만들어 놓아서 ... 수고를 덜어주었네요 ;;ㅎㅎ

스프링 만쉐~~


   <filter>
            <filter-name>httpMethodFilter</filter-name>
            <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
   
    <filter-mapping>
        <filter-name>httpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


web.xml 에 등록해준다..

그리고 jsp 에선
<form:form method="delete" > xxxxxxxxxxx </form:form>
쓰던가 ..

아님..

  <form action="/sandbox/post" method="post">
            <input type="submit"/>
        </form>
        <form action="/sandbox/put" method="post">
            <input type="text" name = "_method" value="put">
            <input type="submit"/>
        </form>
        <form action="/sandbox/delete" method="post">
            <input type="text" name = "_method" value="delete">
            <input type="submit"/>
        </form>

이렇게 쓰던가.. 빨간 놈이 핵심이다;;

HiddenHttpMethodFilter  소스의 일부분이다..

public class HiddenHttpMethodFilter extends OncePerRequestFilter {

    /** Default method parameter: <code>_method</code> */
    public static final String DEFAULT_METHOD_PARAM = "_method";

    private String methodParam = DEFAULT_METHOD_PARAM;


    /**
     * Set the parameter name to look for HTTP methods.
     * @see #DEFAULT_METHOD_PARAM
     */
    public void setMethodParam(String methodParam) {
        Assert.hasText(methodParam, "'methodParam' must not be empty");
        this.methodParam = methodParam;
    }

    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {

        String paramValue = request.getParameter(this.methodParam);
        if ("POST".equals(request.getMethod()) && StringUtils.hasLength(paramValue)) {
            String method = paramValue.toUpperCase(Locale.ENGLISH);
            HttpServletRequest wrapper = new HttpMethodRequestWrapper(method, request);
            filterChain.doFilter(wrapper, response);
        }
        else {
            filterChain.doFilter(request, response);
        }
    }


이상.. 귀찮은 포스팅 끝.!!
Posted by is윤군
봄싹2009.12.08 11:06
http://www.slideshare.net/habuma/whats-new-in-spring-3

그리고 what's new in spring 3 이라는 슬라이드 입니다..

대충 봣는데 잼있네요 .ㅎㅎ


Posted by is윤군
TAG spring
봄싹2009.11.19 00:00
이번 daum devday 9회에.. 얼떨결에.. 대상 받은 쥔장입니다..

꼭 에디터에 있었으면 하는 기능이라서 짧은 시간안에 만들어보았습니다..
물론 현재 버전으로 사용하기는 참으로 거시기 하죠..

처음 간단할거라고 생각하고 시작했는데.. 만들다 보니.. 왜 아직 웹 에디터에는 이러한 기능이 없었을까 하는 생각이 들기도 합니다.. ;; 물론 저의 실력이 허접해서 .. 이런 생각을 할 수도  있겠지만요 ..ㅎ

현재 마이너 버전의 소개를 하자면...
정말 거의 프로토타입의 프로젝트와 마찬가지로... 급하게 급하게 구현 했습니다..

소스코드상 보면 알겠지만... 갠적으로도 좋아라 하고 .. 같은 봄싹 팀으로 출전했던 Jquery 메니아 정우형의 작품이기도 한 팝업div는 Jquery로 작성되어 있습니다.

현재 기능 구현은 .. 단순(스타일 요소가 없는 textNode) 글자에서만 동작하고 있구요..
한글 / 영어 여부에 따라서 ..
한글의 경우는 Daum 사전 API를 ... 영어일 경우는 google 사전 서제스트를(불법인지는 아직 잘 모르겠지만.. 왠지.. 찝찝하기도 합니다.) 사용하여... 커서가 있는 글자 기준으로 앞으로 공백만날때까지 문자열을 가지고 ... 검색을 해서 popup div로 검색내용을 디스플레이 해줍니다..

해결해야 하는 이슈들은 무척 많습니다... 그중 가장 큰 이슈는 .. 서제스트 기능이 그렇듯이.. 글자를 칠때마다 해당 글자에 해당하는 내용을 검색해서 와야 하는데.. 그런 기능은 아직 없습니다..

앞에서 이야기 했듯이 프로토타입 성향의 급 프로젝트여서 말이죠.. ;;
버그가 장난이 아니죠..ㅎ

지금 와서 보면 아무것도 아닌것들을 가지고 마니 고민했었고... 다음 에디터 기반에 대해서도 잘 알지 못한 상태에서 코딩에 임했기 때문에.. 마이너 버전의 소스 코드는 형편 없습니다..

앞으로 해결하고 싶은 이슈들은..
1. 타이핑 칠때마다 검색을 가져온다.
2. 옵션으로 사전 또는 서제스트 사용 여부 추가.
3. style 또는 링크 , table , 등등등... 웹에디터에서 작성된 글에 대한 wordassist 가능.
4. jquery 걷어내고 daum editor 형태의 js로 변경.
5. 쓰레기 코드 깨끗이 정리 & 리팩토링하기.
6. 정말 사용 할 수 있도록 만들기.
7. 최적화 & 버그 없애기.

코딩하다가 느낀건데.. 의외로 스타일 정리하는 부분이 지저분해 보이는 daum editor.. 인것 같기도 하고;; 스타일 먹이고 글자만 그냥 지우면 tag는 그대로 남아 있다던가;; 하는 부분이 눈에 보였음..;;


[[참고로 위의 소스로는 거의 도움이 안됩니다.. 그나마 개발중인 svn 최신소스가 괜찮을듯 합니다.]]
스샷!


일단 어쩌다 보니 혼자 프로젝트가 되었습니다..
프로젝트와 관련된 사항은 봄싹 이슈트레커에 살짝 올려놓았구요...

[[ 프로젝트 이슈트레커]]
물론 관심있는 분은 없겠지만.. ㅋㅋ 실시간 변화하는 소스를 보고 싶다면 이곳에 가시면 구경할 수는 있습니다..

12월 6일까지니까... 완성도 있게 만드려 보렵니다... !!

Posted by is윤군
봄싹2009.11.18 11:35
이건 머 은근히..
해줄게 많네..

역시나 가장 어려움은... DOM과 관련된... 내용이다..
선택영역이 아닌 ... 커서가 잇는 위치로 부터 단어를 구해와야 하는데..
눈으로 보기에는.. 그냥 단순한 문자열일지 모르겠지만..

DOM으로 본다면... ;; 전혀 단순하지 않다...
물론.. 내가 잘 모르는 영역이라서 ... 삽질 하고 있는지 모르겠지만.. ;;

흠... 일단 DOM 과 친해지기 위해서 학교를 찾아갓다..
그곳의 교육과정을 보고 ;; 좀더 생각해봐야 겟따..

오늘 안에 해당 이슈를 해결 할 수 있으려나;;
아직 처리해야 할 이슈들이 많은데 말이지;;; 훔... ;;

Posted by is윤군