Wednesday, January 07, 2009
Retabbed
Login | Register
아티클
  Search
DotNetNuke 3.2.2에서 4.4.1로 업그레이드
DotNetNuke 3.2.2에서 4.4.1로 업그레이드

닷넷누크 3.x버전과 4.x버전의 가장 큰 다른점은 소스의 디렉토리 스트럭쳐가 완전히 바뀌었다는 것이다. 이제는 웹사이트의 경우 website라는 디렉토리 아래서 따로 관리가 되는 방법으로 바뀌었다. 문제는 이렇게 소스 디렉토리의 구조가 바뀜으로써 더이상 자동으로 소스를 업그레이드 해가는 방식이 불가능해 졌다는 것이다. 어쩌면 ASP.NET 2.0으로 그동안 개발한 모듈을 옮겨 가려면 디렉토리 바뀌는 정도의 문제는 사소한 것 일수도 있다.

1단계

닷넷누크 4.4.1 소스를 푼다. 그러면 크게 website와 library두개의 디렉토리가 생긴다. 이제 그동안 만들어진 모듈들을 옮겨올 차례인데 website 아래 DesktopModules로 갈지 library로 갈지 고민이 된다. 그냥 옛날 식으로 DesktopModules로 간다.(나중에 생각해 보니 잘못한 결정이다. VS 2005는 website를 빌드하면 그아래 폴더들을 다 빌드하려고 덤비는 통에 아주 귀찮다.)

2단계

VS 2003프로젝트를 2005로 프로젝트로 변환한다. VS 2005에서 예전 csproj, vbproj파일을 로드 하면 알아서 변환해 준다. 모듈 프로젝트가 ProjectType 이 "Local"로 된 것들이 있는데 이건 제대로 변환이 안된다.(이유는 모른다) 그냥 "Web"으로 고쳐주고 한다. 2005는 웹 프로젝트는 두단계로 변환하는데 일차 변환이 되고 나면 프로젝트 메뉴에서 Convert to Web Application을 해준다. 웹 프로그램의 구조가 변경되었기 때문이다. 디자인 클래스가 별도의 파일로 분리된 것이 가장 큰 특징이다.

변환중에 발견한 재미있는 사실은 Solution Explorer에서 보여주는 vb 프로젝트와 cs프로젝트의 형식이 완전히 다르다는 것이다. 왜 그렇게 했는지 아무리 봐도 이해는 안된다.

3단계

DotNetNuke DB를 백업한다. 새로은 DB를 하나 생성하고 그곳에 강제로 복원한다.(무슨 방법이든 DB를 하나 복사하면 된다. 이방법이 좋은 것은 백업을 자동으로 만들어 두게 된다는 것이다.)

Portals 디렉토리도 복사한다. website/Portals로 복사하면 된다. 각종 스킨, 포털별 사용자 파일 들이 보관되어 있다.

4단계

Web.config을 수정한다. DB를 새로운 곳에 옮겼으니 SQLProvider관련을 바꿔준다. 닷넷누크 4.x에서는 이게 두군데 있다. 두군데다 잘 바꿔줘야 한다. 한곳만 바꾸면 해괴한 에러가 난다. 정말 조심해야한다. 머쉰 디크립션 관련 내용도 바꾸는 것(예전것을 그대로 복사)을 잊지 말자. 이게 잘못되면 패스워드 인크립션이 틀려져서 아무도 로그인을 못한다. object qualifier, object owner도 정확하게 설정하자. 통상 object owner 는 dbo qualifier 는 빈칸이다.(기본이 dnn_로 되어 있는데 예전 기본은 이것이 아니었다.)

5단계

업그레이드를 실시한다. 설치한 디렉토리로 버추얼디렉토리를 하나 만들고 ASP.NET 2.0으로 설정한다. 버추얼디렉토리가 가리키는 폴더에 대하여 ASPNET 사용자에게 쓰기 권한도 주는 것을 잊지 말자. 메인 페이지를 열면 자동으로 업그레이드가 실시된다. 업그레이드 중 DB스크립트에서 오류가 발생하면 절대로 그냥 넘어가면 안된다. 단 한개의 오류도 없게 하라. 그렇지 않으면 작업 다 해 놓고 후회할 일이 생긴다. 통상 3.x에서 4.x로 가면 10개 이상의 스크립트가 실행된다. 주로 생기는 오류는 그동안 PK나 FK로 정의 되지 않았던 필드가 키로 정의 되면서 중복문제 등이 발생하는 것이다. 에러로그를 확인하고 해당 DB를 수정하여 오류가 발생하지 않도록 해야 한다.

필자의 경우에는 검색엔진관련 DB의 키워드에 오류가 있었다. 혹시 같은 경우가 발생할 사람들을 위해서 중복되는 키워드를 지우는 스크립트를 올려둔다.

delete searchword from searchword
 inner join (select word from searchword
  group by word
  having count(*) > 1) as err on err.word=searchword.word

오류 발생후 다시 시도하려면 3단계에서 만들어둔 백업을 다시 복원하고 필요한 DB수정을 하고 업그레이드를 실시한다. 한번 업그레이드를 하고 나면 자동으로 안하주므로 아래와 같이 URL을 준다.

http://localhost/DotNetNuke4/Install/Install.aspx?mode=Install

6단계

정상적으로 모두 잘 되었으면 초기 화면이 나와야 한다. 안나오고 오류가 나는 대부분의 경우는 버추얼디렉토리의 이름이 변경되어 포털 Alias를 찾지 못하는 경우이다. 이미 사이트가 뜨지를 않으므로 DB를 바로 수정하여 Alias를 조정해 준다. PortalAlias 테이블이다.

7단계

이제 프로그램을 포팅할 순서다. ASP.NET 2.0으로 가면서 닷넷누크는 새로운 Authentication정책에 맞추어 보안관련 사항에 대대적인 수술을 했다. 만들어둔 프로그램 중에서 사용자 로그인 관련 코드가 있으면 전면 새로운 코드로 교체해야 한다. 컴파일은 되지만 제대로 동작을 하지 않는다. 컴파일시 더이상 사용하지 않는 API라는 경고가 나오면 무시하지 말고 자세히 본다.

8단계

이제 사이트 설정들을 조정할 순서다. 가장 많이 바뀐곳은 역시 사용자 관리 부분이다. 많은 메뉴가 추가 되었으니 차분히 살펴봐야 한다.(이거 다 한글화 해야 하는데 참 따분하다.) 예전 부터 있던 Friendly URL이라는 것이 있는데 이게 한글은 잘 안된다. 인터넷의 모든곳에 이제 한글이 완전하게 되지만 아직 URL의 한글은 어색하기만 하다. Friendly기본 설정은 탭이름(페이지 이름)을 URL에 보여주는 것인데 한글은 깨지는 경우가 많고 심지어 심각한 오류를 낼 경우도 있으므로 이기능을 죽인다. Web.config.에서

<add name="DNNFriendlyUrl" type="DotNetNuke.Services.Url.FriendlyUrl.DNNFriendlyUrlProvider, DotNetNuke.HttpModules.UrlRewrite" includePageName="false" regexMatch="[^a-zA-Z0-9 _-]" />

줄은 찾아서 새칠한 부분과 같이 false로 바꿔준다. ASP.NET 2.0은 web.config을 바꿔도 설정을 봐가면서 예전과 같이 무조건 프로그램을 리스타트 하지 않는다. 위 설정도 ASP.NET의 입장에서는 별것이 아니므로 프로그램을 리스타트 해주지 않는다. 그래서 Host메뉴에 보면 application restart라는 기능이 추가된 것을 볼 수 있다. 위 설정을 바꾼후에는 프로그램을 리스타트 해준다.


게시일자 Saturday, March 24, 2007 (Archive on Saturday, March 31, 2007)
게시자: 사이트관리자  저자: 사이트관리자
돌아가기

평점:
평가:
평가 올리기

현재평점평균: 5.00
평점: 5
Terms | Privacy | host
Copyright 2005 Code99.NET
 | 아티클 | 자료실 | 블로그 | Q&A | 관리자에게