'ITWeb/스크랩'에 해당되는 글 119건

  1. 2008.07.25 [펌]OSCON 세째날 II - SubVersion에서 하지말아야 할 10가지
  2. 2008.07.25 [펌]OSCON 둘째날 III - Exceptional 소프트웨어 개발
  3. 2008.07.25 [펌]OSCON 둘째날 I - 재미없는 튜토리얼, 재밌는 짤방
  4. 2008.07.23 야후코리아 홈페이지 에러.. 2
  5. 2008.07.16 [펌]세상을 변화시킬 기술들
  6. 2008.07.15 야후 블로그 랭킹 검색..
  7. 2008.07.09 [펌]소프트웨어 테스터와 프로그래머의 화합(和合)의 법칙
  8. 2008.06.30 [펌] 리눅스 파일 시스템
  9. 2008.06.30 [펌]RAID
  10. 2008.06.29 [펌]DDD(Domain Driven Design) 도메인 주도 개발

[펌]OSCON 세째날 II - SubVersion에서 하지말아야 할 10가지

ITWeb/스크랩 2008. 7. 25. 10:38
최근까지 야후는 CVS 를 사용하고 있었고 지금도 쓰고 있는데요..
본사에서 CVS 교체를 위해서 몇가지 bench marking 을 하고 있더라구요..
지금은.. 제가 퇴사를 하여 뭘 하고 있는지 모르겠으나..
ㅋ 아래 10계명은.. subversion 말고도 cvs 에서도 거의 동일하게 적용 되는듯 하내요.. ㅎㅎ

ref. http://channy.creation.net/blog/533

구글에서 SubVersion을 많이 쓰는 것을 알고 있을 겁니다. 요즘 서브버전을 사용하기 시작하는 회사들이 많고 오픈 소스 프로젝트에서도 많이 이용합니다.

구글 엔지니어인 Ben Collins-Sussman와 Brian W. Fitzpatrick 두 사람이 Subversion의 최악의 사례 10가지를 설명해 주었습니다.

10. Debate Version Control
- CVS냐 SubVersion이냐 논쟁하는 시간이 아깝습니다.
9. Do a Brute-Force Transition
- 힘들게 버전 컨트롤 시스템을 다른 것으로 바꾸는 것을 하지 마세요.
8. Backups? What Backups
- 백업 하지 마세요.
7. Loads of Locales
- 다국어 지원에 힘을 들이지 마세요. 인코딩 등 다 알아서 해줍니다.
6. Rule with an IRON FIST
- 너무 엄밀한 규칙을 피하세요. 커밋 규칙이나 브랜칭, 태깅 정책 등등…

5. Hide the Version Control
- 누가 어떤 커밋을 했는지 잘 알 수 있도록 공개해야 합니다.
4. Use Complex Branching Schemes
- Trunk에서 개발 가능한 걸 복잡하게 너무 많은 브랜칭하는 규칙을 만들지 말것.
3. Put Everything in the Repository
- Tar, ISO, ZIP 파일 모두 레포지터리로? 안될 말씀.
2. Use a Network Drive
- 삼바나 공유 폴더 같은 네트웍 저장소로 사용하지 마세요.
1. Really Clever Hook Scripts!
- 스크립트로 트랜잭션이나 커밋 히스토리를 바꿀려고 하지 마세요.
0. Edit the Repository Database
- 리포지터리 DB를 건드리는 건 최악의 짓입니다.

재미있게 풀어낸 앞의 10가지 사례는 Subversion을 사용하거나 할 계획이 있으시면 꼭 명심하는 게 좋겠습니다

:

[펌]OSCON 둘째날 III - Exceptional 소프트웨어 개발

ITWeb/스크랩 2008. 7. 25. 10:30

그냥 개인적인 생각 입니다만.
개발자는 문서쟁이는 하지 말았으면 한다는 짧은 생각이 스쳐 가내요...
좀더 설계, 개발 등에 집중할 수 있게 해줬으면 좋겠내요..
문서는 전문 writer 에게... ^^*

Channy's Blog 에서 퍼왔슴돠
ref.
http://channy.creation.net/blog/531

두번째 키노트로 나선 Robert Lefkowitz의 발표는 정말 인상적이었습니다. 우선 그는 마이크로소프트의 개발 프로세스를 꼬집어서 전통적인 개발 방식이 오픈 소스와 얼마나 다른지 비교해 주었습니다.

뿐만 아니라, 켄트벡의 익스트림 프로그래밍의 라이프 사이클도 비교 대상에 올렸는데요. 이러한 과정은 과거 5세기 부터 발달한 수사학 단계의 일반적 접근으로 보았습니다.

수사학의 분야는 착상(inventio), 배열( dispositio), 표현(elocutio), 암기(memoria), 발표(actio-pronuntiatio)라는 다섯 부분으로 이루어져 있고, 이는 일반적으로 연설이 행해지기까지의 과정으로 알려져 있죠. 수사학과 MS, XP, 오픈 소스를 비교한 도표는 아래와 같습니다.

방법론 개발 과정
Rheotic(수사학) Inventio- Dispositio- Elocutio- Memoria- Pronuntiatio
Microsoft Requirement- Development - Test - Release - Maintainance
XP방법론 Exploration- Planning - Iteration - Release - Productionizing
오픈소스 Bug Report- Tiage - Integration - Commit/Update - Run/Use

하지만, 오픈 소스의 개발은 실제로 Bug Report가 아니라 Commit으로 부터 출발합니다. 즉, Commit / Update (memoria) - Run / Use (Pronuntiatio) - Bug Reporting (Inventio) - Triage (Dispositio) - Integration (Elocutio)의 순서를 따르고 이 점이 전통 소프트웨어 개발과 확연히 다른 것이죠. 여기서 Exceptional Software Methodology가 나옵니다.

먼저 우리가 만드는 소스 코드의 70%는 예외 처리 코드입니다. try - catch를 보면 catch쪽의 코드가 꽤 많죠. 즉, 일단 만들고 문제점을 파악하는 익셉션 처리 방식을 힌트로 오픈 소스 개발 방법론을 정의한 겁니다. 이것은 유지 보수만 있고 개발이 없기 때문에 당연히 프로젝트 단계에서 맨먼저하는 (우리가 늘 고민하는) ‘요구 사항’을 만들지 않습니다. (여기서 모두들 박수를!)

실제로 많은 오픈 소스 프로젝트에서 요구 사항이란게 존재하지 않죠. 사람들은 일단 가져와 그냥 쓰거나 원하면 직접 ㅏ 고치죠. 진짜 필요하면 원하는 기능을 담은 버그를 제출할 뿐입니다. 이게 들어가는지 좋을지 여부를 사용자와 개발자가 판단할 뿐 입니다. 궁극에는 모든 개발 프로젝트의 원흉인 ‘요구 사항’이 없어지는 순간입니다. 행복한 개발 프로세스의 시작인가요? 흠…

p.s. 세번째 키노트는 Larry Wall과 함께 Perl 커뮤니티를 이끌고 있는 Damian Conway 였는데 이렇게 유쾌하면서 지적인 기조 연설을 처음 입니다.

그의 발표는 뭐랄까 ‘유머와 지적 유희’가 겸비되어 있어서 뭐라고 설명하기가 어렵군요. 우선 앞서 발표한 Mark, Robert와 자신의 친구 Larry Wall을 가지고 노는 희화를 통해 사람들에게 유머를 줍니다. 물론 오픈 소스의 미신이라는 것을 섞어서 풍자해서 말이죠.

한바탕 웃고 나서 자신이 구현한 양자 역학과 일반 상대성 이론을 결합할 수 있는 Perl 모듈을 소개했습니다. 제목이 “Temporally Quaquaversal Virtual Nanomachine Programming in Multiple Topologically Connected Quantum-Relativistic Parallel Timespaces — Made Easy” 인데요. 대략 ‘다중 위상으로 연결된 양자-상대적 평행 시공간에서 일시적 양자우주 가상 나노 머신 프로그래밍- 아주 쉬워요!’ 입니다. 솔직히 진짜 쉽게 풀어냈습니다.

그의 이론은 양자역학의 결론은 반물질(Dark Energy)에서 힌트를 얻어 시간이 반대로 흐를 때 사용할 수 있는 positronic variables 라는 변수를 얻어 내는 module을 만듭니다. (이를 이용하면 정의 없이도 값을 얻어 낼 수 있답니다. 흡…)

그의 발표가 끝나자 사람들이 그의 Geek적이고 학자적인 창의적 아이디어에 우뢰와 같은 기립 박수를 보내더군요. 재미있는 광경이었습니다.

:

[펌]OSCON 둘째날 I - 재미없는 튜토리얼, 재밌는 짤방

ITWeb/스크랩 2008. 7. 25. 10:25
저도 꼭 가보고 싶었던 컨퍼런스 였는데.. 흑..
회사에서 이런거 보내 주면 좋을텐데.. ^^;

늘 윤석찬님의 블로그를 통해서 좋은 정보 잘 보고 있습니다.
감사 드립니다..

ref. http://channy.creation.net/blog/529


오늘 튜토리얼에서 별로 건진게 없습니다. 우선 jQuery를 만든 John Resig의 ‘자바스크립트 라이브러리의 비밀’에서는 그 동안 존 레식이 여러번 강의 한 내용을 재탕(?)하는 수준이었습니다. 아마 존 레식의 강의 파일이나 동영상을 찾아보시는 게 더 낫겠습니다.

Break Time을 통해 ‘세 시간 만에 Open Source 스타트업 만들기’에 들어가보니 사람들의 아이디어를 받아서 간단하게 오픈 소스 프레임웍을 이용해서 프로젝트를 완성하는 수준이더군요. 쩝쩝…

빨리 빠져나와서 Rasmus Lerdorf가 하는 PHP 구조, 확장 유연성 및 보안에 대한 세션에 들어갔습니다. 사실 Rasmus의 발표도 과거 발표를 좀 더 종합한 것인데 다행히 강의 자료를 온라인으로 제공해 주더군요. 잘 몰랐는데 http://talks.php.net에 꽤 많은 발표 자료들이 올라와 있었습니다.. 게다가, 바로 활용할 수 있는 팁들이 많았습니다.

특히, php.ini의 몇 가지 설정을 바꾸고 시스템 콜 부분을 확인해서 병목을 없애거나, inclued 확장으로 include dependence 찾고, Callgrind나 XDebug 같은 디버깅 툴을 이용하는 방법 등이 자세히 나와 있더군요. 구조적인 측면에서 DB 레이어 분리할 때 자신이 사용하는 방법을 잘 설명해 주었습니다. 보안에서는 역시 XSS를 막는 방법 위주로 설명이 되어 있습니다. PHP 개발을 하시는 분이면 참고하시면 도움이 되겠네요.

오후에는 People for Geeks라는 세션에 들어갔는데 6명이 30분씩 어떻게 하면 개발자들이 사람들과 커뮤니케이션을 잘할까 하는 쉽지 않은 질문에 대한 생각을 발표하는 시간이었습니다. Kirrily (GeekEtiquette.com)는 결국 개발자도 사람이니 매너를 지켜야 하고 소프트웨어 개발에서 80/20 법칙, 즉 20%의 중요한 기능을 계속 손봐야 하듯이 남을 존경하고 들어 주는 20% 효과를 얻어야 한다는 다소 뻔한(?) 논리였습니다. 에티켓에 대한 역사를 좀 지루하게 이야기 했습니다만 재밌는 짤방이 있습니다. (When you program open source, you’re programming Communism.)

그 다음 의사 소통 부재에 대한 이야기 였는데요. miscommunication is lying (의사소통 부재는 거짓말과 같다.)라며 개발자들의 의사 소통 역량 없음을 지적했습니다. 뭐 이것도 Please & Thank you 같은 표현을 자주 하고, 인간적인 소통의 적극성을 높여야 한다는 건 다 아는 이야기고 재밌는 짤방 하나로 마무리 합니다. (Tact Template이라고 Please & Thank you를 쓰면서 얼마나 개발자들이 게으른가를 단적으로 보여줍니다.)

그 다음 How to speak Manager라는 세션에서 ‘아! 이제 그만 나가봐야겠다’는 생각이 들었습니다. 간단히 요약하면 상사에게 도망가지말고 말하고, 상사가 무능하면 회사를 바꾸는 게 좋다, 상사 처럼 생각하라, 상사가 멋지게 보이도록 만들어 줘라 뭐 그런 이야기입니다.

대부분 컨퍼런스가 그렇듯이 튜토리얼은 역시 재미가 없군요. 시간도 길고 이미 온라인에서 많이 얻고 있는 정보를 재탕하는 경우가 많으니까요. 사실 자신의 분야가 아닌 곳에 들어가는 게 맞는 것 같은데 그러려니 시간이 아깝다는 생각도 들고 역시 튜토리얼은 컨퍼런스의 계륵인것 같습니다.

:

야후코리아 홈페이지 에러..

ITWeb/스크랩 2008. 7. 23. 22:16
흑...

야후코리아 홈페이지 에러 났내.. 그려..
아무래도 피라미드에서 뭔가 잘못 푸쉬 된듯..
로그인 영역 안나오고.. 인사이드 영역 안나오고 또 LREC 광고 모듈도 안나오고.. 흠..

다시 확인을 해보니 파이어폭스에서는 나오는데 IE7 에서 안나오는 군요..
--> 정정 합니다..
이거 vista + ie7 + google toolbar 이 상태에서 깨지내요..
--> 분석 완료
광고모듈 쪽 문제내요.
소스 코드 까서 확인해 봤는데 FF 에서 잘나오는 코드와 IE 에서 문제가 되는 코드를 비교 하니..
IE 에서는 광고가 이케 떨어졌고.. <!-- SpaceID=0 robot --> 이거 아마 crawling 하는 걸로 잘못 인식 한게 아닐까 싶기도 하고..
FF 에서는 정상적으로 광고 코드 나오내요.

담당자한테 알려으니 고쳐 주시겠쬬.. ㅎㅎ

사용자 삽입 이미지

음냐 daum 은 이메일로 난리고.. naver 는 ddos 공격으로 날리고....
요즘 포털들.. 긴장 풀렸나... 아님 정부에서 하도 지럴을 하니까.. 모르쉬 인가..
:

[펌]세상을 변화시킬 기술들

ITWeb/스크랩 2008. 7. 16. 14:04
아래 막강한 기술에서 제가 해보거나 관심 있어 했던것들은...

3. 소셜네트워크/소셜소프트웨어
4. 클라우드 컴퓨팅/ 클라우드 웹플랫폼
5. 매시업
6. 유저 인터페이스
10. 시맨틱스

흠.. 저도 벌써.. 한 5가지는 관심 및 경험이 있는 거내요.. ^^*
앞으로 기술적으로 뒤쳐지지 않으려면.. 열심히 더 갈고 닦아야 할듯 하내요.. :)

ref. http://www.eetkorea.com/ART_8800534311_480103_NT_2d630d17.HTM?click_from=RSS

가트너에 의하면 소셜 네트워킹 기술들, 웹 매시업, 멀티코어 및 하이브리드 프로세서들, 그리고 클라우드 컴퓨팅은 향후 5년 동안 IT의 지형을 변화시킬 10가지 가장 파괴적인 기술들에 속하는 것들이라고 한다.

파괴적인 기술이란 비즈니스 모델, 프로세스, 수입의 흐름, 산업 역학, 소비자 행동을 포함하여 ‘어떤 일을 하는 받아들여진 방식’에 주요한 변화를 일으키는 기술이다.

가 트너의 분석가 David Cearley 씨는 조직들이 직원들의 협력을 향상시키고 고객들의 커뮤니티 피드백을 이용할 방법을 모색함에 따라 비즈니스 IT 어플리케이션들이 Facebook이나 MySpace 같은 인기있는 소비자 소셜 소프트웨어에서 발견되는 특징들을 따라하기 시작할 것이라고 말했다.

“소셜 소프트웨어는 직원과 고객들의 참여와 피드백을 똑같이 장려하는 플랫폼을 제공한다”고 그는 말했다. “비즈니스를 위해 새로 부가된 가치는 이 피드백을 종합적인 태도들을 반영하는 한 곳으로 모을 수 있게 하며, 이것은 비즈니스 전략을 짜는데 도움이 될 수 있다.”

멀티코어 프로세서들은 소프트웨어로 가능한 것들의 지평을 확대해주지만 싱글 스레드 어플리케이션들은 이들의 파워를 이용할 수 없을 것이라고 Cearley 씨는 말했다. 그러므로 기업들은 멀티코어 시대에 서비스 레벨 요건들을 계속 충족시키도록 개선이 필요한 어플리케이션들을 찾아내기 위해 검사를 수행한다.

가트너는 공중이 이용할 수 있는 소스들로부터 나온 콘텐츠를 믹스한 웹 매시업이 2010년에는 새로운 기업용 어플리케이션을 만드는데 있어서 지배적인 모델(80퍼센트)이 될 것이라고 예측했다.

“매 시업은 쉽고 빠르게 만들어질 수 있기 때문에, 이들은 보통 개발 비용을 끌어들이지 않는 새로운 종류의 단기 어플리케이션 또는 폐기 가능한 어플리케이션들이 생겨날 수 있도록 한다”고 Cearley 씨는 말했다. “정보를 일반 대쉬보드에 합치거나 위치 추적 또는 매핑 소프트웨어를 이용하여 비주얼화하는 능력은 매우 강력하다.”

가트너에 의하면 향후 5년 안에 정보가 OLED, 디지털 종이 및 전광판, 홀로그래피 및 3D 이미징, 스마트 패브릭 같은 새로운 유저 인터페이스들을 통해 나타내어질 수 있을 것이라고 한다.

2010 년이면 장비가 언제 그리고 어떻게 움직이는 지를 감지하기 위해 전자 장비 일부에 3축 가속도계를 추가하는데 1달러 미만이 들게 될 것이다. 이 3축 가속도계는 닌텐도의 Wii 컨트롤러 같은 디바이스를 허용한다. “가속과 자세(기울기)는 무선 같은 기술들과 합쳐져 ‘터치를 통해 명함을 교환하는 것’과 같은 기능들을 수행할 수 있다”고 Cearley 씨는 말했다.

기존의 틀을 넘어서라

Cearley 씨는 CIO(Chief Information Officer)들이 자신들의 일을 “데이터 센터 가동을 유지시키고, 비즈니스 연속성을 계획하며, 사람들에게 보여줄 새로운 기술 장난감들을 찾는 것” 정도로 여긴다면 앞으로 살아 남을 수 없을 것이라고 말한다. 대신, 이들은 앞으로 널리 사용될 기술들을 식별하기 위해서 종래의 제약을 넘어서서 생각해야 한다.

가 트너는 CIO가 새로 떠오르는 추세와 기술들을 평가하기 위하여 공식적인 메커니즘을 세우고, 최고의 스태프로 가상 팀을 구성하며, 이들에게 새로운 아이디어와 혁신들, 특히 컨수머 및 웹 2.0 기술에 의해 유도된 것들을 탐구할 시간을 줄 것을 권한다.

“CIO는 비즈니스에서 기술까지 도랑 역할을 할 필요가 있다. 그는 비즈니스가 확인한 문제들을 풀기 위하여 이러한 기술들을 사용하는 것이 어떻게 가능한 지를 살펴보아야 한다”고 Cearley 씨는 말했다.




:

야후 블로그 랭킹 검색..

ITWeb/스크랩 2008. 7. 15. 10:16
야후코리아에서 블로그 랭킹 검색을 선보였내요.. ^^*
전직장이라 그런지 뭐든 좋은 기능들이 하나씩 추가 되는걸 보면 저도 기분이 좋답니다.

저 역시 회사를 나오기 전까지 관심 있게 봤던 부분이 그리드 컴퓨팅 부분 이였는데..
야후에서는 hadoop 을 가장 잘 쓰고 있는 회사이지요..
저 역시 검색쪽 일을 많이는 못했지만.. 2년 정도 한것 같내요.
검색 업무를 하다 보니.. 역시 재밌더라구요..
알아야 할것도 많고 배워야 할것도 많고.. 야후코리아가 한국에서는 실력발휘를 못하고는 있지만 그 기술적인 부분에서는 역시 라는 생각을 해봅니다..

야후를 6년 다니고 나왔는데.. 아직 그 향수병에서 벗어나지는 못한것 같내요.. ^^;
그 만큼 좋은 회사라는 거겠죠..

앞으로도 야후 화이팅 입니다..

그럼.. 저는 몇등일까요???
http://kr.blog.search.yahoo.com/search/comm?p=jjeong&subtype=CommBlogger&x=27&y=15

블로그명 [총 55 개중 1 - 20]

jjeong 닉네임 : jjeong

jjeong.tistory.comrss | 랭킹 182,633위 정보보기

jjeong♥[박준석.에이시아.가비엔제이] 닉네임 : jjeong

blog.daum.net/jjeongrss | 랭킹 1,053,635위 정보보기

jjeong0909 닉네임 : jjeong0909

blog.daum.net/jjeong0909rss | 랭킹 43,023위 정보보기


상단에 "블로그명" 검색 라디오 버튼을 선택 하고 검색을 하시거나 오른쪽 중간 쯤에 있는 블로그랭킹 검색을 함 해보심 됩니다..

관련 뉴스
- http://itviewpoint.com/64342
- http://itnews.inews24.com/php/news_view.php?g_serial=342680&g_menu=020300&fm=rs
- http://www.eetkorea.com/ART_8800534347_839577_NT_d4f5785e.HTM?click_from=RSS

:

[펌]소프트웨어 테스터와 프로그래머의 화합(和合)의 법칙

ITWeb/스크랩 2008. 7. 9. 08:57
소프트웨어 테스터와 프로그래머.. 흠..
지금까지 개발을 해오면서 내가 만든 소프트웨어나 제품에 대해서 문제점을 지적해 주고 오류를 찾아 주는건 고맙다고 생각 한다.
하지만 오류와 문제점에 대한 지적만 할 뿐 그 과정에 대한 설명 없이 들이대는 분들을 종종 많이 보았다.
아래 글을 읽어 보면 알겠지만 모든 일에는 상호 존중과 이해를 기반하지 않고서는 서로 멱살 잡고 싸우기 일수가 아닐까 싶다.. (상호 존중과 이해 역시 담당자들의 실력이 뒷받침 되지 않는 다면 만들어 지지도 않겠지만.. )

배고픔 ㅡㅡ^

ref. http://www.ibm.com/developerworks/kr/library/dwclm/20080708/?ca=drs-kr

소프트웨어 테스터와 프로그래머의 화합(和合)의 법칙



이영석이영석 stone@sqe.co.kr

SOAP, 웹 서비스 등 XML 기반 기술과 BPM을 통한 프로세스 시스템 신봉자로 소프트웨어 품질에 대한 정통부 GS인증 업무를 수행하는 등 개발자 출신 QA라는 흔치 않은 경력을 가지고 있다. 현재 와이즈스톤(www.wisestone.kr) 대표이며, 소프트웨어 품질관리 교육 및 컨설팅 등을 하고 있다.

2008년 7월 8일



얼마 전 프로젝트 종료 후, 참여원들의 정보와 경험을 교환하는 클로징(closing) 회의 중 이런 얘기가 나왔다. "참여 프로그래머들이 같은 회사 사람들이니 다행이지, 서로 모르는 사이였다면 멱살잡고 싸웠을 겁니다." 모두 한참을 웃었다. 프로젝트에 참여한 프로그래머와 테스터 모두 크게 공감한다는 웃음이었다.

실제로 테스팅에 관한 많은 칼럼과 서적에서 빈번하게 언급되는 이슈가 '어떻게 서로 커뮤니케이션을 할 것인가'라는 의사소통에 관한 주제다. 그만큼 프로그래머와 테스터가 함께 참여하는 개발 프로젝트에서 의사소통 문제는 빈번하게 일어난다.

필자도 이전에 본 컬럼을 통해 이러한 문제에 대한 해결 방안의 하나로 BTS(Bug Tracking System) 같은 시스템 도입을 제안한 적이 있다. 서로 얼굴을 맞대고 문제를 논의하는 것보다는 시스템을 통해 감정을 배제한 의사소통이 효율적이라는 이유에서였다.

이번에는 평화로운(?) 의사소통을 위해 테스터와 프로그래머가 서로를 이해하는 데 도움이 될만한 '소프트웨어 테스팅 법칙 293가지'[1]라는 책에 소개된 몇 가지 재미있는 이야기를 소개하고자 한다.

테스터 관점의 이야기이지만, 프로그래머들도 자신들을 이해하고자 하는 테스터의 노력을 이해하고, 테스터의 눈으로 투영되는 자신들의 모습을 되돌아보는 기회가 되기를 바란다. 서로를 이해하고자 하는 노력과 그 결실인 화합이야말로, 성공적인 프로젝트의 가장 기본 전제이며 왕도(王道)이기 때문이다.


법칙 1. 프로그래머들의 사고방식을 이해하라

프로그래머들은 대부분 전문적이다
프로그래머는 자신이 개발해야 하는 모듈과 컴포넌트에 집중하며, 맡은 업무에 대해서는 적어도 팀 내 최고의 전문가라 할 수 있다.
테스터의 업무적 관점은 다르다. 테스터는 테스트할 시스템에 대해 다방면의 정보를 알고 있어야 하고, 각 모듈의 전체적인 조화에 집중한다.

프로그래머는 시스템에 적용된 자신의 논리에 집중한다
프로그래머는 자신이 만든 모듈과 다른 프로그래머가 만든 모듈의 연관성에 대해 이해하고 있다. 또한 발생할 수 있는 오류 처리에 대한 방안도 준비한다. 이러한 이유로 테스터가 오류를 보고할 때 프로그래머들은 종종 그러한 오류가 발생한다는 사실을 믿지 못하고 의심한다. 그러므로 테스터는 프로그래머가 코딩 시 기획했던 데이터 처리의 논리를 염두에 두고 철저하게 증거를 수집해 결함을 찾아야 한다.

프로그래밍은 복잡한 행위다
얽히고설킨 복잡한 구조의 프로그래밍 작업은 집중이 필요로 한 일이다. 이러한 업무 중에 다른 신경 쓰이는 일이 생기는 상황이 유쾌하지는 않을 것이다. 테스터에게는 이러한 프로그래밍 업무에 대한 이해가 필요하다(물론 테스팅이라는 업무 역시 장시간 집중이 필요한 업무라는 것을 프로그래머도 알아야 할 것이다).

프로그래머는 종종 어려운 상황을 감수한다
프로그래머들은 잦은 요구사항 변화에 따른 코드 변경 요구, 버그에 대한 수정 요구 등 작업 집중에 방해되는 환경 속에서 업무를 수행한다.

많은 프로그래머들은 일상적인 반복 업무를 싫어하며, 주어진 반복 업무를 도구나 스크립트를 작성하여 자동화한다
이러한 업무 성향으로 인해 프로그래머들은 테스터들의 매뉴얼한 반복 작업을 비효율적이고 최적화되지 못한 작업으로 이해하기도 한다. 만약 작은 코드 개발에 참여해 프로그래머가 되어 볼 수 있는 기회를 갖는다면, 개발자들을 이해하는 데 좋은 경험이 될 것이다.



위로


법칙 2. 프로그래머와 신뢰를 쌓아라

테스트할 프로그램을 작성하는 프로그래머와 불필요한 적대 관계를 만들 이유가 없다. 프로그래머들과 함께 개발 계획, 요구사항 분석, 초기 프로토타입 등을 공유할 수 있다면 개발자들을 이해하는 데 도움이 될 것이다.

또한 테스터는 프로그래머들이 자신이 이미 아는 내용에 대해 듣고 싶어하는 것이 아니라는 것을 알아야 한다. 가령 예를 들어 개발 초기에 아직 작성하지 않은 오류 처리 방안이나 개발해야 하는 기능에 대해 듣고자 하는 것이 아니라는 것이다. 이러한 부분은 프로그래머가 몰라서 안 되어 있는 것이 아니라 아직 작업을 하지 않은 것뿐이다. 프로그래머가 각 상황에 따라 무엇을 듣고자 하는지에 대한 이해 역시 중요하다.


법칙 3. 서비스를 제공하라

다음 몇 가지 서비스를 제공하는 것으로 둘 사이의 신뢰에 큰 도움이 될 것이다.

  • 서드파티 컴포넌트를 테스트하라. 테스트 결과를 공유함으로써 프로그래머들은 제품에 해당 컴포넌트를 사용할 것인지 여부를 결정할 수 있으며, 또한 어떻게 사용해야 하는지에 대한 정보를 얻을 수 있다.
  • 프로그래머가 스스로 테스트할 수 있는 테스트 환경을 지원하라.
  • 자신이 개발한 모듈을 테스트하기 위해 프로그래머가 부여 받은 테스트 지원 요구사항에 대해 검토하라. 프로그래머들은 애매모호한 요구사항 때문에 난처한 상황에 처하는 경우가 많으므로 테스터가 도와준다면 기뻐할 것이다.

테스팅 업무는 서비스를 제공하는 성향의 업무이므로 테스터가 프로그래머가 필요로 하는 업무에 대해 적극적으로 서비스를 제공한다면 둘 간의 관계는 대립이 아닌 화합의 관계가 될 것이다.


법칙 4. 성실하고 능력을 갖춰야 존중을 받는다

테스터는 고객의 대변자다. 즉 테스터의 궁극적인 업무는 사용자가 겪을 문제점을 보고하는 일이다. 하지만 아무리 좋은 의도를 담은 행동이라도 잘못된 부분을 지적하는 결함에 대한 보고는 유쾌하다고 하기 어렵다. 훌륭한 보고를 위해 다음과 같은 사항을 고려해야 한다.

문제점을 명확하게 보고하라
불필요한 과정과 정보는 생략하고, 버그가 발생되는 운영 절차와 버그에 대한 현상만을 명확하게 기술해야 한다. 프로그래머가 이해하기 쉽고, 버그 발생 과정을 따라 해보기 쉽게 보고해야 한다. 프로그래머가 간결하고 명확한 보고서를 통해 시간을 아낄 수 있다면, 테스터의 시간도 소중하게 생각할 것이다.

제품에서 실제로 수행한 동작을 판단 기준으로 삼는다
프로그래머는 누구보다도 더 프로그램 내부를 잘 안다. 그러니 테스터는 직접 봤던 것에 대해서만 이야기하면 된다. 어떤 점이 문제를 일으켰는지에 대한 추측으로 시간을 낭비할 필요가 없다.

나쁜 소식은 직접 전달하라
프로그래머가 문제 상황을 인식하고 대처할 시간을 준 다음, 상급자에게 보고하라. 또한 이 문제를 상급자에게 보고할 것이라는 것을 개발자에게 이야기해 주어야 한다.

모르는 것을 아는 체 하지 말라
어설픈 추측이 문제 해결을 방해하는 장애물이 될 수 있다.

버그 리포트를 과대 포장하지 않는다
버그 보고는 사실 그대로를 정확하게 전달해야 한다. 발견한 버그를 과대 포장하지도, 과소 평가하지도 말아야 한다. 또 중요한 버그를 찾았다고 그것을 뽐내도 안 된다. 테스터와 프로그래머가 한배를 탄 운명 공동체라는 것을 명심해야 한다.



위로


법칙 5. 사람이 아닌 작업에 집중하라

버그를 발견하면 '버그'를 보고하라. 프로그래머 아무개가 잘못했다는 식으로 보고해서는 안 된다. 문제가 있는 프로그래머를 보고하는 것이 자신의 업무라고 생각한다면, 모든 프로그래머는 여러분과 정보를 공유하지 않을 것이고, 여러분을 피하려고 할 것이다. 이렇게 된다면 신뢰는 깨진다. 테스터의 업무는 잘못하는 프로그래머를 찾는 것이 아니라, 버그를 찾는 것이다.


법칙 6. 프로그래머들은 자신의 일에 대해 이야기하는 것을 좋아한다. 궁금한 점이 있으면 직접 물어보라

프로그래머와 이야기를 통해 정보를 얻기가 어렵다고 말하는 테스터가 많다. 하지만 프로그래머들이 다루는 설계 문서를 이해하고 그것에 관해 이야기를 시작해보자. 가능하면 코드도 살펴보자. 프로그래머 관점에서 이해하고 그 용어를 가지고 개발자들의 화법으로 이야기하고자 한다면 프로그래머들이 얼마나 자기 일에 대해 이야기하기를 좋아하는지 알게 될 것이다.

이런 대화는 시스템을 구축하는 사람들의 마음속에 있는 전제조건을 알아내는 데 도움이 된다. 또한 시스템을 오동작하게 하는 방식을 찾아낼 수 있다. 테스터가 C++나 자바 등 개발 언어를 알고 있다면 좀 더 도움이 될 것이다. 프로그램이 멀티스레드로 동작한다면 스레드가 어떤 것인지 이해하는 것은 중요한 일이다.

어떻게 하면 제품에서 오류가 발생하도록 할 수 있는지에 대해 고민하는 것이 테스터의 업무라 생각할 수 있다. 그러나 팀의 일원으로 지금 만들고 있는 제품의 진정한 가치를 이해해야 한다.


법칙 7. 프로그래머는 테스트를 도와주고 싶어한다

대부분의 프로그래머는 자기가 작성한 프로그램을 테스트하고 싶어한다. 개발자들은 프로그램을 작성하는 중에 자신이 실수했을 수도 있다는 사실을 인정하며, 이러한 실수를 발견해 주기를 기대하고 있다.

테스터는 프로그래머에게 테스트를 쉽게 해주는 테스트 용이성(testability)을 요구하지만 쉽게 목적을 이루지 못한다. 테스트 용이성 확보를 위한 요청에는 다음 핵심 사항이 있어야 한다.

  1. 프로그래머의 언어로 이야기하라.
  2. 빨리 요청하라.
  3. 현실적이어야 한다.

테스터의 요청이 어느 모듈의 어떤 인터페이스를 원하는지 구체적이라면 프로그래머는 훨씬 쉽게 테스터의 요청을 이해할 것이다. 또한 프로젝트 초기에 테스팅에 관한 요청이라면 개발 일정에 그러한 요구사항을 고려하여 일정을 계획할 수 있어 프로그래머의 업무 진행에 대한 부담이 줄어든다(빠듯한 개발 일정 중간에 테스팅을 위한 지원 요청은 프로그래머에게 정말 감당하기 힘든 스트레스가 된다). 테스트 지원을 위한 코드 추가가 제품을 만들기 위한 프로그래밍보다 부담이 된다면 그러한 요구 또한 옳지 못하다.

많은 테스터들이 프로그래머가 항상 핑계를 댄다고 말한다. '테스트를 위해 포함되는 그 코드가 소프트웨어 보안에 문제를 일으킬 것 같아요', '성능 저해 요인이 될 것입니다' 그러나 이러한 이야기는 오히려 개발자들이 테스트를 위한 코드에 관심이 많다는 의미일 수 있다.

테스터는 프로그래머로 하여금 테스터를 도와주는 것이 궁극적으로 자신에게 도움이 된다는 사실을 인식시키는 것이 무엇보다 중요하다!



위로


후기

대다수의 프로그래머들에게 테스터를 존중하는 마음이 부족한 것이 사실이다. 테스터들을 자신들의 생산품인 프로그램의 '옥의 티'와 같은 흠을 찾아내 닦아주는 흡사 도우미(maid) 정도로 생각한다.

그렇다면 테스터는 이러한 인식을 가진 프로그래머에 대해 어떤 생각을 가지겠는가. 사람 마음은 인지상정(人之常情)이라 똑같지 않을까? 자신을 존중하지 않는 상대에게 좋은 감정을 갖기는 어려울 것이다. 어쩌면 테스터들 눈에는 결점 가득한 프로그램을 만든 프로그래머가 그 코드처럼 결점투성이의 부족한 사람으로 보일 수도 있을 것이다.

원론적인 결론이지만 서로 업무를 존중하고, 개인적인 친분을 위해 노력하는 것이 원만한 상호 관계를 유지하는 방법이라 할 수 있을 것이다. 성서에도 있지 않은가. 사람이 목숨을 유지하기 위해서는 눈, 코, 입, 손, 발 중 하나만 있어서 되는 것이 아니라, 중요한 것은 모두의 화합이라고.



위로


[1] Cem Kaner, James Bach, Bret Pettichord, 소프트웨어 테스팅 법칙 293가지(LESSON LEARNED IN SOFTWARE TESTING: A CONTEXT-DRIVEN APPROACH), 정보문화사, 2004


:

[펌] 리눅스 파일 시스템

ITWeb/스크랩 2008. 6. 30. 14:22
ref. http://forum.falinux.com/zbxe/?mid=lecture_tip&page=2&document_srl=406068

디렉토리 명 설    명
/ 루트 디렉토리
/bin 가장 필수적인 실행명령
/boot 커널,LILO 등 부팅에 관련된 파일
/dev 장치파일 모음
/etc 시스템 전체 설정파일
/home 사용자의 홈디렉토리
/lib C 라이브러리 등 가장 필수적인 공유 라이브러리
/mnt 임시 마운트용 디렉토리
/proc 시스템 정보를 위한 가상적인 디렉토리
/root 루트 사용자의 홈 디렉토리
/sbin 시스템 관리용 실행파일
/tmp 임시 파일 생성용 디렉토리
/usr 어플리케이션이 설치되는 디렉토리
/var 시스템 운영중 생성되는 각종 임시 파일

디렉토리 명 설    명
/dev/fd0 프로피 디스크 드라이브
/dev/hda 첫 번째 슬롯 마스터 IDE 하드 디스크 드라이브
/dev/hdb 첫 번째 슬롯 슬레이브 IDE 하드 디스크 드라이브
/dev/hdc 두 번째 슬롯 마스터 IDE 하드 디스크 드라이브
/dev/hdd 두 번째 슬롯 슬레이브 IDE 하드 디스크 드라이브
/dev/sda 첫 번째 SCSI 하드 디스크 드라이브
/dev/sdb 두 번째 SCSI 하드 디스크 드라이브
/dev/st0 첫 번째 SCSI 테이프 드라이브
/dev/st1 두 번째 SCSI 테이프 드라이브
/dev/scd0 첫 번째 SCSI CD 롬 드라이브
/dev/scd1 두 번째 SCSI CD 롬 드라이브
/dev/cdrom IDE CD 롬 드라이브
/dev/mouse 마우스
/dev/ttyS0 COM 1 시리얼 포트
/dev/ttyS1 COM 2 시리얼 포트
/dev/lp0 첫 번째 병렬 포트
/dev/lp1 두 번째 병렬 포트
/dev/console 시스템의 콘솔 장치입니다.
/dev/null

아무것도 없는 장치(?) 하수구라고 생각하시면 되겠습니다. 예로 어떤 출력을 해야 하는데, 그 출력을 그냥 버리고 싶다면 출력 방향을 이 장치로 설정하면 그냥 하수구로 버리듯이 모든 출력이 사라집니다.

이 장치는 프로그램에서 열기 명령을 사용하면 항상 OK가 됩니다. 그러므로 프로그램에서도 디버깅에 상용되며, 셀 명령 실행에서 보기 싫은 출력 문자열을 없앨 때에도 사용됩니다.

/dev/zero /dev/null처럼 가상 파일이면서 이 장치에 쓰기를 하면 출력이 사라지지만 특정한 길이의 초기화된 더미 파일을 임시 스왑 파일을 만들 때 사용한다고 합니다. 아직은 도대체 뭔 소리인지 잘 모르겠습니다. --;

cat ****   설    명
/proc/1/status

첫번째 프로세스의 상태를 출력합니다.

/proc 아래에 프로세스 별로 번호에 맟춘 디렉토리가 있으며, 각 디렉토리에 프로세스별 정보가 있습니다. 예로,  /proc/1

/proc/cpuinfo cpu 에 대한 타입, 제조사, 모델, 성능 등에 관한 정보가 출력
/proc/devices 현재 동작 중인 디바이스 드라이버 목록
/proc/dma 현재 어떤 DMA 채널을 사용 중인지를 출력
/proc/filesystems 커널에 설정되어 있는 파일 시스템 목록
/proc/interrupts 어떤 인터럽트가 사용 중이고 각각의 인터럽트가 얼마나 사용되었는지를 출력
/proc/ioports 현재 어떤 I/O 포트가 사용 중인지를 출력
/proc/kcore 현재 시스템에서 사용중인 메로리의 실제 이미지로 실제 메모리의 내용을 모두 가진 것처럼 보이지만 프로그램이 필요로 하는 부분의 이미지만을 필요할 때 만들어 제공
/proc/kmsg 커널에 의해서 출력되는 메시지들을 저장하고 있는 파일
/proc/loadavg 현재 시스템의 평균 부하량(Load Average)에 대한 정보를 출력
/proc/ksyms 시스템 커널이 사용하고 있는 심볼들에 대한 정보를 저장하고 있는 파일
/proc/meminfo 사용중인 메모리의 사용량을 출력. 가상 메모리에 대한 정보도 얻을 수 있습니다.
/proc/self /proc 를 억세스하는 프로그램의 프로세스 디렉토리에 대한 심볼릭 링크로 두개의 프로세스가 /proc에 접근하면 각각은 서로 다른 링크를 가지게 됩니다. 이것은 주로 프로그램이 자신의 프로세스 디렉토리에 쉽게 접근할 수 있도록 해줍니다.
/proc/stat 시스템의 현재 상태에 대한 다양한 정보를 저장하고 있는 파일
/proc/uptime 시스템이 얼마나 오래 동작했는지에 대한 정보를 저장하고 있는 파일
/proc/version 시스템이 현재 사용중인 커널 버전에 대한 정보를 저장하고 있는 파일

프로그램  설    명
cat 파일 내용을 출력
chgrp

파일의 그룹 속성 변경

chmod 파일의 접근 권한 변경
chown 파일의 소유자 변경
cp 파일 복사
cut 특정 필드를 파일 밖으로 복사
date  현재 날짜 출력
df 파일 시스템별 용량 출력
dmesg

부팅 메시지 출력

grep 파일 안의 특정 패턴을 검색

gupzip
gzip

파일 압축
hostname 컴퓨터 이름 출력
kill 프로세스 죽이기
link 링크 만들기
ls 파일 목록 출력
mkdir 디렉토리 만들기
mount 장치를 시스템에 연결
mv 파일 이동/파일 이름 변경
netstat 현재 연결된 네트워크에 대한 모든 정보
ping 상대 P.C. 가 네트워크에 연결되어 있는지 확인
ps 실행 중인 프로세스 목록
pwd 현재 작업 디렉토리 출력
rm 파일 삭제
rmdir 디렉토리 삭제
rpm rpm 관리자
sleep 초 단위 대기
su 사용자 변경
tar 여러 개의 파일을 묶거나 풀기
touch 크기가 0인 파일을 만들거나 파일의 날짜/시간을 변경
umount mount 해제
unlink link 파일 제거
usleep 1/1,000,000초 단위로 대기
vi vi 에디터

프로그램  설    명
clock 현재의 날짜와 시간을 출력
fdisk

파티션을 새로 생성하거나 삭제

findfs 라벨에 해당되는 파티션 정보 구하기
fixfiles 파일과 관련하여 많은 거부 상황이 발생할 때 사용
grub grub 부팅 관리자 관련 프로그램
grub-install
grub-md5-crypt
grub-terminfo
halt 시스템 종료
ifconfig 네트워크 설정
ifdown 네트워크 종료
ifup

네트워크 시작

*** 네트워크 설정 상태를 변경하셨다면 ifdown 과 ifup으로 네트워크를 다시
*** 시작하실 수 있으나 /etc/init.d/network restart 로 한버에 재 시작할 수 있습니다.

lilo lilo 부팅 관리자 프로그램
mkfs 하드 디스크 파티션을 리눅스 파일 시스템
poweroff halt 와 같이 시스템 종료
reboot 시스템 리부팅

내  용 설    명
/etc/rc.d

시스템의 부팅과 시스템 실행 레벨 변경시에 실행되는 스크립트들이 저장되어 있는 디렉토리로 리눅스의 6가지 실행 레벨로 각각의 해당 디렉토리가 있습니다.

/etc/shadow 파일에서 패스워드 부분만을 따로 저장하는 파일. 이 파일에 패스워드는 암호화 되어 셰도우 패스워드 형태로 저장되어 있으며 시스템 관리자만이 접근할 수 있기 때문에 크래킹 등에 대한 피해를 줄임.
/etc/group 시스템의 그룹에 대한 정보를 저장하고 있는 파일
/etc/inittab init를 설정하는 파일

/etc/issue,
/etc/issue.net

getty 에 의해서 로그인을 위한 프롬프트가 뜨기 전에 출력되는 메시지를 설정하는 파일. 리눅스 시스템으로 접속할 경우 가장 처음으로 볼 수 있는 메시지로 보통 시스템에 대한 설명과 각종 환영 메시지를 전달하기 위해서 사용됩니다. issue 파일의 내용은 보통 시스템의 터미널에서 볼 수 있으며 /etc/issue.net 파일의 내용은 리모트상에서 시스템으로 접속할 경우 볼 수 있습니다.

/etc/motd 'Message of the day'의 약자로 시스템으로의 접속에 성공할 경우 쉘이 뜨기 전에 출력되는 메세지를 설정하는 파일
/etc/profile,
/etc/csh.login,
/etc/csh.cshrc
시스템이 시작될 때 사용자가 로그인을 할 때 본쉘이나 C쉘에 의해서 실행되는 스크립트 파일. 일반적으로 사용자들에 대한 기본 환경 설정에 사용.
/etc/securetty 시스템 관리자가 시스템에 로그인할 수 있는 안전한 터미널에 대한 정보가 저장. 일반적으로 가상 콘솔이 설정되어 있으며 네트워크를 통해 시스템으로 침입해 시스템 관리자의 권한을 획득하는 크랙킹을 막기 위해서 사용합니다.
/ete/shell 시 스템에서 안정적으로 사용할 수 있는 쉘에 대한 정보를 저장하고 있는 파일. 만약 chsh명령을 사용해 사용중인 쉘을 바꾸려면 이 파일에 저장되어 있는 쉘중에 선택해야 합니다. 또한 ftp데몬의 경우 사용자의 쉘을 검사하여 /etc/shell에 저장되어 있지 않은 쉘을 사용한다면 로그인을 허용하지 않습니다.

내  용 설    명
/usr/bin 리눅스 시스템에서 사용되는 각종 프로그램들이 저장되어 있으며 /bin 디텍토리에 없는 다양한 실행 파일들이 저장되어 있는 디렉토리
/usr/X11R6 X 윈도우 시스템에 사용되는 모든 파일들이 이 디렉토리 안에 저장되며 X 윈도우 시스템의 개발과 설치를 좀더 쉽게 하기 위해서 전체 시스템 디렉토리 구조에 통합되지 않고 독자적인 구조
/usr/etc /etc 디렉토리에는 각종 환경 설정 파일들이 있듯이 이곳에도 여러 가지 시스템 환경 설정 파일들이 저장되어 있습니다. /usr/etc의 파일들은 /etc디렉토리 안의 파일들과 달리 반드시 필요한 파일들은 아닙니다.
/usr/sbin 시스템 관리자를 위한 명령어들이 저장되는 디렉토리이며 명령어들은 루트 파일 시스템에는 필요가 없는 서버 프로그램들이 저장됩니다.
/usr/include C 라이브러리 및 각종 추가 라이브러리 헤더 파일
/usr/lib /lib 에 들어 있는 라이브러리를 제외한 라이브러리로 /usr/bin의 실행 파일의 동적 링크된 라이브러리가 들어 있습니다.
/usr/local 시스템 관리자에 의해서 따로 설치되는 프로그램들을 모아 놓은 곳으로 시스템에 관련된 프로그램이 아닌 관리자가 소스를 가져다가 컴파일하여 설치한 파일이 저장되는 곳입니다.
/usr/man man페이지의 실제 내용들이 저장되어 있는 디렉토리. man1, man2, man3, 등과 같이 여러개의 디렉토리들로 나누어져 있으며, man1 디렉토리는 섹션 1의 man 페이지 소스를 위한 디렉토리가 됩니다.
/usr/src 시스템에서 사용하는 각종 프로그램들의 컴파일되지 않은 소스 파일들이 저장되어 있다./usr/src/linux 디렉토리가 리눅스의 커널소스를 저장하고 있는 디렉토리입니다.
/usr/X386 /usr/X11R6 디렉토리와 유사한 티렉토리로 X11 Release 5를 위한 디렉토리
/usr/info GNU info문서들을 저장하고 있는 디렉토리
/usr/doc 각종 문서들이 저장되어 있는 디렉토리
/lib

일반적인 리눅스 시스템에서 사용하는 공용 라이브러리 파일들이 위치한 디렉토리입니다.
/lib/modules 디렉토리에는 커널로 로딩 사능한 커널 모듈들이 저장되어 있습니다.


내  용 설    명
/var/cache 포멧된 메뉴얼 페이지들이 잠시 대기(Cache)하기 위한 디렉토리
/var/lib 시스테이 동작하면서 계속 수정되고 변경되는 파일들을 위한 디렉토리
/var/local /usr/local 디렉토리에 설치된 프로그램들의 각종 데이터들이 저장되는 디렉토리
/var/lock 잠 금 파일들이 저장되는 디렉토리로 프로그램들이 특정한 장치나 파일들을 프로그램 자신이 독점적으로 사용하려 할 때 /var/lock 디렉토리에 잠금 파일을 만들어 사용하게 됩니다. 그렇기 때문에 다른 프로그램들은 장치나 파일을 사용하기 전에 우선 이 디렉토리의 내용을 조사하여 해당 장치나 파일들이 사용중인지 확인합니다.
/var/log 프로그램들의 로그 파일을 저장하는 디렉토리
/var/log/boot.log 부팅시 시작된 데몬들에 대한 정보
/var/log/cron 크론 메시지
/var/log/dmesg 부팅 시 컴퓨터 초기화 부분의 메시지가 기록되며 마직 부팅 메시지를 담습니다.
/var/log/secure 서비스를 받기 위하여 서버에 접속하는 모든 기록이 저장
/var/log/spooler 메일 및 뉴스 로그 파일
/var/log/statistics 센드 메일에서 사용하는 로그 파일
/var/log/wtmp 로그인한 사람의 정보를 가지고 있는 데이터 파일. 시스템을 사용하고 있는 사람의 정보를 가지고 있습니다.
/var/log/lastlog 마지막에 로그인한 사람에 대한 정보
/var/log/messages 시스템의 이상 유무에 대한 로그 파일로 시스템의 이상 유무를 파악하는데 사용
/var/log/xferlog ftp 억세스 로그 파일
/var/log/htmlaccess.log 아파치 웹 억세스 로그 파일. rpm으로 설치 시 여기에 억세스 로고가 쌓이며 /var/log/httpd/와 더블어 아파치와 관련된 로그 파일
/var/log/maillog 센드 메일의 로그 파일. 사용자가 메일 관련하여 접속할 경우 기록
/var/run 시스템의 현재 정보들을 저장하고 있는 디렉토리. /var/run/xinetd.pid 파일의 경우 현재 사용중인 xinetd 데몬의 프로세스 번호를 저장
/var/spool 메 일이나 뉴스, 프린터 큐 등고 같은 시스템상에서 대기 상태에 있는 작업들을 위한 디렉토리. 각각의 대기 작업들은 모두 /var/spool 아래 고유의 디렉토리에 위치합니다. 예를 들어 시스템의 계정 사용자들의 메일은 /var/spool/mail 에 저장됩니다.
/var/tmp /tmp에 저장된 임시 파일들중에 오래 보관되어야 할 임시 파일들이 저장되는 디렉토리
/var/log/netconf.log netconf 명령어 수행에 대한 로그 파일

:

[펌]RAID

ITWeb/스크랩 2008. 6. 30. 11:02
ref. http://ko.wikipedia.org/wiki/RAID

RAID

위키백과 ― 우리 모두의 백과사전.

RAID(Redundant Array of Inexpensive Disks)는 여러 개의 하드 디스크에 일부 중복된 데이터를 나눠서 저장하는 기술이다. 데이터를 나누는 다양한 방법이 존재하며, 이 방법들을 레벨이라 하는데, 레벨에 따라 저장장치의 신뢰성을 높이거나 전체적인 성능을 향상시키는 등의 다양한 목적을 만족시킬 수 있다.

최초에 제안되었을 때는 다섯가지의 레벨이 존재했는데, 이후에 중첩 레벨을 비롯한 여러 가지 다른 레벨들이 추가되었다.

RAID는 여러 개의 디스크를 하나로 묶어 하나의 논리적 디스크로 작동하게 하는데, 하드웨어적인 방법과 소프트웨어적인 방법이 있다. 하드웨어적인 방법은 운영체제에 이 디스크가 하나의 디스크처럼 보이게 한다. 소프트웨어적인 방법은 주로 운영체제 안에서 구현되며, 사용자에게 디스크를 하나의 디스크처럼 보이게 한다.

[편집] 표준 레이드 레벨

흔히 쓰이는 레이드 레벨을 빠르게 간추리면 다음과 같다:

RAID 레벨 0
RAID 레벨 0
RAID 0
패리티(오류 검출 기능)가 없는 스트리핑된 세트 (적어도 2 개의 디스크). 개선된 성능에 추가적인 기억 장치를 제공하는 게 장점이지만 실패할 경우 자료의 안전을 보장할 수 없다. 디스크에서 실패가 일어나면 배열을 파괴하게 되는데, 이러한 파괴는 디스크를 많이 장착할수록 가능성이 더 크다. 하나의 단일 디스크 실패는 배열을 완전히 파괴한다. 왜냐하면 데이터가 레이드 0으로 쓰여질 때, 데이터는 여러 조각으로 나뉘기 때문이다. 조각의 수는 드라이브 안의 디스크 수와 일치한다. 조각들은 각 디스크에 동시적으로 같은 섹터 위에 기록된다. 완전한 데이터 덩어리의 작은 토막들이 병렬로 드라이브를 읽어 낼 수 있게 해 주며, 이러한 종류의 배열은 넓은 대역너비를 제공한다. 그러나 디스크들의 한 섹터가 실패할 때는 모든 다른 디스크 위의 일치하는 섹터가 사용 불능으로 표시된다. 왜냐하면 데이터의 일부가 손상된 것은 아니기 때문이다. 레이드 0은 오류 검출 기능을 제공하지 않기 때문에 어떠한 오류도 복구하지 못한다. 배열에 디스크를 더 많이 넣으면 더 높은 대역을 사용할 수 있겠지만 데이터 손실의 큰 위험이 도사리게 된다.
RAID 1
패리티(오류 검출 기능)가 없는 미러링된 세트 (적어도 2 개의 디스크). 디스크 오류와 단일 디스크 실패에 대비하여 실패 방지 기능이 제공된다. 분할 탐색을 지원하는 다중 스레드를 지원하는 운영 체제를 사용할 때 읽기 성능이 향상된다. 다만, 쓰기를 시도할 때에는 약간의 성능 저하가 뒤따른다. 배열은 적어도 하나의 드라이브가 기능하는 한 계속 동작한다.
RAID 3RAID 4
패리티가 단순 제공되는(dedicated) 스트리핑된 세트 (적어도 3 개의 디스크).
RAID 5
패리티가 배분되는(distributed) 스트리핑된 세트 (적어도 3 개의 디스크).
RAID 6
패리티가 배분되는(distributed) 스트리핑된 세트 (적어도 4 개의 디스크).
:

[펌]DDD(Domain Driven Design) 도메인 주도 개발

ITWeb/스크랩 2008. 6. 29. 00:04
ref. http://www.zdnet.co.kr/builder/dev/web/0,39031700,39170212,00.htm

[DDD ①] 도메인 주도 개발

안영회((주)ITwise 컨설팅 컨설턴트)   2008/06/28
에 릭 에반스의 DDD(Domain-Driven Design)에서 가장 기억하고 싶은 내용은 ‘하나의 팀에서 하나의 언어로’라는 부분이다. 필자는 경험을 통해 개발(Development)을 끌고 가는 중심에는 해당 업무 즉, 도메인 프로그램 개발의 대상이 되는 업무 영역이 있다는 것을 알게 되었다. 결국, 이 묵직하게 자리하는 것이 시스템 개발의 성패를 좌우하게 된다는 점 배우게 되었다. 이 글에서는 이런 문제에 대한 완벽한 해답을 제시하기 보다는 현실적인 해결책에 대하여 이야기하고자 한다.

‘화성에서 온 남자 금성에서 온 여자’라는 유명한 책이 있다. 이 책에서는 남자와 여자가 본래는 서로 다른 별인 화성과 금성에서 살았기 때문에 애초에 서로 다른 존재이며, 서로 다른 가치관과 생각을 가지고 있었다고 이야기한다. 그런데, 이들이 지구로 옮겨오면서 자신들이 서로 다른 존재였다는 사실을 잊게 되면서 갈등이 생겨나기 시작했다는 내용을 담고 있다.

그런데 이런 갈등은 비단 남녀 사이에만 존재하는 것이 아니다. 프로젝트에서도 마치 ‘화성에서 온 개발자 금성에서 온 고객’이라는 말로 비유할 만한 상황이 벌어진다. XP(Extreme Programming)에서 고객이 개발팀의 일원이 되어야 한다고 하는 말은 매우 공감할만한 이야기다. 밥도 같이 먹고 지속적으로 함께 일하다 보면 화성인과 금성인의 격차가 줄어들지도 모르는 탓이다.

  화성에서 온 개발자 금성에서 온 고객

하지만, 경험 많은 개발자(업무 분석가를 포함하여 시스템 개발에 종사하는 소프트웨어 엔지니어를 통칭하는 말)들은 단번에 비현실적이라고 말할 것이다. 업무분석가 역할을 해본 개발자라면 최종 사용자가 될 협업 담당자와 만나는 기회가 충분하지 않다는 사실을 잘 알고 있다.

그래서 복잡한 업무의 경우에는 고객이 아닌 해당 업무분야의 전문가를 포함시키는 경우가 일반적이다. 군 프로젝트에 가면 종종 전역한 장교들을 볼 수가 있고, 금융 프로젝트에서는 해당 업무에 정통한 사람들이 업무 분석가로 활동한다.

어느 정도 고객을 대신할 수 있는 업무 전문가가 있다고 문제가 시원하게 해결되는 것은 아니다. 외주 개발이 보편화된 현실을 감안하면, 서로 다른 행성(도메인)에 살다가 만나게 되는 화성인(개발자)과 금성인(고객)은 근본적으로 차이가 있다.

매일 프로그램의 성능을 고민하고, 새로운 기술 습득으로 일상을 보내던 개발자가 수십 년간 발전해온 산업을 단기간에 이해하는 것은 불가능하다. 반대로 고객의 경우에는 모든 일을 기술적으로 해석하고 사고하는 개발자를 이해하기 어려울 것이다.

이러한 상황을 더욱 악화시키는 것은 서로가 다른 언어를 쓴다는 사실이다. 의사소통을 통해 서로를 이해하기 위해서는 동일한 언어를 사용하는 것은 필수적인 사항인데 말이다.

서로 다른 말을 사용하는 고객과 개발자
개발자가 새로운 분야의 프로젝트를 만나면 도무지 알 수 없는 용어들을 접하게 된다. 특수성이 심한 업무는 고객의 업무 규정이나 보고서를 아무리 읽어도 해독이 불가능한 경우도 있다. 한 페이지의 절반가량을 차지하는 단어가 처음 보는 영문 약어로 기술되어 있는 문서를 상상해보라.

그럼 고객의 입장에서 생각해 보면 어떨까. 바쁜 시간에 불러내서 초보적인 질문에 답변을 해주고 있었다. 그러다가 앞으로 만들어질 프로그램에 궁금한 마음이 생겨, 개발자에게 물어보았더니 도무지 알아들을 수 없는 말만 한다.

이러한 어려움에도 불구하고 고객과 개발자가 잘 소통해야만 원하는 결과를 만들 수 있다. 반대로 이들이 서로 소통에 실패한다면, 원하는 결과는 나오지 않고 서로 잘못된 일만 반목하게 될 것이다. 고객과 개발자가 서로를 맹렬하게 비난하는 현장에 필자 스스로도 참여했던 아픈 경험이 있다.

개발자 사이에서도 각자의 언어가 있다
고객과 개발자 사이에서만 의사소통의 문제가 발생할까? <그림 1>에 표현한 것처럼 도메인을 구성하는 하나의 어휘나 개념이라도 개발자 유형에 따라 상이하게 받아들여진다.

이러한 현상은 서로 다른 유형의 개발자를 한 곳에 모아 동일한 도메인 용어를 가지고 논의를 해보면 쉽게 관찰할 수 있다. 고객을 표현하는 동일한 설계 모델이 없다면 이들 사이의 혼선은 쉽게 예상할 수 있다.

<그림 1> 개발자 유형에 따라 달라지는 도메인 개념의 표현 방법


UML 모델과 프로그램의 코드가 완벽하게 일치하지는 않는다. 마찬가지로 DB의 테이블 이름이나 칼럼 이름이 클래스 이름이나 속성 이름과 대응된다 하더라도 동일하지는 않다. 프로그래머와 DB 개발자 커뮤니티 사이에서는 오랜 동안 매우 다른 작명 관행을 유지해오고 있기도 하다.

화면 개발자의 경우도 크게 다르지 않다. 결국은 이들 사이의 구체적인 차이점을 배제한 추상화된 표현법을 공통의 언어로 활용할 수 있다. 일반적으로 설계 모델이 그러한 역할을 해야 한다.

하나의 팀, 하나의 언어
에릭 에반스는 프로젝트 팀이 지향할 목표지점을 분명하게 도식화했다. <그림 2>는 DDD 34쪽의 그림을 간략하게 요약한 것이다. Ubiquitous Language(이하 UL)는 고객과 개발자 양쪽에서 통용되는 어휘를 의미한다. 처음에는 교집합이 없이 나누어져 있다고 하더라도, 프로젝트를 진행하면서 교집합을 충분히 늘려가야 한다.

한편, 어떤 어휘의 경우는 공통의 어휘 구실을 하지 못할 수도 있다. 프로그램에 포함시킬 수 없는 업무의 어휘나 기술 자체에 대한 결정사항은 굳이 서로 논의하여 혼란을 야기할 필요는 없다.

<그림 2> Ubiquitous Language


개발자 사이에서는 물론이고, 고객과 개발자가 서로 같은 언어를 쓰기 위한 소프트웨어 커뮤니티의 노력이 없었던 것은 아니다. 다양한 표기법의 모델이 과거부터 존재해왔다. 그리고 이름에서도 드러나듯이 UML(Unified Modeling Language)은 모델링 언어를 표준화하기 위한 목적으로 나타난 것이다.

다만, UML로 작성한 모델이 모두에게 통용되고 있지는 못하다다는 점이 문제다.

  모델 주도의 설계(Model Driven Design)

필자가 보다 효과적인 모델링 방안을 고민하던 시점에 마침 한 권의 눈에 띄는 책을 만났다. 바로 에릭 에반스(Eric Evans)가 쓴 Domain-Driven Design(이하 DDD)이다. 이 책은 모델링에 대한 풍부한 경험이 없는 개발자에게는 그다지 유용한 책이 되지 않을 수 있다. InfoQ 사이트에서 요약된 이북을 다운로드 받을 수 있다(http://www.infoq.com/minibooks/domain-driven-design-quickly).

<화면 1> Domain-Driven Design의 표지


방대한 분량의 책 내용을 집약해서 전달하기 위해 곳곳에서 에릭은 DDD의 골격을 이루는 어휘들로 일종의 이동 경로를 그려놓았다. 그 중심에 있는 두 개의 어휘가 있는데 하나는 앞서 언급한 UL이다. 이는 (고객과 개발자) 모두에게 통용되는 언어를 의미한다. 다른 하나는 모델이 주도하는 설계(Model-Driven Design 이하 MDD)이다.

<그림 3>는 개발의 중심에서 서로 다른 노력을 응집시키는 구심점 역할을 하는 모델을 도식화 해본 것이다. 중심에서 발산해나가는 것은 다양한 유형의 개발 결과물 혹은 고객의 시스템에 대한 이해나 기대라고 가정해보자. 고객과 개발자, 유형이 다른 개발자 사이에서라면 모두 조금씩 다른 방향으로 발전하게 마련이다.

이 때 구심점이 되어 이들을 연결해주는 모델이 없다면 각각이 발산해 나가면서 괴리가 커질 것이다.

<그림 3> 개발의 중심에 자리한 모델


반면, 모델을 중심으로 강한 응집력이 갖게 된다면 모델은 바로 훌륭한 UL의 역할을 하는 것이다.

고객이 이해할 수 있는 모델
DDD에는 다음과 같은 내용이 나온다.

숙련된 업무 전문가(sophisticated domain experts)가 모델을 이해하지 못한다면, 모델에 문제가 있는 것이다.

만일 모델을 고객이 이해할 수 없다면 어떤 일이 벌어질까? 개발자는 고객과 의사소통을 하기 위해 모델 이외의 다른 무언가를 만들어야 한다. 물론, 이것보다는 모델을 고객과 소통할 수 있게 만들어야 한다.

종종 많은 사람들이 고객이 UML을 직접 활용하는 것은 무리라고 한다. 하지만, ERD를 놓고 고객과 개발자가 치열하게 논의를 하는 경우를 보는 일은 어렵지 않다. UML은 결코 ERD보다 복잡하지 않다.

만일 UML로 작성된 모델이 실효성을 발휘하고 있지 못하다면, 본질적인 정보를 표현하는데 초점을 맞추기 보다는 산출물의 형식이나 모델링 방식에 얽매이는 수준에 머물러 있기 때문이 아닌가 생각해봐야 한다.

만일 고객이 이해할 수 있는 표현법이 클래스다이어그램 하나라면 이를 활용하여 의사소통을 하라. 많은 어휘와 수사를 활용한다고 의사소통이 잘 되는 것은 아니다.

모델 사이의 괴리를 줄여라
CBD 도입 초창기 EJB가 유행할 때 모델링 도구를 이용하여 EJB를 구성하는 요소들을 모두 설계 모델에 표현하던 때가 있었다. <그림 4>는 분석 모델에서 고작 네 개의 클래스 혹은 인터페이스를 EJB로 변환한 것이다. 이러한 모델은 EJB의 구성요소를 이해하는 것 이외에 어떤 효용성을 지닐지 의문이다.

<그림 4>의 다이어그램을 가지고 고객과 의사소통 할 수 있겠는가? 실제 현장에서는 이보다 훨씬 복잡하여 지하철 노선도와 같은 그림이 될지도 모른다.

<그림 4> EJB 기반의 설계 모델


고객과는 분석 모델로 의사소통을 하고, 설계 모델은 개발자를 위한 것이라고 가정해보자. 사실 고객 중에는 최종 사용자만 있는 것이 아니라, 시스템을 유지 보수하는 고객도 있다는 것을 고려하면 이러한 가정은 그다지 유효하지 않다. 그럼에도 불구하고 기술과 업무가 혼재되어 마치 스파게티와 같은 모델이 개발자에게라도 도움이 되는가?

필자가 참여했거나 알고 있던 모든 프로젝트는 분석 모델과 설계 모델을 별도로 만든다(현재도 대부분의 SI 프로젝트에서는 분석 모델과 설계 모델을 별도로 만든다). 분석/설계를 담당한 개발자들에게 UML로 모델링 하는 것을 멘토링 하는 것이 익숙해질 시점에서 한 가지 의문이 들었다.

촉박한 일정과 이제 막 UML을 배워서 모델링을 하는 개발자들이 분석 모델과 설계 모델을 모두 만들어내는 것이 과연 옳은가 하는 점이다(필자가 현재 참여하고 있는 프로젝트에서도 이러한 모순을 최대한 해결하려고 노력하고 있다).

더군다나 J2EE 기반의 애플리케이션을 만드는데 자바를 한 번도 써보지 않았고, CBD(Component-Based Development)의 기반기술에 대한 이해가 전혀 없는 사람이 업무 분석 이후에 설계를 담당했다.

결론적으로 필자는 분석 모델과 설계 모델을 모두 표현하는 방식에 매우 비효율적이라고 생각한다(아쉽게도 필자가 참여했던 프로젝트를 포함하여 대형 SI업체가 주도하는 대부분의 프로젝트에서는 분석 모델과 설계 모델을 모두 만들어낸다).

대체로 분석 모델을 만들 때는 업무에 초점이 맞춰진다. 분석 모델을 토대로 설계 모델을 만들어낸다. 설계 모델 작업은 대개 프로그래밍으로 만들기 위해서 영문화 작업을 하고 나서, 기술 환경을 위한 변형 작업을 수행한다.

이 때, 분석 내용에 누락된 것이나 미진한 사항이 있다면 어떻게 할 것인가? 또한, 새로운 요구사항이 들어오면 분석과 설계에 모두 적용할 것인가? 양쪽에 모두 반영하게 되면 주어진 시간에 대해 노력이 분산되고, 한쪽에만 반영하면 분석 모델과 설계 모델 사이의 연계가 완벽하게 유지되지 못한다.

분석 모델과 설계 모델의 통합
성공을 거두지는 못했지만 OMG의 MDA(Model Driven Architecture)는 고객과 애플리케이션 개발자 사이에서 하나의 모델(Platform Independent Model)만으로 의사소통 하는 방향을 지향했다. 이를 가능하도록 하기 위해 MDA 기반 실행 환경에서 구체적인 기술적 결정을 전담하게 했다.

MDA와는 완전히 다른 접근이지만, 최근에는 POJO(Plain Old Java Object) 기반의 개발 방식이 대두되면서 하나의 모델만으로도 고객과 개발자가 의사소통 할 수 있는 환경이 부상했다. 스프링(Spring)이라는 공개 소프트웨어가 MDA 실행환경과 유사한 역할을 제공하면서 실제 애플리케이션 코드와 분석 모델 사이의 차이가 매우 좁아졌다.

<그림 5> POJO 기반의 엔터프라이즈 시스템 구현 기술


필자는 ERD가 고객과 통용이 되는 환경이라면, 적어도 UML로 작성한 클래스다이어그램으로 도메인의 핵심적인 어휘를 표현한다면 충분히 고객과 개발자가 업무에 관해 이야기 할 수 있다고 믿는다. 불필요한 정보나 표기법으로 복잡도만 가중시키지 않는다면, 고객이 클래스다이어그램을 가지고 이야기 하는 것에 흥미를 느낄 수도 있을 것이다.

<그림 6> 대학에 존재하는 사람의 유형을 표현한 클래스 다이어그램


또한, 고객과 개발자가 소통할 수 있다면 굳이 UML을 표기법으로 고집할 필요는 없다. RUP(Rational Unified Process)나 RUP에 기초한 방법론을 사용하는 경우에도 많은 경우, 비즈니스 모델링 산출물에는 UML을 굳이 쓰지 않는다. 이미 업무 흐름이나 주요 기능 구성을 표현하기 위해 고객들의 눈에 익은 표기법이 있기 때문이다.

하나의 모델을 향해 갈 때 만나게 되는 장벽
필자는 몇 년 전 분석 모델만을 사용하자는 의견을 제시한 일이 있다. 그리고 오랜 논의 끝에 분석 모델을 단지 영문으로 변환하는 수준에서 설계 모델을 만드는 방식으로 모델링 기법을 개선해나갔다. 이러한 과정 속에서도 많은 장벽을 마주치게 되었다. 주로 다음과 같은 반응이었다.

● 우리의 표준 방법론에 위배된다.
● 분석 모델과 설계 모델이 별로 차이가 없는 것이 말이 되느냐?
● 검증되지 않은 방법이다.

IT에도 일반 업무처럼 규정을 따르게 하는 조직의 운영방식이 투영된 것으로 해석할 수 있다. 혹은 아직 모델의 내용이나 효과를 논하는 수준이 되지 못하는 경우다. UML 모델을 처음 도입하는 시점에서 형식의 표준화로 최소한의 품질을 확보하려는 시점으로 볼 수 있다.

따라서 지나치게 형식에 얽매이는 경우를 아직은 어렵지 않게 만나게 된다. UML이 널리 쓰이고 있기 때문에 머지않아 이러한 문제는 결될 것이다.

이러한 장벽 이외에도 국내 언어 환경의 특수성에 기인한 문제도 넘어야 한다. 대부분의 국내 프로젝트에서 영어로 작성된 분석 모델은 상상하기는 힘들다. 반면에 설계 모델의 경우는 한글로 작성하면 코드와 대응시키기가 어렵다. 한글을 지원하는 프로그래밍 언어가 있다하더라도, 여전히 한글로 프로그래밍을 작성하는 경우는 찾아보기 힘들다.

  소프트웨어 엔지니어로서 해결해야 할 도전 과제

소프트웨어 엔지니어는 앞서 언급한 장벽들을 해결하는 것을 업으로 한다. 뜻이 있는 곳에 길이 있다고 시간이 소요될 뿐 항상 해결책은 있기 마련이다.

먼저 새로운 방식에 대한 거부감이나 저항이 있는 경우라면 점진적으로 개선하면 된다. 분석 모델과 설계 모델 두 개를 모두 유지하더라도 도메인이 잘 드러나는 분석 모델을 중점적으로 활용하고, 설계 모델을 보조적으로 사용할 수도 있다. 또한, 분석 모델을 통해 코드를 도출하고, 역공학(reverse engineering)을 이용해 설계 모델을 만들 수도 있다.

DDD에서 말하듯이 하나의 언어로 모두에게 통용되면 좋겠지만 모든 상황에서 이를 적용할 수는 없다. 반면에 어디에서든 상황에 맞게 점진적으로 적용하는 것은 가능하다. 도메인 개념을 표현하는 방식 혹은 도메인 개념을 구체화하는 과정에서의 산출물 표기가 서너 가지 이상이라면 한 가지씩 줄여나가는 것만 해도 의사소통의 복잡도는 줄어드는 것이다.

새로운 방식에 대한 고객과 개발자의 적응을 돕기 위해서는 조심스러운 접근이 필요하다. 가시적인 실효성을 직접 맛보게 함으로써 변화를 적극적으로 수용하게 하는 것이다.

요즘 필자는 설계 모델 대신에 분석 모델로 포착한 업무 어휘를 엑셀 문서로 정리하고, 이를 기반으로 자바 클래스와 화면에 데이터를 전달할 XML 문서를 생성하는 작업을 시도하고 있다.

분석 모델이 갖는 약점을 설계 결정을 담은 엑셀 문서가 보완하는 방식이다. 개발 과정이나 향후 유지보수 시점에서 엑셀 시트가 익숙하게 통용될 수 있다면 굳이 UML만 활용할 필요는 없는 것 아닌가?

도메인 모델의 실효성을 극대화하기 위해서 모델과 실제 구현 산출물 사이의 괴리를 줄여야 한다. 그래야만 개발자들도 도메인 모델에 더욱 노력을 쏟을 수 있다. 소프트웨어 엔지니어는 이를 위해 지속적으로 프로세스나 개발 도구를 개선해야 한다.

<그림 7>에 나타낸 것처럼 도메인 모델로부터 많은 개발 산출물이 자동으로 생성될 수 있다면, 모델은 더욱 널리 쓰이게 되어 궁극인 하나의 언어로 나아갈 것이다.

<그림 7> 도메인 모델을 활용한 개발 산출물의 자동 생성


한편, 분석 모델과 설계 모델의 차이가 한글과 영어라는 차이뿐이라면 굳이 두 개로 모델을 분리할 필요가 없다. EA(Enterprise Architect)와 같은 모델링 도구에서는 이름 외에도 별칭(Alias)을 추가로 지원한다. 이름은 한글을 사용하고, 별칭은 영어를 쓴다고 다이어그램에 따라서 한글로 보이게 하거나, 영문으로 나타낼 수 있다.

그런 기능을 지원하지 않는 모델링 도구를 쓴다고 해도 클래스 이름은 영문을 쓰고, 스테레오 타입에는 한글을 넣는 방법으로도 문제를 해결할 수 있다.

<화면 2> EA의 다이어그램 등록정보 설정 창


사용하는 언어가 다르다면 대화가 어려운 것은 상식적인 일이다. 언어가 같더라도 사용하는 어휘가 다르면 의사소통이 어렵기 마련이다. 고객이 원하는 시스템을 만들어내기 위해서 고객과 개발자는 충분한 대화 필요하고, 이를 통해 개발자는 고객의 요구를 충분하게 이해해야 한다.

소프트웨어 구현 기술은 비약적으로 발전해나가고 있지만, 고객의 요구사항도 따라서 복잡해져 가고 있다. 대부분의 프로젝트에서는 기술적인 문제로 실패하기 보다는 고객의 요구사항에 대한 낮은 이해가 실패의 원인으로 작용한다.

필자는 이 글에서 고객의 업무에 초점을 맞춘 도메인 모델이 갖는 의미를 강조하고자 했다. 도메인 모델의 고객과 개발자의 언어로서 통용되기 위해서는 지속적인 노력이 필요하다. 그러한 노력은 프로젝트의 성공을 위한 열쇠가 될 수 있다.

현실적으로 고객과 개발자, 그리고 서로 다른 유형의 개발자 사이에서 하나의 언어가 통용되게 하려면 많은 장벽을 넘어야 한다. 필자는 이 글에서 자세하게 이들 장벽을 살펴보지는 않았다. 사실 어떠한 장애물이 나타나도 그 상황에서 최적의 선택을 하면 그뿐이다.

짧은 글로 구체적인 실행 방안을 제공해주지는 못할 것이다. 그저 짧은 필력이나마 독자들에게 공통된 언어로써의 도메인 모델이 가치가 있다는 사실만 분명하게 전달할 수 있기를 바랄 뿐이다. @


참고자료
1. Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans, 33~34쪽.
2. http://www.agilemodeling.com/artifacts/classDiagram.htm



* 이 기사는 ZDNet Korea의 제휴매체인 마이크로소프트웨어에 게재된 내용입니다.
: