2008/09/04

스트럿츠2 액션 개발 중 했던 바보짓 #1

0 comment(s)

이런 내용은 바로바로 올렸어야 하는데, 역시 시간이 지나니 기억이 희미해진다.

한 1주일 쯤 되었던가...

스트럿츠2의 액션을 안다면 - 사실은 굳이 스트럿츠가 아니라 해도 - 다음 코드를 보면 어디를 잘못했는지 바로 알 수 있을 것이다.


저런 식으로 만들고 나서 NullPointerException 을 보게 되었고, '머리를 안 쓰는' 테스트 기반으로 작업하고 있었기에 디버거를 돌려 보니 getRequired() 를 호출할 때 필요한 어떤 멤버 필드가 null 이었다.

auto wiring 인지 setter/getter injection 인지 뭔지 사용되는 용어는 모른다 해도, 얼핏 들은 스트럿츠2의 액션이 작동하는 방식을 주의깊게 생각해 보면 저 코드는 왜 잘못 만든 것인지 알 수 있을 것이다.

프레임워크에서 액션을 초기화할 때 setter 들을 호출하여 여러 가지 상태를 설정할 것이지만 그 순서는 예측할 수 없다. 즉, 위의 코드에서 경우에 따라 springRepositorynull 일 수도 있고 아닐 수도 있다. 우연히도 저 코드에서는 null 이 아니었지만 결국 다른 무엇인가 중요한 것은 null 이었다.

다행히 처음 코드를 작성하고 테스트케이스를 돌려 보던 시점에서 에러가 발생했었다. 만일 저 상태로 작동을 했었다면 오류를 모르고 넘어갔을 것이고 훗날 치명적인 문제가 생겼을 지도 모를 일이다.

결론은 setter 는 엄격하게 객체 상태를 초기화하는 역할만 담당하게 하고 getter 사용은 확실하게 setter 호출이 다 완료된 시점, 즉 execute() 등의 메소드에서 사용해야 한다는 점이다.

그래도 상당 기간 개발을 해 왔는데 아직도 이런 실수를 하다니 아직 가야 할 길이 멀었다.

원격 접속시 터미널에서 한글 깨짐

0 comment(s)

아직 OS X 에 대해 모르는 것이 많으니 헤메는 것도 많다.

최근에 그 동안 수집했던 파일들을 개인 저장소(OS X 기반)에 옮겨놓게 되었는데 옮기는 도중에 보니 한글로 된 파일들이 모두 ???????? ????????... 로 나오고 있었다.

예전에 모 잡지에서 터미널 관련 설정 내용이 있었지만 관련 문서를 어디다 두었는지 기억이 나지를 않아 그냥 온라인에서 이것저것 뒤져 가면서 적용해 보았었는데 잘 되지 않았다.

우선 찾아낸 것은 어렴풋이 기억이 나기도 하던 .inputrc 설정...

을 바꾸어 주었는데 안 된다. 입출력 관련 사항이니 그런가 보다. 이에 대해서도 어떤 변화가 있었는지 정확히는 모르겠다. inputrc 설정은 관계가 없었다.

찾아봐도 원하는 내용을 잘 발견하지 못했는데, 다른 운영체제(라고 해 봐야 linux)에서 하던 설정 등을 참고하여 $LANG 환경변수를 ko_KR(혹은 ko_KR.UTF-8) 로 했더니... 잘 나온다.

이 값을 설정하기 전에, 로컬 머신은 en_US, 원격 머신은 값이 없었다.

한글 파일명 출력 문제는 역시 $LANG 설정과 관련이 있는 것 같다. 그것 외에 커맨드라인 입력에서 한글이 가능하도록 하려면 inputrc 설정인지, 아니면 터미널 자체 설정이 필요한 것인지는 더 진행해 보아야겠다.

2008/07/25

Mac OS X 의 JDK 1.6 #3 - Eclipse Plugin problem

0 comment(s)

갑자기 회사 동료에게 자극을 받아 흥미가 동하여 실로 오랫만에 간단한 이클립스 플러그인을 만들게 되었다. 그냥 기존의 기억을 되살려 예제 플러그인을 하나 생성하고 런타임 워크벤치를 실행했는데... 작동이 안 된다...

문제를 접한 순간에는, 그냥 어설프게 - 항상 느끼는 것이지만 이러면 안되는데 - 그동안 이클립스를 업데이트 하면서 시스템이 꼬였나 싶어서, 깨끗한 이클립스를 받아 플러그인을 만들어보는 삽질을 감행했다.

작동이 잘 된다. 그래서 그 동안 사용하던 이클립스에 뭔가 문제가 생겼다고 생각하려는 순간, 워크벤치 JRE 를 살펴보니... 새로 실행한 이클립스는 1.5 다. (지금 작업하던 이클립스는 1.6) 환경을 조절해 보니 1.6 에서 런타임 워크스페이스가 뜨지 않는다.

이후 조사를 진행해 보니까 현재 이클립스가 carbon 기반이고, cocoa 기반으로 바뀌지 않는 한, 혹은 애플의 1.6 JRE 에 변화가 있지 않는 한 해결할 수 없는 문제라고 한다.

요즈음 외국 서적이나 웹 사이트 등을 보면, 예제 화면을 Mac OS X 에서 캡쳐한 것을 많이 볼 수 있다. 이렇게 사용하는 사람이 많아졌으면 최소한 이런 문제들은 안 생길 것도 같은데, 아직 멀었나 보다.