728x90

 

Windows 10으로 업그레이드 후 Windows 7에서 잘 사용하던 Windows XP Mode 사용이 불가해 졌다. 

Windows 7 PC에 다시 설정하고 깔자니 작업할 때마다 잘 사용하지 않는 PC 자리로 가서 작업하는게 번거로 워서 찾아보니 누군가가 정리 해놓은 자료가 있어서 바로 테스트에 들어갔다.

결과론적으로 설치에는 성공!!

 

일단 Windows XP Mode 설치 파일을 다운로드 받아야 한다. 

 

다운로드 : http://www.microsoft.com/ko-KR/download/details.aspx?id=8002

 

그리고 7-Zip이 깔려 있어야 한다. 

나 같은 경우 이미 설치가 되어 있어서 별도로 설치하진 않았다. 

 

 

 

Windows XP Mode 설치 파일에서 마우스 오른쪽 클릭 -> 7-Zip -> 압축파일 열기를 클릭한다. 

 

 

Sources를 더블 클릭한다.

 

 

 

xpm 파일 열기를 클릭한다. 

 

 

 

아래 화면이 나오면 원하는 위치에 압축 풀기를 한다. 압축을 푼 경로로 가서 VirtualXPVHD 파일을 VirtualXPVHD.vhd. 로 파일명을 변경한다.

 

 

이제부터는 Hyper-V 활성화를 진행해야 한다. 

Win+X를 누른 후 제어판 - 프로그램 및 기능 - 왼쪽에 보이는 Windows 기능 켜기/끄기 를 선택한다. 

또는 Win+R, Win+S 클릭 후 optionalfeatures 명령어를 입력후 Enter를 클릭한다. 

 

찾아보면 Hyper-V 라는 기능이 보일 거다. 체크가 풀려 있는데 체크 해를 한다. 체크 후 확인을 누르면 시스템에 재부팅 된다.

 

 

 

 

재부팅 후 Hyper-V 관리자를 킨다. 

 

Win+X - 제어판 - 관리도구 - Hyper-V관리자 가 보인다. 

 

 

Hyper-V 관리자를 킨다. 

만약에 가상PC에서 네트워크 사용을 해야 한다면 아래와 같이 가상 스위치 관리자를 만들어야 한다.

(처음에 이 설정을 하지 않고 XP-Mode 설치 시 실행은 됐는데 인터넷이 XP-Mode에서 네트워크가 되지 않았다. 그런데 설정 후에는 Window 10 에서 인터넷이 되지 않았다.) - 이부분은 테스트가 필요할 듯!! 

네트워크 연결이 필요하지 않은 경우 이 부분은 제외하고 설치를 진행해도 상관없다. 

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0582485985170300"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0582485985170300"
     data-ad-slot="1435746307"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

 

 

 

 

이제 다시 XP - Mode 사용을 위한 설정을 한다. 

 

 

 

 

 

 

 

 

 

찾아보기 후 경로는 아까 7-Zip으로 압축을 풀었던 경로에서 이름을 바꾼 VirtualXPVHD를 선택한다.

 

 

 

 

XP-Mode가 추가 된 것을 아래 확인 할 수 있다. 

 

 

XP-Mode를 선택 후 연결 클릭을 하면 가상 컴퓨터 연결 창이 뜬다. 

동그라미 친 부분 (전원)을 클릭한다. 

최초의 설치 시 윈도우 설치를 진행한다. 

 

 

처음 접속 하는 경우 Windows XP 설치가 되고 

 

Windows 로그인 후 XP를 사용 할 수 있다. 

 

 

현재 네트워크 연결 된 부분에 대하여 테스트가 필요하다. 

그 부분만 보완하면 그전에 Windows7에서 사용한 XP-Mode만큼 편하게는 아니지만 Windows 10에서도 Windows XP 사용할 수 있을 듯 하다. 

 

 

참고자료 : http://www.download3k.com/articles/How-to-add-an-XP-Mode-Virtual-Machine-to-Windows-10-or-8-using-Hyper-V-00770

728x90

'개발및업무 > 유용한 Tip' 카테고리의 다른 글

Windows 7 에서 Windows XP 사용하기  (0) 2015.10.06
IIS에서 MIME 형식 지정  (0) 2012.10.11
Exception에 관하여  (0) 2011.10.21
Http와 Https 차이  (0) 2011.10.18
[HTML] 숫자만 입력 받기  (0) 2011.09.20
728x90


Windows 7을 사용 중인데 회사에서 중요하게 사용되는 프로그램 중에 Windows XP에서만 설치해서 사용할 수 있는 프로그램이 있었다. 

그래서 뒤져보니 Windows XP mode 를 사용할 수 있다는 방법을 알아냈다. 

내용은 간단하다 Windows 7에 가상머신으로 Windows XP를 설치해서 사용할 수 있는 방법이다. 

몇 년 동안 잘 사용했었는데 PC를 Windows 10으로 업데이트 한 후로 Windows XP 모드 사용이 불가 했다. 

참고로 Windows XP mode는 Windows 7에서만 사용 가능하다. 그래서 Windows 7 PC에 다시 설치하면서 남기는 블로그이다. ㅠㅠ

추후 Windows 10에서 사용할 수 있는 방법이 생기면 그 리뷰는 따로 작성할 계획이다.


Windows XP mode 설명/다운로드 : http://windows.microsoft.com/ko-kr/windows7/install-and-use-windows-xp-mode-in-windows-7


위에 사이트로 들어가면 Windows XP Mode에 대한 설명이 자세히 되어있다. 

Windows 7이어도 Windows XP Mode를 설치할 수 있는 버전이 존재하기 때문에 본인의 버전 확인을 필히 해야 한다. 



Windows XP Mode 설치 방법 




다운로드는 Windows XP mode 설명/다운로드 페이지 제일 하단에 모두 표시 클릭!!!!


"Windows XP Mode를 다운로드 및 설치하려면"을  클릭 하면 화면이 펼쳐진다. 

거기서 "Windows XP Mode 페이지" 클릭하면 Windows XP Mode 다운로드 페이지로 연결된다. 


Windows XP Mode 다운로드 페이지 : http://www.microsoft.com/ko-KR/download/details.aspx?id=8002



그리고 다시 Windows XP Mode 설명 페이지로 돌아가서, 제일 하단에 모두 표시 클릭!!!


이번에는 "Windows 가상 PC를 다운로드 및 설치하려면"을 클릭한다.

거기서 "Windows 가상 PC 페이지"를 클릭하면 Windows Virtual PC 페이지로 연결 된다. 


Windows Virtual PC 다운로드 페이지 : http://www.microsoft.com/ko-KR/download/details.aspx?id=3702



설치 순서는 상관은 없는 것 같다. 

그런데 나 같은 경우 Windows Virtual PC 설치 후 Window XP Mode 설치를 하였다. 


참고자료 : http://windows.microsoft.com/ko-kr/windows7/install-and-use-windows-xp-mode-in-windows-7

http://www.betanews.net/article/555199 (윈도운 7안에 윈도우 가상머신)






728x90

'개발및업무 > 유용한 Tip' 카테고리의 다른 글

Windows 10에서 Windows XP 사용하기!!  (20) 2015.10.06
IIS에서 MIME 형식 지정  (0) 2012.10.11
Exception에 관하여  (0) 2011.10.21
Http와 Https 차이  (0) 2011.10.18
[HTML] 숫자만 입력 받기  (0) 2011.09.20
728x90



MIME 설정 방법 참고 페이지 : http://www.bek.me/index.php?document_srl=353709&mid=hpsserver


MIME Type 참고 페이지 : http://technet.microsoft.com/en-us/library/bb742440.aspx


Office 2007 신규 파일 포맷 MIME Type 참고 페이지 : http://www.bram.us/2007/05/25/office-2007-mime-types-for-iis/


MIME Type 참고 페이지(한글) : http://luna79.tistory.com/15

설명도 되어있다.



728x90

'개발및업무 > 유용한 Tip' 카테고리의 다른 글

Windows 10에서 Windows XP 사용하기!!  (20) 2015.10.06
Windows 7 에서 Windows XP 사용하기  (0) 2015.10.06
Exception에 관하여  (0) 2011.10.21
Http와 Https 차이  (0) 2011.10.18
[HTML] 숫자만 입력 받기  (0) 2011.09.20
728x90

아래 주소에서 퍼왔습니다.
http://babtingdev.tistory.com/trackback/302




try {
   ...
} catch (SQLException e) {}

보통 예외를 잡고는 아무것도 하지 않는 이러한 코드를 많이 작성한다. 예외 발생을 무시해 버리고 정상적인 상황인 것처럼 다음 라인으로 넘기겠다는 분명한 의도가 있는게 아니라면 연습 중에도 절대 만들어서는 안되는 코드이다.
이것은 예외가 발생하는 것보다도 훨씬 안좋은 상황을 만든다. 오류가 있는 건데 오류를 무시하고 계속 진행해버리기 때문이다.

try {
   ...
} catch(SQLException e) {
   System.out.println(e);
}

try {
   ...
} catch(SQLException e) {
   e.printStackTrace();
}

위 두개도 마찬가지로 사용해선 안될 코드들 이다. 예외는 처리되어야 한다.

예외를 처리할 때 반드시 지켜야 할 원칙은 한가지 이다. 모든 예외는 적절하게 복구되던지 아니면 작업을 중단시키고 운영자 또는 개발자에게 분명하게 통보되야 한다.

무의미하고 무책임하게 throws를 사용하는 개발자들도 있다. 처리하기 귀찮으니 그냥 메소드 선언부에 throws 를 써서 넘겨버리는 것이다. (아래 코드와 같이.)
public void method1() throws Exception {
}
try~catch로 Exception을 삼켜버리는 코드보다야 낫지만 무작정 throws 를 남발하는 이 방법도 매우 안좋은 방법이다.


예외의 종류와 특징에 대해 알아보자.
1. Error
java.lang.Error 클래스의 서브클래스들이다. 에러는 시스템에 뭔가 비정상적인 상황이 발생했을 경우에 사용된다. 그래서 주로 자바VM에서 발생시키는 것이고 어플리케이션 코드에서 잡으려고 하면 안된다. OutOfMemoryError나 ThreadDeath같은 에러는 catch블록으로 잡아봤자 대응 방법이 없기 떄문이다.

2. Exception
java.lang.Exception 클래스와 그 서브클래스로 정의되는 예외들은 개발자들이 만든 어플리케이션 코드의 작업중에 예외상황이 발생했을 경우에 사용된다.
Exception은 체크예외와 언체크 예외로 구분된다. 언체크 예외는 Exception의 서브클래스이며 RuntimeException클래스를 상속받은 클래스이며 체크 예외는 RuntimeException클래스를 상속받지 않은 나머지 Exception의 서브클래스들이다.

2.1 체크예외
체크예외는 무조건 처리되어야 하는 예외이다. try~catch, throws를 통해 어떻게든 처리를 하지 않으면 컴파일 에러가 난다.
IOException이나 SQLException이 대표적이다.

2.2 언체크/런타임 예외
java.lang.RuntimeException 클래스를 상속한 예외들이며 명시적인 예외처리를 강제하지 않는다. (try~catch, throws등의 처리를 안해도 컴파일 에러가 안난다는 의미.)
물론 명시적인 처리를 하는 것도 가능하다.
런타임 예외는 주로 프로그램의 오류가 있을 때 발생하도록 의도된 것이다. NullPointerException이나 IllegalArgumentException등이 대표적이다. 피할 수 있지만 개발자가 부주의 해서 발생할 수 있는 경우에 발생하도록 만든 것이 런타임 예외이다. 따라서 런타임 예외는 예상하지 못했던 예외상황에서 발생하는게 아니기 떄문에 명시적인 처리를 하지 않아도 되게 만든 것이다.


이제 예외를 처리하는 방법에 대해 알아보자.

1. 예외복구
예외상황을 파악하고 문제를 해결해서 정상상태로 돌려놓는 것이다. 예를 들면 읽으려는 파일이 없을때 IOException이 발생할 것이다. 이 예외가 발생한 상황을 다른 파일을 읽도록 안내하는 걸로 해서 예외상황을 해결할 수 있다.

2. 예외처리 회피
예외처리를 자신이 담당하지 않고 자신을 호출한 쪽으로 던져버리는 것이다.
public void add() throws SQLException {
}

public void add() throws SQLException {
   try {
      ...
   } catch(SQLException e) {
      throw e;
   }
}
하지만 이 방법은 무책임한 책임회피가 될 수 있다. 예를 들어 DAO가 SQLException을 생각없이 던졌다면?
DAO를 사용하는 서비스 계층이나 웹 컨트롤러에게 이 SQLException이 전달 될 것이다. 과연 서비스 계층이나 웹 컨트롤러 계층에서 이 SQLException을 처리하는게 맞는 것인가? 처리는 할 수 있나? 아마 이 예외는 그냥 처리되지 않고 서버로 던져지게 될 것이다.
예외를 회피하는 것은 예외를 복구하는 것처럼 의도가 분명해야 한다. 예외를 회피하는 것은 자신을 호출해서 사용하는 쪽에서 이 예외를 다루는게 최선의 방법이라는 확신이 있을 경우에만 사용하도록 한다.

3. 예외 전환
예외 회피와 비슷하게 예외를 복구해서 정상적인 상태로 만들 수 없는 경우 예외를 메소드 밖으로 던진다. 하지만 예외회피와는 달리 발생한 예외를 그냥 던지는 것이 아니라 적절한 예외로 전환해서 던진다.
첫째는 내부에서 발생한 예외를 그대로 던지는 것이 그 예외 상황에 대한 적절한 의미를 부여해주지 못하는 경우, 의미를 분명하게 해줄 수 있는 예외로 바꿔주기 위해서이다.
예를 들면 사용자를 DB에 insert하다가 동일한 id가 있어 에러가 났다고 하자. JDBC API는 SQLException을 발생시킨다. 이 경우 DAO가 그냥 SQLException을 던지면 이를 이용하는 서비스 계층에서는 무슨 의미인지 파악하기 힘들 것이다. 이런 경우 SQLException을 DuplicatUserIdException 같은 예외로 바꿔서 던져주는게 좋다.

catch(SQLException e) {
   if(e.getErrorCode() == MysqlErrorNumbers.ER_DUP_ENTRY)
      throw DuplicateUserIdException();
   else
      throw e;
}

보통 예외를 전환해서 던져줄때에는 원래 발생한 예외를 담아서 중첩예외로 만드는 것이 좋다.
중첩 예외로 만들었을 경우에는 getCause() 메소드를 이용해서 처음 발생한 예외가 무엇인지 확인할 수 있기 때문이다.
생성자나 initCause()메소드로 근본 원인이 되는 예외를 넣어주면 된다.

catch(SQLException e) {
    throw DuplicationUserIdException(e);
}

catch(SQLException e) {
    throw DuplicationUserIdException().initCause(e);
}

예외전환을 사용하는 경우는 위의 경우도 있지만 주로 예외처리를 강제하는 체크 예외를 예외처리를 강제하지 않는 런타임 예외로 바꾸는 경우에 사용한다.
DAO에서 발생한 SQLException이 웹 컨트롤러까지 전달이 된다고 해서 무슨 소용이 있을까? 웹 컨트롤러의 메소드에 throws SQLException이 선언되어 있다면 이를 어떻게 해석해야 할까? 어차피 복구가 불가능한 예외라면 가능한 빨리 런타임 예외로 포장해 던지게 해서 다른 계층의 메소드를 작성할 때 불필요한 throws 선언이 들어가지 않게 해야한다. DAO에서 발생한 SQLException이지 웹컨트롤러와는 사실 상관이 없는 예외이기 때문에 헷갈릴만한 상황을 만들면 안된다.
어차피 복구하지 못할 예외라면 어플리케이션 코드에선 런타임 예외로 포장해서 던지고, 예외처리 서비스 등을 이용해 자세한 로그를 남기고, 관리자에게 메일을 전송하고 사용자에겐 안내메시지를 보여주는 것도 처리 방법이다.


자바가 처음 만들어 질때는 AWT, Swing 등을 사용해서 독립형 어플리케이션을 개발했었다. 이때는 사용자가 입력한 이름에 해당하는 파일을 찾을 수 없다고 어플리케이션이 종료가 되면 안되었었다. 어떻게든 처리를 했어야 했다.
하지만 자바 엔터프라이즈 서버 환경은 다르다. 수많은 사용자가 요청을 보내고 각 요청들이 독립적인 작업으로 취급된다. 요청을 처리하다 예외가 발생하면 해당 작업만 중단시키면 된다. 독립형 어플리케이션과는 달리 서버의 특정 계층에서 예외가 발생했을 때 작업을 일시 중지하고 사용자와 바로 커뮤니케이션하면서 예외상황을 복구할 수 있는 방법은 없다.

최근에 등장하는 표준스펙 또는 오픈소스 프레임웍에서는 API가 발생시키는 예외를 체크예외 대신 언체크 예외로 정의하는 것이 일반화되고 있다. 예전에는 복구할 가능성이 조금이라도 있다면 체크예외로 만든다고 생각했는데 지금은 항상 복구할 수 있는 예외가 아니면 일단 언체크/런타임 예외로 만드는 경향이 있다.

체크예외를 언체크/런타임 예외로 만드는걸 구현해보자. 대표적인 체크예외가 SQLException이다. 그 중 동일한 pk를
입력했을때 에러가 발생해서 SQLExcepion이 나는 상황을 구현해 보겠다.

일단  동일한 pk가 입력이 되었을 경우 사용할 RuntimeException을 상속받은 DuplicateKeyException 을 만들어 보자.
public class DuplicateKeyException extends RuntimeException {
   public DuplicateKeyException(Throwable cause) { // 중첩 예외를 만들기 위해 생성자를 만들어 이용.
      super(cause);
   }
}

이제 add() 메소드를 구현해 보겠다.
public void add() throws DuplicateKeyException {
    try {
         ...
    } catch(SQLException e) {
         if(e.getErrorCode() == MysqlErrorNumbers.ER_DUP_ENTRY) // Mysql 일 경우.
              throw new DuplicateKeyException(e); // 예외 포장
         else 
              throw new RuntimeException(e);
    }
}

RuntimeException을 사용하게 되면 꼭 예외 처리가 필요한 경우는 놓칠 수도 있게 된다. 반드시 예외를 catch해서 조치를 취하도록 요구하는 예외를 일반적으로 어플리케이션 예외라고 한다.
흔히 에러가 났을 경우 처리하는 작업이 특정 코드값을 정해서 리턴하는 방법이 있다.
0이면 에러, 1이면 정상 이런 식으로...
이 방법은 각 코드값들을 명확하게 정리를 잘 해놓지 않으면 흐름을 파악하고 이해하기 어려워진다.
두번째 방법은 오류 발생시 비즈니스적인 의미를 띈 예외를 던지도록 하는 것이다. 물론 각 예외들은 위에 설명한 중첩방식같이 별도로 구현해서 사용을 해야 한다. 이 방법은 정상적인 흐름은 try {}안에 모아놓고 예외상황에 대한 코드들은 catch{}로 분리시킴으로 인해 깔끔하게 정리가 된다. 그리고 예외의 이름만 봐도 코드가 이해하기 편해지는 장점이 있다.

728x90

'개발및업무 > 유용한 Tip' 카테고리의 다른 글

Windows 7 에서 Windows XP 사용하기  (0) 2015.10.06
IIS에서 MIME 형식 지정  (0) 2012.10.11
Http와 Https 차이  (0) 2011.10.18
[HTML] 숫자만 입력 받기  (0) 2011.09.20
정보처리기사 필기시험 자료 다운  (0) 2010.12.18
728x90
728x90

'개발및업무 > 유용한 Tip' 카테고리의 다른 글

IIS에서 MIME 형식 지정  (0) 2012.10.11
Exception에 관하여  (0) 2011.10.21
[HTML] 숫자만 입력 받기  (0) 2011.09.20
정보처리기사 필기시험 자료 다운  (0) 2010.12.18
Microsoft Security Essentials  (0) 2010.12.16

+ Recent posts