문서를 정리하다가 예전에 헤드퍼스트 디자인 패턴 책을 읽고 정리해 놓은 파일이 있어 옮겨봅니다. ============================================================== 디자인 원칙 - 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리한다. - 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. - 상속보다는 구성을 활용한다. - 서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결한하는 디자인을 사용해야 한다. - 클래스는 확장에 대해서는 열려 있어야 하지만 코드 변경에 대해서는 닫혀 있어야 한다. (OCP : Open-Closed Principle) - 추상화된 것에 의존하도록 만들어라. 구상클래스에 의존하도록 만들지 않도록 한다. -..
발생일: 2010.03.18 문제: 어떤 면접에서 도메인 네임과 호스트 네임의 차이에 대한 질문을 받았습니다. 음... 정확히 알지 못해 대답하지 못했죠. 아쉬운 마음에 돌아와서 그 차이점이 뭔가 찾아봤습니다. 해결책: 호소트 네임이 한 대의 서버나 PC를 지칭하는 말이라면, 도메인은 그 서버나 PC 그룹을 대표하는 이름이라고 할 수 있다고 하네요. 예를 들어 네이버 메일 주소인 http://mail.naver.com 을 보면 naver.com 이 네이버 서비스를 대표하는 도메인 네임이 되고, mail 이 호스트 네임이 되는 것입니다. 음. 그렇다면, http://www.naver.com 이라고 되어 있을 때에, 여기서는 어떤 게 호스트 네임이 되는 걸까요. www 도 호스트 네임일까요... 네~ www..
발생일: 2010.03.16 문제: 며칠 전 Xper 에서 주최한 Rebecca Wirfs-Brock 방한 기념 번개 모임에 다녀왔습니다. 레베카 아줌마는 매우 친 애자일적인 소프트웨어 아키텍트이시고, 이 분의 설계 철학은 Responsibility-driven design 이라고 합니다. (위키 참조) 평일 저녁에 강남역 토즈에서 김창준님의 진행으로 편안하게 모임을 가졌습니다. 특별한 형식 없이, 둥글게 앉아 다과와 함께 질문하고 답변하는 방식으로 진행됐습니다. 개인적으로는 일방적인 주입식 강의가 아닌 이런 편안한 형식의 모임은 거의 처음이었던 것 같아요. 가만 생각해보면 몇 번 있었던 것 같기도 한데, 있어봤자 손에 꼽을 만할 것 같습니다. 여하튼 굉장히 느낌이 좋았습니다. 주제와 내용도 좋았지만, ..
발생일: 2010.03.15 문제: 이런 저런 웹 용어들에 대한 정의를 찾아 서핑하다가 좋은 포스트를 발견했습니다. UI 개발자가 탑재해야 할 몇 가지 개념들에 대해 설명해 놓은 포스트인데, 쉽고 명확한 설명에 고개가 끄덕여지네요. 해결책: UI 개발자가 탑재해야할 몇 가지 개념들. 위 포스트에서 언급된 몇 가지 주요 내용을 정리해봤습니다. 웹 표준 W3C는 웹이 상호 운영성을 확보하는 것을 목표로 하고 있는데, 이에 대한 주요한 수단으로 제시하고 권고하는 것이 웹 표준. 원래의 목적인 상호 운영성을 목표로 삼고 유연하게 웹 표준을 적용해야지, 웹 표준 자체를 구현의 목표로 잡아서는 안됨. 웹 접근성 장애인이 웹을 이용할 수 있는 상태 또는 그것을 측정하는 개념 비 장애인의 웹 이용에 대한 것을 측정하려..
발생일: 2010.03.11 문제: 얼마 전에 파이어폭스를 업데이트 받았는데, video 태그를 지원한다고 하더군요. 오픈비디오 타입으로 태그를 구현하면, 플러그인 추가 없이 바로 재생이 가능한 태그라는 설명입니다. 요게 아마 소문으로만 듣던 HTML5 가 아닐까 하는 생각이 들었습니다. HTML5 에서는 AJAX 도 스크립팅 없이 태그로 바로 구현되지 않을까, Comet 같은 서버 푸시형 요청이나 스트리밍 통신 같은 것도 지원되지 않을까 하는 생각이 문득 들었습니다. HTML5 의 정확한 스펙이 뭘까요. 해결책: 스티브잡스가 '어도비 너네 이제 맘에 안들어. 플래시 안 쓸 거야. 대신 HTML5 쓸 거야.' 이런 이후로, HTML5 에 대한 관심이 더 커졌다고 합니다. HTML5 에 대한 좋은 포스트가..
발생일: 2010.03.11 문제: 후배 P와 같이 시스템 운영 이관을 하다 문득 배치 파일 옵션에 빌드와 컴파일이 구분되어 있는 걸 보고, 궁금한 마음에 '빌드와 컴파일 차이가 뭐죠?' 라고 물었습니다. 뭘까요...? 같은 용어라 생각하고 다르단 생각을 못해봤는데 구분되어 있네요. 뭘까요... 해결책: 빌드와 컴파일의 차이 빌드와 컴파일의 차이에 대해 명확하고 쉽게 설명해 놓은 좋은 포스트가 있습니다. 컴파일은 빌드의 부분 집합이며, 단순한 컴파일에 비해 빌드는 실행할 수 있는 소프트웨어로 변환하는 과정이라고 합니다. 그러고 보니, 시스템 이관을 할 때에도, 개인 작업을 할 때에도, 빌드 버전을 따거나 '빌드'라는 것에 중점을 두고 수행한 적은 없었습니다. 같은 분이 작성하신 빌드의 중요성 글도 좋으니..
발생일: 2010.03.09 문제: 꽤 오랫동안 시스템을 운영해왔고 프로젝트도 여러 번 있었지만, properties 파일들은 별 생각 없이 가이드 대로 사용하고 있었습니다. 만들어진 시스템을 받을 때 쯤이면, 이미 properties 파일들은 제 위치에 놓여져 있기 때문이기도 했고요. 이번에 작은 라이브러리를 만들어 배포해 보려고 하니, 사용자 별 설정을 읽어와야 해서 properties 에 대해 고민할 기회가 생겼습니다. 해결책: 날이 갈수록 좋은 프레임웍이 만들어지고 하다보니, 기본적인 것보다는 만들어 진 라이브러리의 사용법 학습에 더 치중하게 되는 경향이 생기는 것 같네요. 위 내용은 구글링 해보니 쉽게 찾을 수 있었습니다. Smartly load your properties (영문) 꽤 오래된 ..
발생일: 2010.02.16 문제: 정확히 어디서부터 이 얘기가 시작되었는 지는 잘 모르겠다. 프렌드 홍과 스트럿츠의 복잡한 요청에 대한 ActionForm 구현에 대해 이야기하다가, 자연스럽게 관계형 DB 에서 지연 로딩 객체 구현에 대한 주제로 넘어가게 됐다. 일반적인 OR Mapping 툴에서 대부분 lazy loading 을 지원한다는데, (실제 사용해 본 적이 없어 정확히는 모르겠으나, iBatis 의 lazy loading 부분을 책에서 읽어봐 대충 감이 잡혀있긴 하다.) 얘네들은 아무래도 객체형 DB 에 적합할 것 같다는 생각이 들었다. 그럼 객체 자체에 지연 로딩을 적용해 보면 어떨까. 예를 들어, user 객체는 userId 만 가지고 있다가, userUserName() 과 같은 요청이 ..
발생일: 2010.02.16 문제: 오랜만에 회사 온라인 강의를 신청해 들어볼까 싶어서 교육 사이트를 둘러보다가, '알기 쉬운 UML' 강좌의 화려한 플래시에 혹~ 해서 신청 버튼을 눌러버렸다. UML 은 이미 대략적인 개요를 알고 있고, (여러 다이어그램 중 클래스 다이어그램만 마음 먹은대로 쓸 수 있는 수준이다) 업무를 포함하여 평소에는 다이어그램을 쓸 일이 거~~의 없어서 그다지 관심있는 편은 아니었다. 다만, 얼마 전 IBM 의 UML 컬럼 강좌을 보고서는, '+ methodName ( ParameterName: ParameterType ) : ReturnType ...' '요고요고 띄어쓰기도 좋고, 깔끔하니 있어 보이는데~' 하는 생각이 들어서 작성 기법에 개인적으로 후한 점수를 주기는 했다. ..
발생일: 2010.02.10 문제: iBatis 에 parameterClass 로 List 를 넘긴 후, iterate 태그 사용을 시도하였을 경우 아래와 같은 예외가 발생한다. Error getting ordinal list from JavaBean. Cause java.lang.StringIndexOutOfBoundsException 이 때 사용된 iBatis 구문은 아래와 같다. // select something and use iterate #someList[]# 잘못된 게 없는 것 같은데, 왜 이럴까. 해결책: 정확한 원인은 모르겠으나, 일단 패러미터를 Map 형태로 전달해주면 문제 없이 작동한다. queryForList 등의 메서드를 호출하기 전, 패러미터로 전달할 list 객체를 Map 객체..