블로그 이미지
생각처럼

카테고리

전체보기 (209)
TOOL (1)
다이어리 (1)
Bit (200)
HELP? (0)
Total
Today
Yesterday

달력

« » 2025.2
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28

공지사항

태그목록

최근에 올라온 글

출처 Chul's::Make_a_wish(Hit_the_ground_running); | 피쉬
원문 http://blog.naver.com/silent1002/10031917310

Visual Studio를 사용하여 간편하게 설치파일을 만드는 방법에 대해서 알아보자.

인트톨팩토리나, 인스톨 쉘드를 사용하면 조금 더 복잡한 과정이 필요하지만..

아래 방법을 사용하면 손쉽고 간편하게 간단한 설치파일정도는 만들 수 있다.

 

우선 자신이 설치 및 배포파일을 만들고자 하는 프로젝트를 열고

파일 -> 추가 -> 새 프로젝트 순서데로 따라가면 아래와 같은 화면이 나온다.

여기서 기타 프로젝트 형식 -> 설치 및 배포 템플릿은 설치 플젝트로 선택한다.

CAB은 Mobile장치의 설치파일이므로 WinApp개발자라면 그다지 알 필요는 없다.

 

 

프로젝트 명을 입력하고, 확인을 클릭한다. (필자는 라크슈미라고 입력하겠다.)

그러면 아래와 같이 솔루션 탐색기에 새로운 프로젝트가 하나 더 생성된 것을 알 수 있다.

 

 

 

 

여기서 그림과 같이 생성된 새 프로젝트에서 마우스 우클릭 후 추가 -> 프로젝트 출력으로 간다.

그러면 아래와 같은 대화상자가 뜨는데, 여기서 기본출력을 선택하고 확인을 누른다.

 

 

 

그러면 아래처럼 기본출력(활성)이라는 내용이 솔루션 탐색기에 새롭게 등장한다.

여기까지 됬다면 잘하고 있는 것이다.

그리고 여기서 보면 3개의 mdb파일이 추가되어있는데 여러분에게는 없는 파일이다.

mdb는 데이터 베이스와 관련된 파일로써 필자의 개인적인 용도로 추가된 것들이다.

 

여기보이는 mdb파일들은 설치파일을 사용해서 설치시 함께 설치되어질 파일들이다.

이것 외에도 프로그램 사용 메뉴얼 등도 이처럼 포함시킬 수 있을 것이다.

자.. 그럼 필요한 파일들을 어떻게 추가하는지 알아보자.

 

 

 

아래 그림처럼 설치 및 배포프로젝트에서 마우스 우클릭 -> 보기 -> 파일시스템을 선택한다.

 

그러면 오른쪽의 메인 Viewer에 파일시스템창이 생성되면서 편집을 할 수 있다.

아래 그림처럼 응용 프로그램 폴더 -> 추가 -> 파일을 선택한다.

 

추가하기 원하는 파일은 선택한 후 열기를 누른다.

그러면 자신이 추가하고자 하는 파일이 솔루션 탐색기에 추가된다.

 

 

이 정도 했다면 어느정도 설치파일이 완성되어 간다.

이제 설치파일에 버전을 부여하여, 이전버전이 설치되어있다면 삭제하고, 새로 설치하는 것을 설정해보자.

아래 그림의 속성창에서 속성과 설명을 주의깊게 읽어보도록하자.

 

여기서 RemovePreviousVersions에 대한 속성을 True로 하면 이전버전을 제거한다.

그리고 아래 Version 속성을 설정하여 버전을 부여할 수 있다. 높은 버전이 우선순위가 있으므로 업데이트된 내용이 있다면

설치파일의 버전도 더욱 높게 설정해야 한다. 이전의 버전으로 돌리고 싶다면..

백업해둔 설치 및 배포프로젝트에 버전만 높게 부여하여 설치하면 이전의 버전으로 돌아가는 기능을 구현할 수 있다.

주의할 점은 버전은 x.x.x의 형식으로만 부여할 수 있다는 점이다.

 

 

마지막으로 자신의 프로젝트에서 필요에 의하여 사용한 구성요소에 대한 설치를 알아보자.

기타 컴포넌트들을 추가하여 사용하고, 배포할 때 이에 필요한 내용을 함께 배포해주지 않으면

프로그램이 실행되지 않거나, 정상적으로 작동하지 않을 수도 있으니, 확인 후 아래 내용을 참고로하여 자신에게 맞는 구성요소들도 함께 설치파일에 추가하도록 하자.

 

 

 

자신이 구현한 프로젝트에서 .net 구성요소 혹은 DB를 사용하는데 필요한 MDAC등을 사용했다면..아래 과정이 추가되어야 한다. 침착하게 따라해보자.

동일하게 솔루션 탐색기에 보이는 설치 및 배포프로젝트에서 마우스 우클릭 -> 속성을 클릭한다.

 

그러면 대화상자가 하나 등장하는데 여기서 필수구성요소를 클릭하면 아래와 같은 화면이 등장한다.

여기서 필자는 .NET Framework 2.0과 MDAC 2.8 을 추가했다.

MDAC는 필자의 프로그램에서 mdb파일을 다루고 있어서 추가하였다.  여러분에게 맞는 구성들을 추가하고

대화상자의 하단으로 시선을 옮기면, 3가지 요소가 보이는데..

여기서 2가지만 알면된다.

 

구성 요소 공급업체의 웹 사이트에서 필수 구성 요소 다운로드를 선택하고 확인을 누르면..

설치파일은 설치시 필요 구성요소가 있는지 없는지 확인하고, 자동으로 구성요소를 다운로드하여 설치한 후 설치를 시작한다.

그러나 내 응용 프로그램과 동일한 위치에서 필수 구성 요소 다운로드를 선택하면

설치파일과 함께 구성요소 설치에 필요한 내용들이 배포된다. 이 점을 알아두고 다음 과정으로 넘어가자.

필자는 두번째는 선택하여 따로 다운로드가 필요없이 설치파일과 함께 배포되도록 설정하였다.

모두 했으면 확인을 클릭한다.

 

자 그러면 여기서 배포하기를 원하는 프로젝트 (실제로 코드가 구현된 프로젝트)를 먼저 빌드하도록 한다.

그리고 설치 및 배포 프로젝트를 빌드한다. 빌드하는데 시간이 어느정도 소요되므로 차분하게 기다리도록한다.

 

 

 

빌드가 완료되면 설치 및 배포 프로젝트를 생성했던 폴더의 Debug폴더로 이동해보자.

그러면 아래와같이 파일과 폴더들이 생성되었을것이다.

여기서 생성된 폴더를 좀 전에 우리가 추가한 구성요소 설치에 필요한 설치파일이므로, 배포시 함께 배포하도록 한다.

필수구성요소 추가시, 필수 구성요소 설치 위치를 첫번째인 해당 회사의 웹에서 다운로드 하는 것으로 선택하면 이런 폴더는 생성되지 않는다.

 

여기까지 함으로써 간단하게 Visual Studio 2005를 사용해서 설치파일을 만들어 보았다.

이제 생성된 내용을 배포하여 Setup파일을 실행하면 정상적으로 설치가 되는 것을 확인 할 수 있을 것이다.

 

 

---------------------------------------------------------------------

 

여기까지가 기본적인 사항이다.

더욱 세심하게 설치파일을 만들고 싶다면 아래 내용을 참고하면 되겠다.

 

C# MVP 엄준일님 블로그 - 설치프로젝트 이용한 배포파일 만들기

(아래 동영상에서는 기본적인 설치 프로젝트를 제작하고, 설치 시작/커밋/롤백/제거 시에 어셈블리를 호출하여 특정 동작을 수행하는 방법을 소개합니다.)

 

[웹케스트] 설치 프로젝트를 이용하여 배포하기 #1

 

----------------------------------------------------------------------------------

 

MSDN: http://msdn.microsoft.com/en-us/library/wtzawcsz(VS.80).aspx

* 이하 위 원문에서 가장 많이 쓰이는 부분 번역

 

1. 바로 가기 아이콘 추가

File System->Application folder(응용 프로그램 폴더)에서 바로 가기 아이콘을 추가하기 원하는 파일 선택 -> 마우스 우측 클릭 -> Create Shortcut to xxxx (바로 가기 만들기) 선택 -> 만들어진 바로 가기를 드래그 드랍해서 사용자 바탕 화면(User's Desktop)으로 이동.

그러면 바로 가기가 User's Desktop 안에 생긴것을 알수 있는데 적절한 이름으로 고쳐준다. 이 이름이 바로 설치가 완료되었을때 사용자의 바탕화면위에 나타날 "바로 가기" 이름이다.  

 

2. 아이콘 추가

기본값으로 아이콘이 설정되어 있지 않으므로 원하는 아이콘 파일을 File System -> Application Folder안에 복사해 넣고, 속성->Icon으로 가서 Browse를 선택한후 이미 복사해둔 아이콘 파일을 선택한다. 

 

3. 설치 경로 설정

File System->Application folder(응용 프로그램 폴더)의 속성 선택해서 DefaultLocation의 값을 변경시켜준다. 기본값은 "[ProgramFilesFolder][Manufacturer]\[ProductName]" 이다.

 

 

4. 대화 상자 추가(User Interface)

Solution Explorer에서 View ->User Interface 선택하면 설치 과정에서 쓰일 여러가지 대화 상자를 볼수 있다. 만약 또 다른 대화 상자를 추가하고 싶다면 Add Dialog를 이용해서 할수 있다. 

 

5. OS 버전에 따른 조건부 설치

특정 OS 버전에 따라 특정한 파일을 설치하거나 설치하고 싶지 않다면 그 파일(File System -> Application Folder)을 찾아 Condition 속성을 바꾸어 준다. (i.e. Windows XP 이상에서만 설치하고 싶다면 "VersionNT >= 501")

 

6. 설치에 필요한 Microsoft 프로그램(i.e. .NetFramework 2.0, Visual C++ Runtime Libraries, etc.)도 같이 배포하고 싶다면 Solution Explorer -> 마우스 우측 클릭 ->Properties -> Prerequisties.

여기서 설치에 필요한 파일들을 선택할수 있고, 또한 어디서 그 파일들을 구할수 있는지 설정할수 있다. 만약 두번째 옵션인 "응용 프로그램과 같은 로컬 경로(Download prerequistites from the same location as my application)"을 선택하면 빌드시 별도의 폴더가 설치 실행 프로그램과 함께 생성된다.

 

7. 특정한 설치 시작 조건

만약 설치를 하기 위해 특정한 파일이 있어야 하거나 특정한 레지스트리 값이 일치해야 한다면, Solution Explorer에서 View->Launch Condition을 이용하도록 한다.

 

8. 특정한 파일 확장자에 특정한 프로그램이 실행되도록 하려면

Solution Explorer에서 View->File Types->Add File Type를 통해 원하는 파일과 확장자를 지정하도록 한다.

Posted by 생각처럼
, |
Posted by 생각처럼
, |

개집을 지을 때는 그냥 만들면 된다통나무집을 지을 때는 목수만 있으면 가능할 것이다하지만 63빌딩을 지을 때는당산철교를 다시 만들 때도 ‘그냥’ 만든다는 표현이 가능할까어느 정도 이상의 규모가 되면 복잡도가 기하급수적으로 증가하여 인간이 직관적으로 봐서 이해할 수 있는 크기를 훌쩍 넘겨버린다그래서 아키텍쳐는 등장하게 된다. <?XML:NAMESPACE PREFIX = O />

(참고많은 문헌에서 소프트웨어 아키텍쳐를 설명하기 위해 건축 설계의 비유를 들곤 한다이와 같은 비유를 메타포어 (Metaphore)라 하는데이를 단순히 어떠한 사실을 설명하기 위해 설정한 예일 뿐이라고 간과하기에는 그 중요도가 좀 크다고 볼 수 있다메타포어를 어떻게 잡느냐에 따라 개발자의 마인드가 바뀔 수 있기 때문이다예를 들어최근 객체지향이나 컴포넌트 기반의 개발방법은 반복적인(iterative) 개발 라이프 사이클을 강조하고 있다그러나 위에서 사용한 건축의 메타포어는 이 같은 패러다임 내에서 오해를 불러올 수 있다실제 반복적으로 건설되는 건축물은 하나도 없다그럼에도 불구하고 건축 메타포어를 사용하는 이유는시스템이 비대해지면서 발생하는 복잡도를 설명하는 데 무리가 없기 때문이다메타포어에 관련된 내용을 보고 싶다면Steve C McConnell의 명저 Code Complete나 최근의 경향으로서 Alistair Cockburn의 글 ‘Games Programmer Play’ 등을 참고하기 바란다.

http://www.sdmagazine.com/documents/s=2398/sdm0202a/0202a.htm )

 

1.     소프트웨어 아키텍쳐의 필요성

 

노트패드는 ‘그냥’ 만들 수 있지만 흔히 우리가 무슨 무슨 시스템이라고 부르는 중대형 프로젝트의 결과는 절대로 ‘그냥’ 만들어지지는 않는다인식하고 있건 아니건 모든 소프트웨어는 아키텍쳐를 가지고 있다누가 만드냐에 따라 다르겠지만일반적으로 인식하고 만들어진 아키텍쳐는 그렇지 않은 아키텍쳐보다 훌륭할 것이다.

Fredrick P. Brooks가 그의 신화적 저서 ‘The Mythical Man-Month’에서 지적한 ‘9명의 여자가 투입된다고 해서 아기를 한달 만에 나을 수는 없다’ 라는 속담의 비유는 우리에게 많은 것을 시사하고 있다.프로젝트가 어느 정도 이상의 규모를 뛰어넘으면 산술적인 계산으로는 나오지 않는 새로운 이슈들이 등장하게 된다[Brooks 1975]

 

1.1.   의사소통과 규모

5명의 개발자가 참여하는 프로젝트와 10인의 개발자가 참여하는 프로젝트는 단순하게 규모가 2배가 늘어났음을 의미하지는 않는다. 5명일 때의 대화 통로는 10개이지만 10명일 때는 45개가 가능하다.

 

1.2.   활동비율과 규모

프로젝트 규모가 증가하고 형식적인 의사 소통의 필요성이 증가함에 따라프로젝트가 필요로 하는 활동의 종류는 극적으로 바뀐다소규모 프로젝트에서 구현은 가장 두드러진 활동으로 전체 개발 시간의 80%를 차지한다중간 규모 프로젝트에서구현은 여전히 주도적인 활동이지만전체 노력에 대한 비율은 약 50%로 떨어진다아주 대형 프로젝트에서는 아키텍쳐통합성시스템 테스트가 구현과 동일한 혹은 그 이상의 비율을 차지한다. [Brooks 1975]

 

1.3.   프로그램상품시스템시스템 상품

코드 행수와 팀 크기가 프로젝트 규모에 영향을 미치는 유일한 요소는 아니다더 치밀하게 영향을 미치는 것은 최종적인 소프트웨어의 품질과 복잡성이다. 2500행의 프로그램 개발에 1개월이 걸린다면5000행의 프로그램은 6개월이 걸린다.

상품으로 제작되는 프로그램은 패키징문서화치장 등의 여러 작업으로 인해 일반 프로그램보다 약3배 정도의 비용이 든다또한 함께 작동할 프로그램 그룹인 시스템은 단일 프로그램에 비해 약 3배의 비용이 들고 이를 제품화하기 위해서는 단일 프로그램의 약 9배의 비용이 든다.[Boehm 1981]

 

1.4.   오류

오류의 종류와 양은 프로젝트의 크기에 영향을 받는다소규모 프로젝트에 있어 구현 상의 오류는 모든 오류의 약 75%이다더 큰 프로젝트에서 구현 오류는 전체 오류의 약 50% 정도로 줄어든다나머지 오류는 아키텍쳐와 분석에서 발생하게 된다.[Grady 1987]

결함의 종류가 크기와 함께 변하는 것처럼 결함의 수도 증가한다다음은 프로젝트의 크기와 오류 밀도간의 상관관계를 표현한 표이다.[Jones 1977]

 

프로젝트 크기(코드의 행)

오류 밀도

2K 이하

천행의 코드(KLOC)  0-25 오류

2K-16K

KLOC 0-40 오류

16K-64K

KLOC 0.5-50 오류

64K-512K

KLOC 2-70 오류

512K 이상

KLOC 4-100 오류

 

1.5.   생산성

생산성은 프로젝트 크기에 있어 소프트웨어의 품질과 많은 점을 공유한다작은 크기의 프로젝트에서 생산성의 가장 큰 영향력은 프로그래머 개인의 기술이다그러나 프로젝트 크기가 증가함에 따라,팀 크기와 조직이 생산성에 대단한 영향을 미친다다음의 표는 프로젝트의 크기와 생산성의 상관관계를 표현한다.[Jones 1977]

 

프로젝트 크기(코드의 행)

월별 코드 행수

2K 이하

333-2000

2K-16K

200-1250

16K-64K

125-1000

64K-512K

67-500

512K 이상

36-250

 

 

2.     일반 설계와 아키텍쳐의 차이

 

아키텍쳐와 설계와의 공통점은 둘 다 요구사항을 만족하기 위한 해법을 제시한다는 것이다둘 간의 차이는 아키텍쳐는 보다 큰 그림에 초점을 맞추고 설계는 좀 더 미세한 문제에 초점을 맞춘다는 것이다다음의 비교는 아키텍트(Architect)와 비 아키텍트 간의 차이를 좀 더 직관적으로 이해할 수 있도록 도와줄 것이다.[suntone]

 

아키텍트가 다루지 않는 부분

아키텍트가 다루는 부분

버튼이 눌렸을 때 어떻게 반응할까?

버튼이 얼마나 자주 눌릴까?

얼마나 많은 동시 사용자가 버튼을 누를까?

버튼을 누르는 사람들이 인트라넷 내에 있을까바깥에 있을까?

시스템이 이벤트에 어떻게 반응하는가?

각 이벤트간에는 어떠한 시간적인 순서와 제약 조건들이 존재하는가?

업무 규칙이 어떠한가?

업무 규칙이 얼마나 복잡한가?

얼마나 자주 변하는가?

개인에 의해 개발되는가독립된 팀에 의해 개발되는가?

그 규칙들이 별개로 변하는가서로 영향을 주며 같이 변하는가?

데이터베이스 스키마가 어떠한가?

스키마가 얼마나 복잡한가?

기존의 시스템에 의한 제약은 어떠한 것들이 있는가?

그 메시지에는 어떤 필드들이 있는가?

그 메시지와 상호작용하는 외부의 시스템은 어떤 것이 있으며 그들은 어떤 특징을 갖고 있는가?

 

위의 표를 통해 아키텍트가 아키텍쳐를 설계할 때 어떤 점들을 고려하는지 직관적인 이해를 할 수 있었을 것이다이제 좀 더 정확한 차이를 비교해보자.

어떤 사람들은 윈도우보다 리눅스가 좋은 시스템이라고 하고 어떤 사람들은 리눅스보다 솔라리스가 더 좋다고 한다이 때 무엇을 기준으로 좋다 나쁘다고 사람들은 얘기하는 것인가가장 쉽게 눈에 보이는 요소는 시스템의 기능일 것이다하지만 그것은 누구나 파악할 수 있는 요소이고 사실 기능의 구현은 누구나 할 수 있는 것이다예를 들어 마우스 클릭 이벤트를 받을 수 있어야 한다는 기능은 모든 플랫폼이 다 가지고 있는 기능이다하지만 그 마우스 클릭에 대한 이벤트를 처리하는 방식은 플랫폼마다 다르다예를 들어 윈도우는 Callback이란 모델을 사용하고 자바의 경우는 Observer라는 모델을 사용한다여러 가지 이유로 Callback보다는 Observer모델이 더 바람직하기 때문에 자바가 윈도우보다 우월한 이벤트 모델을 가지고 있다고 얘기한다 (논란의 여지가 있지만). 이 때 그러한 여러 가지 이유에 해당하는 것들이 품질속성 (Quality Attribute)들이다그리고 아키텍쳐가 다루는 요소는 시스템의 개별적인 기능이 아닌 바로 이러한 품질속성 들이다. [suntone]

 

 

3.     품질속성 (Quality Attribute)

 

절대적인 기아의 상태에서는 음식의 맛을 가리지 않는다고른 영양가와 몸에 좋은 음식안 좋은 음식 등에 대해서도 고려할 여지가 없다일단 배를 채우고 봐야 한다그러나 좀 먹고 살만하게 되면 음식의 맛과 향칼로리와 각종 영양분과 같은 질적인 문제를 고려하기 시작한다.

분야마다 차이가 있겠지만 90년대 초까지 국내 소프트웨어 개발의 경향은 소프트웨어의 질적인 부분에 대한 고려 보다는 양적인 문제 즉소프트웨어의 기능적 특징에 대해 주로 다루어 왔다지나치게 눈 앞에 보이는 결과에만 집착한 듯 하다그러나 시스템의 수명이 매우 길고복잡하며 업무 핵심적(mission-critical)인 분야에 사용될 경우에는 소프트웨어의 기능에 대한 관심 뿐만 아니라 좀더 고차원 적인품질 문제가 중요하게 다루어 지게 된다.

어떤 것의 품질을 다룰 때는 여러 가지 세부 항목을 두고 살피게 된다변경용이성상호운용성효율성안정성시험용이성재사용성과 같은 소프트웨어의 품질 요소 (Quality Attributes)들이 이에 해당한다이러한 소프트웨어의 품질 요소는 IEEE-Std 830-1993과 같은 표준, CMU SEI에서 발표한ATAM(Architecture Tradeoff Analysis Method)과 같은 연구소의 산출물, Rational RUP와 같은 개별 기업의 솔루션에서도 나타난다.

하나 하나 이들에 대해서 살펴보자. [POSA I]

3.1.   변경용이성 (Changeability)

변경사항에 대해 쉽게 대처할 수 있는 소프트웨어가 고품질 소프트웨어이다소프트웨어 공학에서 지금까지 매우 중하게 다루어온 문제가 바로 변경/비용 곡선이다나중에 변경할수록 비용이 기하급수적으로 늘어간다변경의 종류나 시점에 따라 다음과 같이 유지보수성확장성재구조화성이식성 등으로 세분해 볼 수 있겠다.

l         유지보수성 (Maintainability): 나중에 문제가 발생했을 때 얼마나 쉽게 고칠 수 있느냐에 대한 것이다수술을 할 때 온몸 전체를 건드리는 것이 아니라 특정한 부분만 건드려도 고칠 수 있는 구조를 가져야 한다.

l         확장성 (Extensibility): 기능을 추가확장또는 제거하기 얼마나 쉬운 가에 대한 것이다.

l         재구조화성 (Restructuring): 컴포넌트들을 재배치해서 구조를 고도화 시키기 얼마나 편하냐에 대한 것이다.

l         이식성 (Portability): 다양한 종류의 플랫폼에 이식시키기 얼마나 편하냐에 대한 것이다.

 

참고 -------------------------------------------------------------

다음 그래프는 요구사항의 변화 혹은 결점을 해결하기 위한 비용이 시간대별로 얼마나 급격하게 증가하는지를 보여준다. IBM, GTE, Safeguard Software 프로젝트, TRW등에서 있었던  실제 대형 프로젝트들을 조사한 결과이다. [Boehm 1981]

대부분의 문제가 유지보수 단계에서 발생하고 유지보수가 시스템 개발 비용의 80% 정도를 차지하는 것을 생각하면 이 곡선의 기울기를 낮추기 위한 노력이 얼마나 값어치 있는 것인지를 실감할 것이다.[Ambler 1999]

 

 

이 곡선의 문제를 해결하기 위해 수많은 방법이 나왔다초기에 요구사항을 명확히 규정하고 향후 요구사항의 변화에 대처하기 위한 방법 등을 다루는 요구 공학유연한 설계를 통해 변화를 해결하는 비용을 줄이기 위한 패턴들최근의 이슈로서 곡선 자체를 직선으로 바꾸기 위해 엽기적(?)으로 노력하는XP (extreme programming)와 같은 방법론 등이 그 예이다그리고 그 모든 방법들의 중심에 있는 것이 소프트웨어 아키텍쳐이다아키텍트는 요구 공학유연한 패턴의 도입올바른 아키텍쳐 방법론 등을 통해서 어떤 변화에도 흔들리지 않는 강건한 아키텍쳐를 만들기 위해 노력해 왔다그리고 그러한 노력은 헛되지 않아 SUN J2EE Blueprint SunOne, MS .NET, IBM Sanfrancisco Framework, 미 국방부(DoD) C4ISR 등 많은 참조 아키텍쳐가 나왔고, SUN Suntone, Open Group TOGAF, 필립스의 Gaudi, BredMeyer Action Guide 등 아키텍쳐 구축에 사용되는 여러 방법론이 나왔다.

-------------------------------------------------------------------

 

3.2.   상호운용성 (Interoperability)

외부 시스템과의 연동이 얼마나 용이하게 되어 있느냐에 대한 능력이다다른 언어다른 규약다른 자료 형식을 가진 시스템과 연동하는데 문제가 없도록 만들어야 한다가장 낮은 단계의 상호운용성은 디스켓을 통한 자료 전달이 있을 것이고점점 상위 단계로 올라가면 동일한 프로토콜을 사용하여 연동하는 웹 서비스 혹은 IIOP와 같은 기술이 있을 수 있다.

 

3.3.       효율성 (Efficiency)

가지고 있는 자원을 얼마나 최대한 활용해서 효율적인 시스템을 만드느냐에 대한 문제이다응답 시간이나 많은 동시사용자의 수용 등과 관련된 문제들을 해결하기 위해 최소한의 비용으로 최대의 효과를 얻어내는 것이 목표이다.

 

3.4.       안정성 (Reliability)

예외적인 상황이나 예측 못한 상황에 직면했을 때 얼마나 시스템의 기능을 유지할 수 있느냐에 대한 문제이다여기에는 두 가지 세부 분류가 가능하다.

l         고장 감내 (Fault Tolerance): 에러가 발생했을 때 이것을 ‘복구’할 수 있느냐는 것이다현재 보잉 747기에는 747기용 시스템과 737기용 시스템이 동작하고 있다비교적 최신인 747용 시스템이 다운될 경우기능은 좀 떨어지겠지만 수년간 사용되어서 검증된 737기용 시스템으로 교체되므로 소프트웨어 버그로 비행기가 추락할 일은 거의 없다고 봐야 할 것이다.[Simplex]

l         강건성 (Robustness): 시스템의 정상 상태를 얼마나 깨뜨리기 어려운가에 대한 문제이다윈도우에서 애플리케이션이 잘못된 연산을 수행할 경우 윈도우는 도스처럼 정지되지 않는다그 애플리케이션만을 종료시킴으로써 문제를 해결한다물론 때때로 자신을 도스로 착각하는 가슴 아픈 경우가 있기는 하다.(정말 눈물나게 가슴 아프다.)

 

3.5.   시험용이성 (Testability)

많은 개발자들이 개발보다 디버깅에 시간과 노력을 많이 빼앗기고 있다어렵게 만들어 놓은 코드는 역시 문제가 또 발생할 수 있다쉽게 테스트 할 수 있다면 문제가 많이 해결된다테스트하기 쉬운 소프트웨어는 그 자체만으로도 품질이 좋다고 말할 수 있다주로 하드웨어와 연관성이 적은 경우 시험용이성이 좋은 경향이 있다기존에 사용하던 컴포넌트를 충분히 테스트하지 못하고 사용했다가 공중 분해된 미국의 챌리저 우주왕복선은 시험용이성의 중요성을 잘 시사해준다.

 

3.6.       재사용성 (Reusability)

개발 비용과 시간을 줄이기 위한 방법으로 재사용이 계속 강조되어 왔다재사용은 재사용 컴포넌트를 개발하는 것과재사용 컴포넌트를 사용한 개발의 두 가지 측면으로 살펴볼 수 있다모든 개발자가 인식하지만 실제로는 아무도 안 하는 것 중의 하나가 재사용일 것이다최근에는 막연한 재사용을 실제로 하기 위한 여러 가지 방법들이 제시되고 있다프레임워크와 같이 제품을 통한 아키텍쳐의 재사용, Product-Line과 같은 조직 혹은 산업단위의 방법론적 해결방법 등이 그것이다.

 

 

4.     아키텍쳐 스타일

 

이러한 품질속성을 만족하는 아키텍쳐를 발명 한다는 것은 어지간한 천재가 아니라면 불가능하다.사실 대부분의 경우에 아키텍쳐는 만들어지는 것이 아니다기존의 잘 만들어진 아키텍쳐들을 선택하고 우리 시스템에 적합하게 수정 작업을 한다이러한 기존의 잘 만들어진그리고 수 십년 동안 수많은 시스템으로부터 시행착오를 통해 정제되고 검증된 아키텍쳐들을 아키텍쳐 스타일이라고 부른다가장 널리 쓰이는 아키텍쳐 스타일인 Layer에 대해서 살펴보자.[Shaw, Garlan 1996]

 

4.1.   Layer

우리가 별 생각 없이 사용하는 인터넷은 모두가 알다시피 네트워크를 통해서 동작한다그리고 모든 네트워크의 구조는 흔히들 프로토콜 스택이라고도 부르는 Layer 아키텍쳐 스타일에 의해 구성되어 있다예를 들어 PC방에서 인터넷을 한다면 Lan Card/Network Device Driver/IP/TCP/HTTP 를 통해서 웹을 사용하게 된다가장 유명한 네트워크 구조인 ISO OSI 7 Layer도 이름에서 보다시피 Layer 구조를 사용한다.

 

 

 

 

 

4.1.1. 용도

Layer 아키텍쳐 스타일은 단일 단위로 개발하기에는 지나치게 복잡한 시스템을 특정 수준의 추상화 수준으로 각 계층 구조를 구성함으로써 시스템을 분해하는 방법이다예를 들어 네트워크의 예제에서는 물리적인(하드웨어적인추상화 수준에서 논리적인(소프트웨어적인추상화 수준까지를 계층도로 구성하였다.

 

4.1.2. Layer – Before & After

Layer가 해결하고 하는 문제는 무엇인가시스템을 설계하기 위한 주요 이슈들이 고수준의 문제와 저수준의 문제들의 혼합된 형태일 경우 그들을 분리하기 위한 방법이 Layer이다그러한 코드들이 한군데로 뭉쳐져 있다면 (유식한 말로 monolithic 하다고 한다작업의 분배가 힘들고약간의 코드의 변화에 대한 파급 효과 (도미노 효과)가 크다또한 시스템을 전체로서 이해해야 하기 때문에 이해하는 게 매우 어려워지고 그에 따라 변경용이성이 급격히 저하된다쉽게 얘기해서 main 함수 안에 모든 코드가 다 있는 격이다.

그렇다면 Layer를 적용하면 어떠한 점에 있어서 좋은가일단 위에서 나열한 문제는 모두 해결된다.뿐만 아니라 각 Layer를 표준화할 경우 하나의 계층을 구현한 각 제품들이 서로 교체 가능하게 된다.예를 들어 PC방의 랜 카드 혹은 디바이스 드라이버를 교체해도 아무 문제 없다이것은 변경용이성뿐만 아니라 각 계층을 독립적으로 재사용할 수 있음을 의미한다.

세상사 모두 그렇듯이 단점도 있다. Layer의 가장 큰 문제는 시스템을 몇 계층으로 구성할지각 계층의 역할을 무엇으로 할지 그 적정한 수준을 잡기가 굉장히 어렵다는 것이다그 다음의 문제는 항상 계층을 통해서 시스템이 동작하기 때문에 성능의 저하가 있을 수 있다는 것이다그 외의 문제로 모든 유스케이스가 항상 모든 계층을 통해서 동작하기 때문에 코드의 양이 불필요하게 늘어나는 경우가 많다.

(참고: Analysis Pattern, Refactoring 등의 저서로 유명한 Martin Fowler는 현재 Enterprise Application Architecture 란 제목으로 새로운 책을 준비하고 있다그는 계층을 Presentation, Domain, Data Source 로 나누어 각 계층에서의 이슈를 다루고 있다. Enterprise Application에 관심있는 분께 적극 추천하고 싶은 컨텐츠다http://martinfowler.com/isa/index.html

  Fowler의 주장이 아니더라도 J2EE, MS DNA 등에서 볼 수 있는 것처럼 현재 거의 모든 EALayer 아키텍쳐 상에서 다루고 있다그 기원은 MVC (Model-View-Controller) 패턴에서 찾아볼 수 있을 것이다. MVC가 뭔지 궁금하신 분들은 또 한번 나아갈 길이 생긴것이다. ^^; )

 

 

5.     관점 (View)

 

건축에 대한 설계 도면을 그릴 때 하나의 그림으로 그리는 것은 불가능하다평면도측면도전기배선도수도배관도 등등 여러 도면에 나뉘어 그리게 된다왜냐하면 건축물이란 작품은 매우 복잡하므로 하나의 그림에 표현하는 것이 불가능하기 때문이다소프트웨어 시스템도 마찬가지이다흔히 아키텍쳐를 소프트웨어의 큰 그림이라고 표현하지만 한 장의 그림은 아니다이 때 몇 장의 그림으로 표현할 것인가에 대한 문제는 아직 결론이 나지 않았다. (앞으로도 결론은 없겠지만여기서는 UML을 처음 만들어서 유명한 Rational 4+1 view라는 5개의 관점으로서 소프트웨어를 바라보는 방법을 소개한다.[RUP]

 

5.1.   4+1 view

 

 

4+1 View는 유스케이스를 중심으로 총 5개의 관점으로 시스템을 바라본다유스케이스 관점은 최종 사용자가 바라보는 시스템의 기능을 의미하며, Logical 관점은 소프트웨어를 구성하기 위한 모듈들의 구성으로 Layer 같은 구조가 이에 해당한다. Process 관점은 시스템의 동시성에 관한 내용으로 시스템에 어떤 프로세스스레드가 있는 지 식별하고 그들간의 관계 (소유동기화 등)를 표현한다. Implementation 관점은 최종 소스코드들의 관계로 자바의 패키지간의 관계가 이에 해당한다. Deployment 관점은 시스템의 노드들 (컴퓨터디바이스)이 어떻게 배치되고 그들이 어떻게 연결되어 있는지를 의미한다그리고 이러한 모든 관점들은 유스케이스를 중심으로즉 요구사항을 끈으로 서로 연결되어 있다.

소프트웨어 시스템마다 필요한 관점은 서로 다를 것이다예를 들어 오피스 같은 애플리케이션은Process Deployment 관점은 필요 없을 것이고반면에 아파치와 같은 웹서버를 개발한다면 그 둘은 빠질 수 없는 중요한 관점이 된다따라서 프로젝트마다 적절한 관점을 선택하여 사용하는 것은 아키텍트의 가장 중요한 작업 중 하나이다.

 

 

 

 

6.     맺음말

 

아키텍쳐 설계는 개발자의 작업 중에 가장 창조적이고 고난이도의 작업에 해당한다따라서 매우 많은 지식과 경험을 필요로 한다미국에서는 CSA(Chief Software Architect)라는 직책이 따로 있고MS의 빌게이츠 회장이 CSA를 맡고 있다엔지니어로 평생 있을 생각이라면 한번 도전해볼 만한 직책이 아닌가?

Posted by 생각처럼
, |

< ISO/IEC 참고 문헌 > 

☆ 소프트웨어 개발절차 

  • ISO/IEC 12207 Software Life-Cycle processes


    ☆ 소프트웨어 품질 및 생산성 향상 

  • ISO/IEC 9126, Quality Characteristics and Guidelines for Their Use
  • IEEE Std 1045, Standard for Software Productivity metrics
  • IEEE Std 1061, Standard for software Quality Metrics Methodology


    ☆ 소프트웨어 문제분류 및 우선순위 

  • IEEE Std 1044, Standard Classification for Software Anomalies 

     

  • ☆ 형상관리

  • ANSI/IEEE Std 828, Standard for Software Configuration Management Plans
  • ANSI/IEEE Std 1042, Guide to Software Configuration management


    ☆ 소프트웨어 산출물 평가

  • ANSI/IEEE Std 1012, Standard for Software Verification and Validation Plans
  • IEEE Std 1059, Guide for Verification and Validation Plans


    ☆ 소프트웨어 품질보증 

  • ISO 9001, Quality System - Model for Quality Assurance in Design/Development, Production, 
        Installation and Servicing
  • ISO 9000-3, Guideline for the Application of ISO 9001 to the Development, Supply, and 
        Maintenance of Software
  • ANSI/IEEE Std 730, Standard for Quality Assurance Plans


    ☆ 소프트웨어 요구사항 

  • ANSI/IEEE Std 830, Recommended Practice for Software Requirements Specifications 

     

  • ☆ 소프트웨어 안전성 및 유지보수

  • IEEE Std 1228, Standard for Software Safety Plans
  • IEEE Std 1219, Standard for Software Maintenance 

     

  • ☆ 소프트웨어 시험

  • ANSI/IEEE Std 829, Standard for Software Test Documentation
  • ANSI/IEEE Std 1008, Standard for Software Unit Testing
  • ANSI/IEEE Std 1012, Standard for Software Verification and Validation Plans
  • IEEE Std 1059, Guide for Verification and Validation Plans 

     

  • ☆ 소프트웨어 사용자 문서화

  • ANSI/IEEE Std 1063, Standard for Software User Documentation ☆ 작업분할구조도
  • MIL-STD-881, Work Breakdown Structures for Defense Materiel Items 

    [출처] ISO,IEEE Standard|작성자 육식공룡

  • Posted by 생각처럼
    , |

    출처 그 십자가의 길....... | 민지아범
    원문 http://blog.naver.com/kcufl/60065937813
    소프트웨어 요구사항 정의서의 IEEE 표준 : IEEE std 830-1998



    소프트웨어 요구사항 정의서 작성 - Writing Software Requirements Specifications
    http://www.techwr-l.com/techwhirl/magazine/writing/softwarerequirementspecs.html
    by Donn Le Vie, Jr.
     


    이런 시나리오가 있다 : 당신은 최근에 HTML Help 프로젝트를 마쳤다... 더이상 야근도 주말 근무도 하지 않고 정상 근무로 돌아 간다. 그때 개발팀의 리더가 당신의 사무실로 들어와서 "다음에 진행할 주요 프로젝트를 위해서  기능 요구사항 정의서 양식에 넣어주시오" 라고 말한다.

    "뭐라고요?" 당신은 약간 충격을 받은 모습으로 쳐다본다. "내가 왜 이런 대접을 받아야 하죠? 심지어는 어디서부터 시작해야 되는지 몰라요!, 기술 전문가 누군가가 도와줘 봐요... "

    ....




    당신의 프로젝트를 위해서 소프트웨어 요구사항 정의서를 작성하라
    Software Rquirement Specification (SRS) Template - start writing SRS for your project
    http://sachinkraj.wordpress.com/2007/10/04/software-requirement-specification-srs-template-start-writing-srs-for-your-project/

    SRS란 무엇인가?
    SRS는 기본적으로 고객 또는 잠재적인 고객 시스템 요구사항들 또는 주로 실재적인 디자인 작업 또는 개발을 하는 사람을 이해시키는 문서이다.


    좋은 SRS의 잇점
    -프로덕트가 무었을 할 수 있는지 고객과 공급자 간의 동의의 원칙을 수립한다.
    -개발의 수고를 줄여준다.
    -비용과 스케쥴을 추정할 수 있는 논거를 제공한다.
    -유효함과 검사의 기준선을 제공한다.
    -품질 향상을 위한 원칙으로써 제공한다.


    SRS는 어디를 지향해야 하나?
    1. 기능적으로 . 소프트웨어가 무었을 할 수 있는가?
    2. 외부 인터페이스들 . 소프트웨어가 사람, 하드웨어, 또는 다른 소프트웨어와 어떻게 상호작용을 하는지?
    3. 성능.  다양한 기능들의 속도, 가용성, 응답시간, 복구시간이 무었인지?
    4. 속성들. 휴대성(이식성), 정확성, 유지보수성, 보안성, 기타, 생각해보아야 할 것이 무었인지?
    5. 구현하는데 디자인 제약성. 효과에 어떤 표준을 요구하는지, 구현언어는 무엇인지, 데이터베이스를 통합하는 정책은 무엇인지, 자원 제한은 어떻게 되는지 , 운영환경은 어떻게 되는지. 기타.?

    훌륭한 SRS는 어떤 성격을 가지고 있나. SRS는 아래와 같아야 한다.
    1. 정확해야한다.
    2. 애매모호하지 않아야 한다.
    3. 완전해야 한다.
    4. 일관성이 있어야 한다.
    5. 안정성 and/or 중요도의 순위가 정해져야 한다.
    6. 검증할수 있어야 한다.
    7. 수정가능해야 한다.
    8. 추적가능해야 한다.




    자료 :
    IEEE Std 830-1998
    http://standards.ieee.org/reading/ieee/std_public/description/se/830-1998_desc.html


    Texas Department of Information Resources 의 양식
    http://www.dir.state.tx.us/pubs/framework/

    Posted by 생각처럼
    , |
    질서 있는 아키텍처 패턴이야기-1
    월간 마이크로소프트웨어 제공
    2009.06.09 / AM 00:52

    [지디넷코리아]패턴을 좀 더 쉽게 학습하고 실제 프로젝트에 잘 적용할 방법이 없을까요?” 이는 필자가 강의를 마치고 종종 듣는 질문이다. 이 글에서는 부족하지만 용기를 내어 필자가 공부한 패턴 지식들과 경험들을 소개한다. 이를 통해 독자 여러분들이 패턴을 학습하거나 활용하는 과정에서 발생할 수 있는 시행착오를 조금이나마 줄일 수 있는 지름길을 안내하고자 한다. 

     

    요즘은 대학교 학부생의 교과과정으로 들어갈 정도로 패턴은 많은 이들에게 알려져 있다. 하지만 필자 주위에는 패턴을 잘 활용해, 성공적으로 프로젝트를 마무리했다거나 좋은 결과를 보았다는 말보다는, 오히려 많은 불신들과 하소연들이 생겨나고 있다. 왜 이런 상황이 발생했을까? 이 글을 통해 독자들이 패턴에 대한 오해를 풀고, 올바른 시선을 가지길 바라면서 내용을 시작해 본다. 

     

    패턴을 대하기 이전의 마음가짐 - 유연성, 확장성 

     

    많은 이들과 패턴을 주제로 얘기하다 보면, 패턴에 대한 잘못된 관점을 가진 경우를 종종 보게 된다. 패턴을 통해 비약적인 성능 향상이나 생산성 증대가 이뤄질 거라 생각하는 사람도 있고 심지어 ‘Silver Bullet(묘책)’으로 생각하는 이도 있다. 물론 제한적인 도메인 안에서 성능, 생산성 향상을 가져올 수 있는 패턴도 있지만, 패턴 자체의 목적은 유연성과 확장성에 초점을 맞추고 있다. 

     

    초창기 객체 지향(80년대)에서 가장 중요시 여기던 패러다임은 ‘Reuse(재사용)’이었다. 그래서 Component와 같은 이상적인 패러다임이 나오기도 했다. 마치 레고(Lego)와 같이 조립만 하면 만들어지는 레고웨어(Legoware)를 꿈꾸어 오면서…. 

     

    하지만 현재 소프트웨어는 어떠한가? 빈번하게 바뀌는 고객의 요구사항, 몇 명이서는 결코 만들 수 없을 만큼 거대해진 규모, 길어진 소프트웨어 생명주기를 가진 녀석들이 대부분이다. 그렇기 때문에 소프트웨어가 가져야 할 중요한 설계 방향으로 재사용성보다는 쉽게 변화를 수용할 수 있는 유연성(Flexibility)과 확장성(Extensibility)이 대두되었다. 

     

    만약 여러분이 유연성과 확장성에 초점을 맞춘 설계에 관심이 있다면, 패턴은 좋은 도구가 된다. 하지만, 최적화나 성능 개선이 목적이라면 패턴보다는 알고리즘을 공부하는 것이 더 낫다. 그리고 패턴을 쉽사리 적용하지 못하는 여러 가지 장벽들이 곳곳에 존재한다. 패턴에 대한 불신들이다. 지면상의 제약으로 이 모든 내용을 언급하기는 어려우므로, 예전에 필자가 마소 2007년 8월호에 기고한 ‘미워도 다시 보는 패턴 이야기’를 꼭 읽어보길 권한다. 이 글에서는 패턴의 정의, 원칙, 참고할 만한 설계구조도 설명하고 있다. 

     

    패턴은 올바른 아키텍팅을 하기 위한 전술 

    2007년 10월 『Software Architecture in Practice』의 저자인 Rick Kazman이 한국을 방문해 ATAM에 대해 강연했다. 세미나를 마친 후 어떤 이가 “당신과 같이 훌륭한 아키텍트가 되기 위해서는 어떠한 소양과 지식이 필요한지 설명해 주시겠습니까?”라고 질문했고 그에 대한 대답으로 아키텍트의 덕목 중 전술로서의 패턴이 지닌 가치를 설명했다. 

     

    “전술이란, 전략에 비해 단기적인 의미를 가지는 것으로 소프트웨어의 큰 구성요소들을 나누고, 구성 요소 내에서 어떻게 구현 및 실행해 나갈지 계획을 세워나가는 것을 의미합니다. 이러한 전술을 많이 알고 있어야, 내실이 튼튼한 소프트웨어가 나올 수 있죠. 전술을 많이 알기 위해서는 경험 못지않게 간접 경험, 즉 패턴을 익히는 것도 중요합니다.” 

     

    간략히 패턴에서 전술의 예를 든다면 분산 객체의 마샬링(marshaling) 정책을 들 수 있다. Loosely Coupling하게 마샬링하기 위해 프로토콜 기반의 설계를 사용함으로써 확정성이나 관리의 용이성을 획득하지만, 응답속도나 처리량을 포기해야 한다. 반면에 Tightly Coupling하게 마샬링하기 위해서는 Simple Object를 만들어서 사용하는 방법이 있는데, 시스템에 종속적이고 변화에 유연하지 못한 단점이 있는 반면에 응답속도나 처리량이 더 뛰어나다. 

     

    흔히 Web Service(전자인 경우 - SOAP에 의한 프로토콜 전송 방식)과 COM+(후자인 경우 - Simple Object)의 데이터를 주고받는 경우라고 할 수 있다. 만약 여러분이 패턴을 통해 이러한 전략을 습득하고 있다면, 아키텍팅을 수립하는 데 겪는 많은 시행착오를 줄일 수 있다.

     

    ■ 패턴의 시작은 GoF부터? 

     

    GoF 책이 명서이며 패턴계에 큰 영향을 끼친 서적임은 분명하다. 하지만 독자 여러분이 처음 패턴을 접한다면 GoF의 『Design Pattern』이라는 서적은 난해할 수도 있다. 필자는 GoF 책이 처음 패턴을 접하기에는 난해하다고 말하는 개발자를 보았다. 필자 역시 GoF 책을 이해하기 위해서 세 번을 읽었고 읽을 때마다 새로운 느낌을 받았다. 마치 성경을 읽는 느낌이라고 할까? 그 만큼 깊이가 있는 책이다. 

     

    GoF 책은 1990년대 후반부에 쓰인 터라, 1990년 중반부에 사용되는 애플리케이션을 예로 들어 설명했고, C++의 이해를 수반으로 하고 있으므로 현재 우리가 관심을 가지고 있는 애플리케이션과는 약간 범위가 다르며 자바나 C#에 익숙한 초보 개발자에게는 난해할 수 있다. 

     

    그래서 2000년대에 이슈인 데이터베이스 프로그래밍과 같이 누구나 쉽게 이해할 수 있는 수준으로 설명한 책이 『Design Pattern Explained』였고 국내에서는 ‘알기 쉬운 디자인 패턴’이라고 번역되어 있다. 불과 4년 전 만해도 초보자를 위한 디자인 패턴 책은 이것밖에 없었다. 하지만 현재는 뇌공학을 연계로 해서 쉽게 개념을 파악할 수 있는 좋은 서적이 나왔다(『Head First Design Patterns』, 『알기 쉬운 디자인 패턴』 등). 

     

    다음 단계 서적으로는, 구체적으로 하나의 언어를 정해 언어별 특성을 파악하며 패턴을 살펴볼 필요가 있다. 여러분이 자바에 관심이 많다면 『Java 언어로 배우는 디자인 패턴 입문』을 추천하며 C++에 관심 있는 개발자라면 『GoF 디자인 패턴! 이렇게 활용한다』를 권하고 싶다. 그 이후에 GoF 서적을 보면 한결 수월하게 읽을 수 있을 것이다. GoF 패턴을 충분히 이해했지만, 프로그래밍에 바로 적용하는 사람은 그다지 많지 않을 것이다. 왜 그럴까? GoF 패턴은 패턴의 가장 기본인 Micro Pattern일 뿐이다. GoF 패턴은 단지 시작에 불과하다. 

     

    가족을 이루는 패턴 군을 파악하라 

    GoF 패턴을 읽은 다음 POSA 시리즈로 불리는 서적들이 있다. GoF와 어깨를 나란히 하는 패턴계의 명서 중에 명서이며, GoF를 읽은 분이라면 패턴에 좀 더 깊은 세계를 맛보도록 도와준다. GoF(1995년)가 나온 1년 뒤(1996년)에 볼륨 1권이 출간되었지만, 국내에는 2008년도에 역서가 나왔기 때문에 패턴 초보자들에게는 그리 알려지지 않은 서적이라고 할 수 있다. GoF가 가벼운 Micro Pattern이었다면, POSA는 좀 더 세부적인 도메인을 다루고 있다. 

     

    - Volume 1: Architectural Pattern (소프트웨어 구조를 잘 설계하기 위한 패턴) 
    - Volume 2: Concurrent and Networked Object Pattern (분산객체를 위한 패턴) 
    - Volume 3: Resource Management Pattern (자원을 잘 관리하기 위한 패턴) 

     

    이 책을 탐독하면 자연스럽게 패턴 군(Compound Pattern)들이 눈에 보이게 된다(물론 GoF 패턴이 밑단에 전체적으로 깔려 있다). 즉 패턴 하나가 혼자 쓰이지 않고 같이 잘 엮여 사용되는 패턴들이 보이기 시작할 것이다. 바로 이러한 패턴 군을 많이 습득하는 것이 패턴을 습득하는 올바른 방법이다. 그럼 소프트웨어 기본 구조에서 볼 수 있는 간략한 사례를 들어 패턴 군을 설명해 본다. 

     


     

    소프트웨어는 <그림 1>처럼 크게 세 가지 요소로 구성되는데 각각 공용부, 가변부, 설정부이다. 공용부는 소프트웨어의 많은 Feature에서 공통적으로 사용하는 부분으로 log, transaction, security와 같은 모듈을 말하며, 요즘 Aspect와 같은 기술들로 구성하는 것이 추세다. 우리가 눈여겨봐야 할 것은 설정부와 가변부이다. 그럼 하나하나씩 살펴보자. 

     

    Component Configurator Pattern 

     


    아키텍처 패턴(Architectural Pattern)을 다룬 『POSA1』 서적을 통해 알려진 패턴으로, 런타임시 사용하는 컴포넌트들을 제어하고, 시스템 중지 없이 컴포넌트를 추가, 제거, 교체할 수 있는 패턴이다. 

     


     



    <리스트 1>과 <리스트 2>는 Component Configurator 패턴의 간단한 샘플이다. 설정 파일(<리스트 1>)의 프로토콜이 HTTP면 그 정보를 읽어 HTTP 프로토콜로 메시지를 전송하고 FTP 프로토콜로 설정되어 있다면 FTP 프로토콜로 메시지를 전송할 수 있다. 이렇게 함으로써 런타임시에 객체의 속성을 정의해 변화에 유연하게 대처할 수 있다. 

     

    하지만. 새로운 프로토콜이나 로깅 정책이 추가되어야 한다면 <리스트 2>의 코드도 변경될 수밖에 없다. 이러한 문제를 해결하기 위해 Component Configurator 패턴은 Reflection 패턴과 병행해 사용해야 한다. Reflection은 런타임시에 객체를 생성하는 패턴으로, 이미 닷넷(.NET)과 자바 플랫폼에서 지원하고 있다. 여기서 Component Configuration을 통해 객체 정보를 읽어와 생성하는 Factory를 만들면, 객체를 생성하는 클라이언트 입장에는 별 걱정 없이 객체를 생성할 수 있다. 

     

    Template Method Pattern 

     



     


     

    Template Method 패턴의 가장 대표적인 예가 xDBC (ODBC, JDBC)이다. 댜양한 제품의 DB에 상관없이 xDBC에 동작하는 쿼리만 알면 언제든지 DB 제품을 쉽게 교체해서 쓸 수 있다. Template Method 패턴은 다른 패턴이 가지고 있지 않은 전체적인 흐름을 제어하는 Template Method(위 예에서는 doQuery)를 가지고 있는데, <리스트 3>의 doQuery를 보면 DB에 연결을 맺고 쿼리를 얻어오는 흐름이 슈퍼클래스(super class)에 있는 것을 볼 수 있다. 

     

    서브클래스(subclass)들은 슈퍼클래스의 계약에 따라 움직여야 하는 강력한 제약 상황에 놓여 있게 된다. 이로써 DB 제품을 별 걱정 없이 교체할 수 있는 큰 장점을 얻을 수 있다. 특히 프레임워크들은 일괄적인 제어 흐름과 상황에 맞게 서브클래스를 교체하기 위해, 필수적으로 Template Method를 사용한다. 

     

    <그림 1>을 다시 한 번 보도록 하자. 이제 전체적인 그림이 이해가 갈 것이다. 설정부에 객체의 속성을 Component Confi gurator를 통해 정의해 놓는다. 그 후 객체가 생성되는 시점에서 Factory가 현재의 상황을 고려해 적합한 객체를 선택한 후, 메모리에 로딩한다. 단 가변부에 있는 객체는 쉽게 교체할 수 있어야 하므로, Template Method나 Strategy와 같이 동일한 계약 상황(인터페이스를 구현하거나 Abstract를 상속하는 형태)을 유지해야 한다. 

     

    눈치 있는 독자는 이 구조를 어디서 많이 보았다고 생각할 것이다. 바로 스프링(Spring)과 같은 Dependency Injection Con tainer를 설명한 것이다. 좀 더 자세한 설명을 원한다면 필자의 블로그(종속성을 관리하는 방법 - http://arload.wordpress.co m/2008/12/07/dependency_managment/)를 방문하길 바란다. 

     

    아키텍팅의 핵심 SoC, 그리고 문제 중심으로 바라보기 

    소프트웨어 공학에 관심이 있는 독자라면 누구나 걱정거리의 분리, 관심거리의 분리라고 말하는 SoC(Separation of Concerns)를 들어본 적이 있을 것이다. 필자는 얼마 전 SoC와 복잡성에 대해 논쟁을 주고받은 적이 있다. 필자는 이 논쟁을 통해 SoC와 소프트웨어 아키텍팅의 가치/패턴의 연관성에 대해 다시 생각할 수 있었다. SoC라는 단어를 세상에 처음 발표한 Edsger W. Dijkstra의 정의는 다음과 같다. 

     

    “focusing one’s attention upon some aspect” 

     

    여러 가지 측면들을 동시에 생각하기는 힘드니, 잘 나누어 각각의 요소에 한 가지 관점만을 적용해 바라보겠다는 의미다. 흔히 분할 후 정복(Divide and Conquer)과 일맥상통하는 말이라 할 수 있다. 다양한 이해 당사자의 요구, 프로젝트의 특수한 상황, 잘못 설계된 아키텍처로 인해, 하나가 바뀌면 연쇄적으로 다른 곳에 변화가 발생하는 파문 효과(Ripple Effect)를 종종 만나게 된다. 

     

    이때 우리가 특히 중점을 두어 관리해야 하는 것이 종속성(Dependency)인데, 이러한 종속성이 유발시키는 강결합을 무너뜨리는 좋은 가이드라인을 제시하는 것이 바로 패턴이다. SoC를 얼마나 잘하느냐가 아키텍팅의 성공과 실패를 결정하므로, 패턴 기반의 좋은 참조 아키텍처(Reference Architecture), 특히 패턴 기반으로 구축된 시스템을 평소에 틈틈이 공부할 필요가 있다. 그 이유는 패턴은 군을 이뤄 사용되기 때문이다. 특히 도메인에 한정될수록 사용되는 패턴 군들은 더 제한적이다. 

     

    어느 날 갑자기 여러분의 상사가, 모든 환경에서 좋은 성능을 보이는 웹 서버를 설계(SoC)하라고 한다면 어떻게 해야 될까? 먼저 비슷한 선례, 즉 참조할 만한 아키텍처가 있는지 찾아볼 것이다. 

     

    유명한 TAO/ACE의 창시자인 Douglas C. Schmidt 박사는 이에 대한 대답으로 주고받는 파일이 사이즈, 클라이언트의 다양한 요청 속성(예를 들면 요청 빈도, 요청시 얼마나 오랫동안 세션을 맺고 있는지 등), 고객의 웹사이트 접근 경로 등을 고려해 환경에 맞게 적절한 전략을 변경할 수 있는 웹서버 JAWS의 소스 코드와 아키텍처를 공유했다(필자의 JAWS 아키텍처 동영상 강의- http://www.devpia.com/net2/EvaCast/Lecture/ ?cu=view&r=11 참조). 

     

    이렇게 괜찮은 참조 아키텍처를 발견했다고 하더라도, 왜 이렇게 아키텍처가 구축되었는지에 대한 문제 상황의 깊은 이해가 요구된다. 어떤 부분에는 유연성을 중심으로 설계했고, 또 다른 부분은 유연성보다는 성능을 중심적으로 설계했다. 왜 이렇게 결정했을까? 

     

    결국 이렇게 구축한 시스템의 의도를 잘 파악하기 위해서는 패턴을 하나의 해결책으로 바라보는 것이 아니라, 패턴의 의도와 다루는 문제들을 중심적으로 바라볼 필요가 있다. 특히 아키텍처가 거대해질수록 이러한 접근법은 더 효율적이다. 

     

    좋은 패턴 서적 소개 

     

    현재 발표된 다양한 패턴 서적들을 소개하니 여러분의 프로젝트나 관심 분야 서적들을 골라 읽어보길 바란다. 

     

    ● PLoPD 시리즈 
    해마다 다양한 곳에서 여러 종류의 PLoP라는 유명한 패턴 학회가 열린다. 그야말로 패턴의 보고이며, 시중에 나온 새로운 도메인의 패턴 서적들은 거의 다 이 학회를 한번 거쳤다고 해도 과언이 아닐 정도로 영향력을 행사하며 다양한 도메인을 폭 넓게 다루고 있을 뿐만 아니라, 소프트웨어계의 거장들을 만날 수 있는 좋은 학회이다. 이 학회에서 발표된 패턴 중에 괜찮은 패턴들을 묶어 PLoPD(Program Language of Program Design)라는 서적으로 출간되는데 이것 바로 PLoPD이다. 

     

    ● POAD(Pattern Oriented Anaysis Design) 
    그야말로 Pattern Driven Design이라고 불러도 좋을 만큼, 패턴을 활용해 분석이나 적합한 전략/전술을 선택하는 가이드라인을 제공하는 서적이다. 아마존에서 호평을 받았지만, 국내에서는 잘 소개되지 않았다. 학교 도서관이나 주위에 있는 분이 가지고 있다면 꼭 읽어 보길 권한다. 

     

    ● Holub on Patterns(실전 코드로 배우는 실용주의 디자인 패턴) 
    응용프로그램 2개를 기반으로 GoF패턴 23개를 모두 다루고 있는 서적이다. GoF 패턴의 가치를 느낄 수 있는 서적이며, 특히 패턴 군(Compound Pattern)들에 대한 좋은 시선을 제공하는 서적이다. 거기다 패턴을 만드는 5원칙을 역자가 직접 추가해 넣어주었기 때문에 패턴을 학습한 이들에게도 좋은 서적이다. 

     

    ● Remoting Patterns 
    POSA2가 오픈소스 CORBA인 TAO, ACE에 사용된 패턴을 소개한다면, 조금 더 최신 기술인 .NET Remoting, EJB, Web Service, CORBA에 사용된 분산 패턴들을 소개하는 책이다. 겉보기에는 POSA2와 다른 패턴을 소개하고 있는 것 같지만 다시 한 번 되짚어보면 POSA2에 소개된 패턴과는 내부 맥락이 같다. 이 서적을 통해 최신 분산 기술에 정리된 내용을 체계적으로 정리할 수 있고 다양한 분산 객체들의 아키텍처를 비교, 평가할 수 있다. 

     

    ● xUnit Test Patterns 
    TDD가 이슈가 되면서 테스팅(Testing)에 대한 관심이 매우 높아졌다. VS.NET과 이클립스(Eclipse) 역시 이러한 흐름에 발 맞춰 다양한 테스팅 관련 기능을 제공하고 있다. 그 중 여러분이 가장 자주 사용하는 것은 아마 xUnit(JUnit, NUnit, CUnit…)일 것이다. 이 책은 유닛 테스팅(Unit Testing)을 하기 위해 어떻게 테스팅 코드를 작성하고 리팩토링을 하는지를 자세히 설명한다. 

     

    ● Patterns For Fault Tolerant Software(耐고장성 소프트웨어를 위한 패턴) 
    퀄러티(Quality) 검증의 TDD와 방어적인 프로그래밍을 넘어서, 내부적인 고장에도 스스로 복구 및 조치를 취할 수 있는 신뢰성 있는 소프트웨어를 개발하는 데 지침이 되는 서적이다. Error Handling/Mitigation, Fault를 Detection하는 다양한 패턴들을 소개한다. 

     

    ● PEAA(Patterns for Enterprise Application Architecture) 
    리팩토링의 창시자인 Martin Fowler가 쓴 책으로, 엔터프라이즈 애플리케이션을 설계하기 위한 다양한 패턴이 소개돼 있다. 물론 POSA나 PLOP에 나온 패턴을 현대적으로 바꾼 것이 대부분이지만, Martin Fowler의 과거 기술, 용어, 개념들을 현대에 맞게 변형, 확장하는 능력을 다시 한 번 느낄 수 있는 서적이다. SI 분야에 속해 있다면 역서라도 꼭 읽어보길 권한다. 

     

    ● Enterprise Integration Patterns 
    EAI를 위한 메시징(Messaging) 처리에 중점을 둔 서적이다. 어떻게 메시징 시스템을 만드는지 자세히 설명했고, BPM/ EAI/Enterprise SOA에 관심이 있다면 읽어볼 필요가 있다. 

     

    ● Real-Time Design Patterns 
    Real-Time 시스템을 구축할 때 가장 고려해야 할 것이 예측성이다. 우선순위를 고려하고 주어진 데드라인 안에 작업(Job)이 수행될 수 있는지 판단하는 것이 가장 핵심이다. 만약 현재의 요청한 작업이 제한 시간 안에 답변을 줄 수 없을 것 같다면, 차선책을 선택하는 형태로 설계되어야 한다. 이러한 우선순위와 스케줄링에 관심 있는 개발자라면 도움이 될 서적이다. 

     

    ● Refactoring to Patterns 
    패턴을 활용하여 리팩토링하는 방법을 소개하는 서적이다. Martin Fowler의 리팩토링을 읽은 독자라면 그 다음 이 서적을 읽어 보길 권한다. ‘패턴을 활용한 리팩토링’이라는 제목으로 역서가 출간되었다. 

     

    ● Architecting Enterprise Solutions 
    고성능과 인터넷 기반의 시스템을 구축할 때 유용한 패턴 서적으로, 실제 실무에 인프라를 구축하는 개발자에게 적합하다. 시스템 제어, 성능 측정, 적절한 서버 수 산정과 같은 유용한 가이드라인이 제공된다. 

     

    끝나지 않는 패턴 이야기-PLoP 

     

    지구상에서는 여전히 많은 패턴들이 계속 발표되고 있다. 그 중 여러분에게 가장 소개하고픈 것은 매년 열리는 PLOP 학회에서 발표된 논문이다. 

     

    - PLoP(미국에서 열리는 기반 학회) http://arload.wordpress.com/2008/04/02/plopfestival/ 
    - EuroPLoP(유럽에서 열리는 패턴학회 자료) http://arload.wordpress.com/2008/08/11/euro_plop_paper/ 

     

    관심 있는 독자는 지난 10년간 발표된 패턴들을 끊임없이 학습하길 권하며 이 글을 마친다. 그 이외에도 다양한 패턴 학회가 존재하지만, 언어적인 제약이나 자료 수집의 어려움 때문에 일부만 소개한다. 

     

    - ChiliPLoP(Hot Topic을 위주로 다루는 패턴 학회) 
    - KoalaPLoP(오스트렐리아인을 위한 패턴 학회) 
    - MensorePLoP(일본에서 열리는 패턴 학회) 
    - SugarLoafPLoP(라틴 아메리카인들을 위한 패턴 학회) 
    - VikingPLoP(북 유럽 사람들을 위한 패턴 학회) 

     

    참고자료 
    1. Rick Kazman, 소프트웨어 아키텍처 이론과 실제, 에이콘출판 
    2. Rick Kazman, 아키텍트가 되기 위해 갖추어야 할 덕목 - http://arload.wordpress.com/2008/06/13/rickkazman/ 
    3. The JAWS Adaptive Web Server - http://www.dre.vanderbilt.edu/JAWS/, 
    http://www.devpia.com/net2/EvaCast/Lecture/?cu=view&r=11 
    4. Edsger W. Dijkstra, “On the role of scientific thought” - http://www.cs.utexas.edu/users/EWD/transcriptions/EWD04xx/EWD447.html 
    5. 손영수, 미워도 다시 보는 패턴 이야기, 마이크로소프트웨어 2007년 8월호

     

    [필자소개]
    손영수 arload@live.com , http://www.arload. net|아직 아키텍트는 아니지만, 훌륭한 아키텍트를 꿈꾸며 부지런히 살고 있는 개발자이다. 데브피아 소프트웨어공학 스터디인 EvaCast를 6년째 이끌고 있으며, 이 땅의 개발자들을 위해 스터디 멤버들과 함께 한 결과물을 무료로 http://www. EvaCast.net을 통해 공유하고 있다. 부족한 실력이지만 지식을 나눌 때는 누구보다 ‘부자’라는 자부심을 가지고 지식 나눔에 힘쓰고 있다. Pattern 전도사를 꿈꾸고 있으며 PLoP와 같은 Pattern 학회를 국내에 만드는 것이 꿈이다.
    Posted by 생각처럼
    , |

    http://sasperger.tistory.com/76

     

    Tortoise SVN 속도 향상 및 자동 업데이트

    2009/04/13 16:44
    google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);

    Tortoise SVN 속도 향상 및 자동 업데이트

    개발자에게 있어 SVN은 편리함과 안전성을 위해 꼭 필요한 툴이죠...
    그런데 이렇게도 좋은 툴이, 
    컴퓨터에 나름의(?) 부하를 주지요.. ㅋㅋ
    이런 부하를 조금이라도 줄이기 위해 여러 곳에서 수집한 방법들을 적어 봅니다.
    아래 방법으로 저는 속도향상을 체감했습니다.


    Tortose SVN 속도 향상

    SVN 속도향상을 위해 아래 2가지 방법을 적용합니다.
    1. 로그 캐싱 사용안함



    SVN-설정-로그캐싱 탭에서 [로그 캐싱 사용] 체크 해제, [모호한 URL들을 허용합니다] 체크해제, [모호한 UUID를 허용합니다] 체크해제

    2. 아이콘 오버레이 사용안함 (권장하지는 않음)
      - 아이콘 갱신이 안됩니다.


    오버레이 탭에서 [상태캐시]를 [없음]으로 선택
    2) [제외경로]에 로컬디스크의 루트 경로들을 적어줌 (예 c:\* d:\*)
    3) [포함경로]에 SVN 체크아웃 디렉토리 경로를 적어줌 (예 d:\SVN_Source\*)
       - 경로가 여러개면 엔터치시고 경로를 더 적어주세요)

    1~2 항목 수행 후에 작업관리자에서 TSVNCache.exe를 Kill 해주세요..



    Tortoise SVN 자동 업데이트


    1. 아무 디렉토리에다 batch 파일을 만듭니다.
       예제로, d:\SVN_AutoUpdate.Bat로 텍스트 파일 형태로 만듭니다.

    2. 파일의 내용으로는 아래와 같이 적어주세요
      - SVN 설치 경로\bin\TortoiseProc.exe /command:update /path:"SVN 체크아웃폴더" /coseonend:자동으로 창 당기 의 형태입니다.
    예) 한줄로 적어야 합니다.(한줄로 적으니 오른쪽 글자들이 짤려서.. 저는 줄을 나눴습니다... "exit"는 도스창을 닫기 위한 명령이므로.. 한줄 띄워주세)

    "C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe" /command:update /path:"d:\SVN_Source\"
     /closeonend:1

    exit



    3. 파일 저장 후,
    1) 시작-제어판-예약된 작업-[예약작업 추가] 실행
    2) 창이 뜨면 [다음] 클릭 -  [찾아보기]로 위에서 만든 bat 파일을 선택
    3) 작업실행에 업데이트 주기를 선택 (저는 "매일"을 선택했습니다.) - [다음]클릭
    4) 업데이트 할 시간을 적고 [다음]
    5)  본인 컴퓨터의 암호 및 계정을 입력하고, [다음] 클릭
    6) [마침]을 클릭하면 이 작업의 고급 속성 열기 체크 후 [마침] 클릭
    7) 속성 창에서, 일정, 설정 등 원하는데로 설정 후 확인
    8) 만들어진 예약작업에서 오른쪽 버튼-[실행]을 통해 정상 동작 하는지 확인 해봅니다.
    9) 끝.

    Written by 투덜이

    Posted by 생각처럼
    , |

    1. 먼저 사용하기 위해서는 using System.IO;를 선언해야합니다. 
    2. Path객체를 특별히 따로 선언해서 사용하는 것이아니라, static 메서드를 활용하여 경로부분을 원하는데로 다룰 수 있게 됩니다.

    • Path.ChangeExtension(string path) : 경로문자열에서 확장명 부분을 변경합니다.
    • Path.GetDirectoryName(string path) : 경로문자열에서 파일이름을 제외한 경로부분(디렉터리명)을 반환 합니다.
    • Path.GetExtension(string path) : 경로문자열에서 확장명 부분만 반환합니다.
    • Path.HasExtension(string path) : 경로문자열에서 확장명 부분이 있는지 확인하여 bool값으로 반환합니다.
    • Path.GetFileName(string path) : 경로문자열에서 파일이름부분을 반환합니다.
    • Path.GetFileNameWithoutExtension(string path) : 경로문자열에서 확장명부분을 제외한 파일이름을 반환합니다.
    • Path.GetFullPath(string path) : 경로문자열에 해당하는 절대경로를 반환합니다.
    • Path.GetPathRoot(string path) : 경로문자열에서 루트디렉터리(드라이브 명) 부분만 반환합니다.
    • Path.GetRandomFileName() : 파일 또는 폴더명으로 사용가능한 임의의 문자열을 반환합니다.
    • Path.GetTempFileName() : 임의로 임시파일을 생성 후, 생성된 임시파일의 경로를 반환합니다. 임시파일은 시스템의 지정된 임시폴더(Temp)에 생성됩니다.
    • Path.GetTempPath() : 시스템에 지정된 임시폴더의 경로를 반환합니다.
    • Path.IsPathRooted(string path) : 매개변수로 지정된 경로문자열이 상대경로인지 절대경로인지 파악하여 bool값으로 반환합니다. 절대경로이면 true를 반환합니다.
    • Path.GetInvalidFileNameChars() : 파일이름으로 부적합한 문자들의 배열을 반환합니다.
    • Path.GetInvalidPathChars() : 경로명으로 부적합한 문자들의 배열을 반환합니다.

     

    출처 : http://thankee.tistory.com/27

    Posted by 생각처럼
    , |

    출처 Most Valuable Person | 이호주니
    원문 http://blog.naver.com/truhojun/40034462447

    내용 요약

     

    MFC로 작성한 DLL을 사용하는 C# Application을 완성하여 개발 PC에서는 잘 사용하고 있었다. 그러나 재배포를 위해 Setup Project를 만들고 배포 가능한 패키지를 만들어 Visual Studio 2005가 설치되어 있지 않은 다른 PC에서 인스톨하여 실행한 결과 런타임시 HRESULT: 0x800736B1에러가 뜨면서 예외가 발생하였다

     

    해결방법

    배포판을 만드는 방법은 두가지가 있다

     

        1. Visual Studio의 Deployment Project를 이용하여 배포판 패키지 작성

        2. XCopy Deployment

     

    2번 방법은 manifest-base binding을 지원하는 Windows XP Home Edition, Windows XP Professional, Windows Server 2003에서만 사용 가능하고, XP이전의 운영체제에서는 반드시 1번 방법을 사용하여야 한다

     

    다음은 배포판 패키지를 작성하는 방법이다(해석하기 귀찮아 MSDN을 복사하였다)

     

    1. From the Project menu, choose Add and click File.

     

    2. Find the folder containing MyApplication.exe and MyLibrary.DLL and select them both.

     

    3. In the File System window, right click on Application Folder, point to Add and clickCreate to create a new folder. Call it MyLibrary.

     

    4. Click on Application Folder again, select MyLibrary.DLL and drag it to the MyLibrary folder.In Solution Explorer, under your project in Detect Dependencies you should see that the Visual Studio detects dependencies on MFC80.dll and MSVCR80.dll. You need to add the corresponding Merge Modules for these DLLs.

     

    5. From the Project menu, point to Add and click Merge Module. Select Microsoft_VC80_CRT_x86.msm and Microsoft_VC80_MFC_x86.msm, and click OK.

    (The debug versions of these merge modules are named Microsoft_VC80_DebugCRT_x86.msm and Microsoft_VC80_DebugMFC_x86.msm.

    For deploying 64-bit applications to a 64-bit operating system, select the merge module for the corresponding platform. For x64, select Microsoft_VC80_CRT_x86_x64.msm and Microsoft_VC80_MFC_x86_x64.msm; for Itanium, Microsoft_VC80_CRT_x86_ia64.msm and Microsoft_VC80_MFC_x86_ia64.msm.

    )

     

    이렇게 설정한 후 빌드하면 Installable 화일이 생기고, 배포후 설치하면 된다

     

    이래도 안되면 MSDN에 나와있는 아래와 같은 방법으로 해보기 바란다

     

    위에서와 같이 패키지 Project를 만들고

     

    1. From the Project menu, choose Add and click File.

     

    2. Find the folder containing MyApplication.exe and MyLibrary.DLL and select them both.

     

    3. In the File System window, right click Application Folder, point to Add and click Createto create a new folder. Call it MyLibrary.

     

    4. Click Application Folder again, select MyLibrary.DLL and drag it to the MyLibrary folder.InSolution Explorer, under your project in Detect Dependencies you should see that Visual Studio detects dependencies on MFC80.dll and MSVCR80.dll. You need to add a corresponding folder for these assemblies from the \vc\redist folder.

     

    5. Open %PROGDIR%\Microsoft Visual Studio 8\VC\Redist\x86 in Windows Explorer.

     

    6. Holding the Ctrl key, click the folders Microsoft.VC80.CRT and Microsoft.VC80.MFC. Drag these folders to Visual Studio and drop them into the Application folder.

     

    7. Repeat step 7, but this time drag the folders to the MyLibrary folder.

        You may see a message from Visual Studio saying that you are including a DLL that is part of a Merge Module. This is exactly what you want to do, so click No to indicate that you do not want to use an MSM for this DLL.

        You need mfcm80.dll and its Unicode version mfcm80u.dll only if you use MFC/Winforms integration. Otherwise you can remove these DLLs from your setup.

        You need msvcm80.dll only if you are using managed code in your applications, for example, if your projects are built with /clr or /clr:pure.

        If mfcm80.dll, mfcm80u.dll, or msvcm80.dll is included in the setup project, an installation of the .NET Framework is required. Your setup won't work without .NET Framework 2.0 installed on the target machine.

        For debug installation, change CRT to DebugCRT and MFC to DebugMFC in the previous step.

        For deploying 64-bit applications to 64-bit operating systems, use \vc\redist\amd64 or \vc\redist\ia64.

     

    그런데.....

     

    나같은 경우 위의 두가지 방법다 통하지 않았다

     

    그래서 끈질긴 검색 끝에 찾아낸 방법은 Release Version으로 배포하는것..

    이때 DLL 프로젝트 속성에서 구성속성->매니패스트도구->어셈블리 ID를 2로 바꿔줘야 한다

    (이때 주의할 것은 다시 개발을 위해 디버깅 모드로 돌아가면 어셈블리 ID를 공백으로 두어야 한다)

     

    거기에 \Program Files\Microsoft Visual Studio8\Sdk\v2.0BootStrapper\Packages\vcredist_x86에 있는 vcredist_x86.exe까지 같이 배포하여 설치하여 주면 문제가 없을 것이다.

    이 구성요소를 패키지 프로젝트에 포함 시킬때는

    패키지 프로젝트의 속성에서 필수 구성요소를 클릭하여 Visual C++ 런타임 라이브러리(x86)을 체크하여주면 설치시 같이 설치된다

     

    Reference

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=166919&SiteID=1

    http://msdn2.microsoft.com/en-us/library/aa985617(VS.80).aspx

    http://msdn2.microsoft.com/en-us/library/ms235317(VS.80).aspx

    Posted by 생각처럼
    , |

    출처 카페 > 게임 개발자 네트워크 (jz.. | 자존심
    원문 http://cafe.naver.com/jzsdn/12859

    비단 VC.NET 2005로 컴파일 된 프로그램뿐만 아니라 다른 버전의 컴파일러로 컴파일된 프로그램은 해당 버전의 컴파일러의 필수 라이브러리를 배포해야 합니다.

     

    그러나 VC 6.0이나 VC.NET 2003등은 워낙 다른 프로그램들(VC6.0이나 VC.NET 2003으로 컴파일된)이 이미 윈도우즈에 필수 DLL들을 인스톨해 놓은 경우가 많아 따로 배포하지 않아도 문제되는 경우가 거의 없더군요.

     

    근데, VC.NET 2005의 경우는 마이크로소프트가 배포하는 방식을 좀 다르게 한 것 같습니다.

     

    참조

    http://serious-code.net/moin.cgi/RedistributingVisualCppRunTimeLibrary

    http://msdn2.microsoft.com/ko-kr/library/zebw5zk9(VS.80).aspx

     

    Side-by-side Assembly 라는 방식이라는 데, 암튼 좀 귀찮아 졌습니다.

     

    그래서, 기존에 windows/system32에 dll이 들어가던 것이 windows/winSxS에 들어가게 되었고

    기존에 실행화일과 dll이 같이 있으면 해결되었던 것이 이제는 그냥은 통하지 않게 되었다고 합니다. 좀 뭔가 더 해주어야 한답니다.

     

    해결방법은 위의 링크에서도 이야기합니다만 다음과 같습니다.

     

    1) VC.NET 2005 재배포용 패키지를 설치한다.

     

    아래 링크에서 다운받거나

    Visual C++ 2005 Redistributable Package (x86) 
    Visual C++ 2005 Redistributable Package (x64) 
    Visual C++ 2005 Redistributable Package (ia64) 

    Visual C++ 2005 SP1 Redistributable Package (x86) 
    Visual C++ 2005 SP1 Redistributable Package (x64) 
    Visual C++ 2005 SP1 Redistributable Package (ia64)

     

     

    C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86

    에 있습니다.

     

    2) 필요한 것을 같이 설치한다

     

    릴리즈 버전은 C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86
    디버그 버전은 C:\Program Files\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist

    에서..

    사용하는 dll과 함께 Microsoft.VC80.*.manifest 도 포함해서 실행파일과 같은 폴더에 넣어주어야 합니다.

     

     그럼 필요한게 뭔지 어떻게 아느냐..라고 물어보시는 분들을 위해 다음과 같은 프로그램이 있다는 것을 상기시켜 드립니다.

     

    http://www.dependencywalker.com

     

    VC 2005를 깔았다면

    C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin" 폴더에 depends.exe라는 이름으로 설치되어 있습니다.

     

    위의 프로그램은 해당 프로그램화일이 어떤 dll을 참조하는 지 알려줍니다.

    Posted by 생각처럼
    , |

    최근에 달린 댓글

    최근에 받은 트랙백

    글 보관함