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 설정인지, 아니면 터미널 자체 설정이 필요한 것인지는 더 진행해 보아야겠다.