(2) 추가 조치 방법

애드웨어를 삭제해도 애드웨어에서 설정을 변경하야 문제가 계속되는 경우도 존재한다. 이때에는 다음 레지스트리의 내용을 자신에 맞게 수정하는 것이 좋다.

1) 웹 브라우저 홈페이지 변경

① [시작]-[실행]을 선택한 후 "regedit" 입력하고 확인을 누른다.
② HKEY_CURRENT_USER\Software\Microsoft\Internet explorer\Main\Start page ="등록되어 있는 값 삭제 후 원하는 값으로 설정"

2) 애드웨어에서 자주 변경하는 레지스트리 값

애드웨어는 다음 레지스트리의 내용을 주로 변경하므로 이들 내용도 확인해 불필요한 내용이 존재하면 지워준다.

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"Start Page"=

[HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main]
"Start Page"=

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"Search Page"=

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"Search Bar"=

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer]
"SearchURL"=

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Search]
"CustomizeSearch"=

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Search]
"SearchAssistant"=

[HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main]
"Search Page"=

[HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main]
"Search Bar"=

[HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer]
"SearchURL"=

[HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Search]
"CustomizeSearch"=

[HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Search]
"SearchAssistant"=

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer/Main]
"Default_Page_URL"=

[HKEY_CURRENT_USER/Software/Microsoft/Internet Explore/Main]
"Start Page"=


3) Browser Helper Objects

A. Browser Helper Objects 확인

많은 애드웨어가 인터넷 익스플로어의 'Browser Helper Objects'(이하 BHO) 기능을 이용한다. BHO를 사용하면 인터넷 익스플로어의 여러 행동을 감시하고 다른 행동을 할 수 있다. 예를 들어 사용자가 특정 사이트 주소를 입력할 때 중간에서 가로채 다른 웹사이트로 이동 할 수도 있다. 특정 사이트 노출로 광고를 해야 하는 애드웨어로써는 유용한 기능이다.

BHO 사용 여부는 레지스트리 에디터(regedit.exe)를 실행 해 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects'에 등록된 CLSID 값을 확인한다. [그림4] 에서는 {06849E9F-C8D7-4D59-B87D-784B7D6BE0B3}와 {76EAE03C-F2B1-4397-97E8-390920B7C2DC}가 사용 중임을 알 수 있다.

 

B. CLSID 내용 확인

HKEY_CLASSES_ROOT\CLSID\{CLSID 값}의 "InprocServer32"키 값을 통해 해당 기능을 사용하는 파일 이름을 알 수 있다. 그림에서는 V3Bar.dll 파일이 사용하고 있음을 알 수 있다. 참고로 해당 파일은 V3에서 사용하는 파일이다.

C. 불필요한 CLSID 삭제

CLSID를 반복해서 찾아 해당 CLSID 값을 사용하는 프로그램이 불필요한 파일이라면 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects'에 등록된 CLSID 값을 삭제 하면 된다.

미국에서 구글이나 통신사는 NFC 기반의 전자지갑 서비스를 제공하려고 노력중이다. 한국에서도 NFC기반으로 결제하는 인프라를 시범사업으로 진행하지만 잘 되지는 않고 있다. 모두다 스마트폰에 신용카드를 넣어서 전자지갑을 제공하려고 한다.

그렇다면 애플은 NFC결제를 어떻게 할까? 상상해보자.

애플은 구글이나 한국의 NFC지갑처럼 휴대폰에 신용카드를 발급하는 NFC결제에는 아직 관심이 없을지도 모른다. 그렇다면 중요한 것은 NFC가 아니라 온라인 결제.

그림출처: Apple Wins Patent for iWallet: The one that will rule the World

미국이나 한국이나 NFC결제가 힘든 이유는 어느 한 기업이 혼자서 할 수 없는 사회적 인프라이기 때문에 너무나도 많은 이슈를 가지고 있기 때문으로 보인다. 애플도 그러한 닭과달걀 같은 싸움에 똑같이 뛰어들까?

최근 애플의 NFC와 관련된 특허를 보면 애플이 NFC 결제를 어떻게 할지 예측해볼 수 있다.

1. Touch Screen RFID Tag Reader
이 기술은 LCD 스크린 위에 NFC 안테나를 두는 방법이다.  휴대폰에 신용카드를 저장하는 것과 상관없다. 스크린을 보면서 NFC태그나 카드를 화면위에 대는 직관적인 UI를 둘 수 있는 방법이다.


2. Apple Wins Patent for iWallet: The one that will rule the World
주카드와 보조카드를 연계시키고, 결제 규칙을 제어할 수 있도록 만든 기술. 어째든 iTunes(애플 서버)에 저장된 카드정보를 활용한다. 역시 휴대폰에 신용카드를 저장하는 것과 상관없다.

3. Part 2 - Apple's iWallet: The One that will Rule the World
온라인 결제할 때 아이폰으로 실시간 결제 승인을 사용자가 하도록 하는 기술. 이것도 역시 iTunes에 저장된 카드정보를 활용한다.
       참고: Patenly Apple - Apple's iWallet: The One that will Rule the World
 
4. iMac 에 NFC 모듈을 설치하여 연계
모니터 하단에 NFC 모듈을 설치하고 활용하기. 자료에는 설명되어 있지 않지만 아마도 아이폰에 있는 iWallet과 PC간에 NFC로 통신을 해서 데이터를 처리하려는 의도로 생각된다.

이렇게 4가지 정도 NFC와 관련된 특허들을 보면 애플이 아이폰에 신용카드를 발급해서 지갑대신 사용하는 서비스로 기획하지는 않았다. 즉 온라인 결제 서비스를 대상으로 고민한 것이지 실제 매장에 가서 아이폰으로 결제하는 방법을 고민한 것이 아니다. NFC는 온라인결제하는 방법중에 NFC를 통해서 정보를 공유하거나 PC와 아이폰으로 인증을 하는 보조수단으로 사용하지 않을까 한다.

애플은 iTunes(애플 서버)에 저장된 신용카드를 활용해서 실시간으로 온라인 결제를 할 수 있는 서비스를 제공하려고 한다. 구글이나 한국에서 하는 것처럼 어쩌면 신용카드를 휴대폰에 넣는 것에는 관심이 없을지도 모르고, 기존의 복잡한 생태계에 힘들게 끼어들으려 하지 않을지도 모르겠다. 오히려 iTunes를 활용해서 온라인 결제시장에만 진입하여도 앞으로 할 것은 충분히 많아보인다. 
 
KT도 Vitual Goods의 세상을 선도하겠다고 하지 않던가. 사람들 지갑에서 휴대폰으로 신용카드를 옮기는 것보다는 온라인에서 보다 나은 안전하고 편한 결제를 제공하는 것이 소비자들에게는 필요한 것이 아닐까?

데이터베이스를 사용하면서 가장 먼저 찾게 되는 것이 데이터베이스를 관리하는 도구일 것이다.

수많은 프로그램이 나와 있지만 데이터베이스를 전문적으로 사용하는 것이 아니기 때문에 무료로 간편하게 사용할 수 있는 툴을 선호한다.

MySQL 사이트에는 MySQL을 관리할수 있는 GUI 툴을 같이 제공하는데, 예전에는 MySQL-query-browser, MySQL-administrator와 같이 나누어서 제공하던 것이 MySQL-workbench로 통합되어 제공하고 있다.

현재 최근 릴리즈 버전은 최종 안정화 버전(GA : General Availability) 으로 MySQL Workbench 5.2.34까지 제공되고 있다.

Community Edition은 비용없이 GPL 라이센스로 다운로드 받아서 사용할 수 있다.

이번에 소개할 내용은 업무에서 겪었던 부분이다.

이미 데이터베이스에 테이블이 생성되고 동작하고 있을 경우 다이어그램으로 테이블 구조를 보고 싶다는 말을 듣는다.

그럼 일일히 테이블 구조를 다이어그램으로 그려야 할까??

아니다. 이미 동작하는 데이터베이스를 연결하여 Reverse Engineer Database라는 기능이 있다.

다이어그램으로 뽑아내고 싶은 테이블을 선택하여 Reverse하면 다이어그램으로 각각의 테이블의 구조와 관계를 나타낸다.

데이터베이스 접속 정보를 입력한다.=> 

데이터베이스의 접속이 성공적으로 완료되면 스키마 정보를 가져온다.=>

 

Reverse Engineer 할 데이터베이스를 선택한다.=>

선택된 데이터베이스의 테이블 및 구성요소들의 정보를 가져온다.=>

Reverse Engineer 할 테이블들을 선택한다. 왼쪽 박스가 선택된 항목이다. (3개의 테이블 선택)=>

 

아래와 같이 Reverse Engineer 작업이 완료되었다.=>

이와 같은 결과를 PDF 파일이나 PNG 이미지 등으로 Export 할 수 있어 편리하다.

다른 기능들도 많지만 내가 가장 많이 활용하는 부분을 작성해 보았다.

Mysql Workbench는 아래의 링크에서 다운로드 받을 수 있다.

http://wb.mysql.com/

 

[출처]http://cafe.naver.com/hermeneus/94

 

 

'DB > ERD' 카테고리의 다른 글

ERD 정의  (0) 2013.08.28

Microsoft Windows 2003 Server 설치 및 최적화 설정

 

Microsoft Windows 2003 Server을 안정성 > 사용상 편의 / 속도 > 시각적 효과적으로 최적화 설정을 정리.
주관성에 집중되어 있으므로 차이에 따라 본인의 사용 용도에 따라 설정도 가능하다. 
Microsoft Windows 2003 Server은 서버용 운영체제이므로 기본적인 음성, 그래픽 혹은 자바등의 구성이 제외 되어 있거나 비활성화 되어있다.
- 음성/테마 적용 및 자바 설치등을 설정하면 XP와 비슷한 환경으로 설정 가능.

* 기본적으로 Microsoft Windows 2003 Server는 저사양에서도 Microsoft Windows 2000 Server나 Microsoft Windows XP 제품군보다 훨씬 빠른 속도와 확장성 보여준다.

운영체제 설치 개략

* 운영체제를 설치 할 때에는 반드시 인터넷이 연결되지 않은 상태에서 설치하며 웜패치 및 보안패치를 반드시 설치.

* 하드웨어 칩셋 패치를 반드시 설치. 시스템의 성능의 향상.
* 설치 후 백신 프로그램을 설치. Microsoft Windows XP 제품군과는 다르게 서버용 백신을 설치.
* 드라이버는 최신 사양으로 설치. 하지만 드라이버와 운영체제간의 호환성 문제로 인해 윈도우즈 업데이트를 통한 드라이버 설치를 권장.
* DirecX 설치 후 여러가지 소프트웨어를 설치.
* 비활성화 목록을 활성화.

 

Step 01. Microsoft(R) Windows 2003 설치 버전 확인
시작 > 실행 > winver을 입력.
(예) Microsoft(R) Windows 버전 5.2(빌드 3790.srv03_rtm.030324-2048)

 

Step 02. 멀티 부팅시 유의 및 부팅순서/운영체제 목록 표시시간 설정
-자신의 주로 사용할 운영체제를 기본으로 설정하고 운영 체제 목록을 표시할 시간을 설정 변경.
컴퓨터 > 속성 > 고급 > 시작 및 복구 > 설정 > 시스템 시작 에서 설정.
※ 멀티 부팅 유의사항은 반드시 C Drive(마스터)는 Microsoft(R) Windows 2003보다 하위 버젼 설치 후 D drive(슬레이브) Microsoft(R) Windows 2003설치.
상하위 버전을 바꾼 상태로 설치 시 상위버전이 실행되지 않음.

 

Step 03. 시스템 설정
-DirectX 활성화
시작 > 실행 > dxdiag > 확인하여 DirectX 진단 도구를 실행하고 디스플레이 탭을 선택하고 
DirectX 기능이라는 항목에 DirectDraw 가속, Direct3D 가속, AGP 질감 가속 기능을 모두 사용 선택하고 
소리 탭에서 DirectX 기능 항목에 하드웨어 소리 가속 수준을 최대로 변경.

-시스템의 설정 변경
내 컴퓨터 > 속성 > 고급 > 시작 및 복구 항목에 설정(T) 선택 한 후 디버깅 정보 쓰기 항목에 작은메모리덤프(64KB)로 변경.
내 컴퓨터 > 속성 > 고급 > 성능 항목에 설정(S) 선택 한 후 고급탭에 프로세서 사용 계획, 메모리 사용 계획 항목을 모두 프로그램.

-서비스 항목설정
시작 > 실행 > services.msc > 확인 > 서비스를 실행하고 서비스(로컬)에서 아래 항목들을 변경.
(o):자동 (*):수동 (x):사용안함
Alerter(x) : 선택된 사용자와 컴퓨터에 관리 경고를 알립니다.
Automatic Updates(x) : 중요한 windows업데이트를 자동으로 다운로드하고 설치할 수 있도록 합니다.
Error Reporting Service(x) : 예상치 못한 응용프로그램 오류를 모으고 저장하거나 microsoft에 보고합니다.
Help and Support(*) : 도움말 및 지원센터를 실행 할 수 있도록 합니다.
IMAPI CD-Burning COM Service(*) : IMAPI를 이용하여 CD굽기를 관리합니다.
Messenger(x) : 클라이언트와 서버 사이에 net send및 경고 서비스 메시지를 전송합니다.
Portable Media Serial Number(x) : 이 컴퓨터에 연결된 어떠한 Portable Media Player의 일련번호를 검색합니다.
Protected Storage(x) : 개인키와 같은 중요한 정보를 보호하고 허가되지 않은 서비스, 프로세스, 사용자 액세스를 방지합니다.
Remote Registry(x) : 원격사용자가 이 컴퓨터에서 레지스트리 설정을 수정할 수 있도록 설정합니다.
Secondary Logon(x) : 다른 자격 증명에서 프로세스를 시작할 수 있도록 합니다.
Windows Image Acquisition(WIA) : 스캐너 및 카메라에 대한 이미지 인식 서비스를 제공합니다.
Windows Time(x) : 네트워크 상에서 모든 클라이언트 및 서버의 날짜 및 시간 동기화를 유지합니다.

-Theme 서비스 및 Audio 서비스 활성화
시작 > 실행 > services.msc > 확인 > 서비스 > 서비스로컬에서 themes > 자동으로 설정.
시작 > 실행 > services.msc > 확인 > 서비스 > 서비스로컬에서 windows audio > 자동으로 설정.

-디스플레이 설정
자신의 최신 그래픽 드라이버를 설치.
시작 > 제어판 > 디스플레이 > 디스플레이 등록정보 > 설정 > 고급(V)를 선택 한 후 문제해결 탭에서 하드웨어 가속 항목에 
하드웨어 가속(H)를 최대로 변경.
※ DirectX가 설치가 되어있어야 함.

-사운드 설정
자신의 최신 사운드 드라이버를 설치.
시작 > 제어판 > 사운드 및 오디오장치 > 볼륨 > 스피커 설정 항목에서 고급(D)...를 선택 한 후 성능 탭에서 오디오 재생 항목에
하드웨어 가속을 최대로 변경.
※ DirectX가 설치가 되어있어야 함.

-자바가 실행 불가능 할 시(예:다음카페에서 cafe on이 되지않는 경우)
자바의 저작권 문제로 제외 되었던 마이크로 소프트 버추얼머신을 설치.
※ 인터넷 공개자료실같은 사이트에서 쉽게 다운로드 가능.

 

Step 04. 최적화 팁 (윈도우 부분)
- 1차 가상메모리 설정
제어판 > 시스템 > 고급 > 성능탭에서 설정(S) 선택 한 후 성능 옵션을 실행하고 고급탭에 가상 메모리항목을 1GB를 기준으로 1536MB / 1536MB의 스와핑드라이브를 지정.

-오류 보고 설정 해제
제어판 > 시스템 > 고급 > 오류보고(R) 선택 한 후 오류 보고를 실행하고 오류 보고 사용 안 함 선택.

-자동 시스템 재부팅 설정 해제
제어판 > 시스템 > 고급 > 시작 및 복구항목에서 설정을 선택 한 후 시스템 오류 항목에서 자동으로 다시 시작을 선택 해제.

-시각 효과 설정
제어판 > 시스템 > 고급 > 성능항목에서 설정을 선택 한 후 성능옵션을 실행하고 시각 효과탭에서 최적 성능으로 조정(P)을 선택.
제어판 > 디스플레이 설정 > 화면배색 > 효과를 선택 하여 효과를 실행하고 모두 선택 해제.

-시스템 시작 시 ctrl+alt+del 설정 해제 
시작 > 실행 > gpedit.msc 입력 > 그룹정책개체편집기 > 컴퓨터구성 > windows설정 > 보안설정 > 로컬정책 > 보안옵션 > 대화형로그온 : [ctrl+alt+del]을 사용할필요없음 > 더블클릭 > 사용으로 선택 합니다.

-시스템 종료 시 이벤트 추적기 표시 설정 해제
시작 > 실행 > gpedit.msc입력 > 그룹정책개체편집기 > 컴퓨터구성 > 관리 템플릿 > 시스템 > 우측창에서 시스템 종료이벤트 추적표시 더블클릭 > 사용 안함으로 변경합니다.

-로그온 시 암호 설정 해제
시작 > 실행 > control userpasswords2 > 확인 > 사용자계정 > 사용자이름과 암호를 입력해야 이 컴퓨터를 사용할수 있슴에 선택를 해제함 > 확인 > 창이 하나 나오면 여기에 설치시 설정한 암호를 적고 확인 합니다.

-Internet Explorer 세팅 및 인터넷 최적화 
* 도구 > 인터넷 옵션 > 일반 > 임시 인터넷 파일항목에서 설정 > 임시 인터넷 파일 폴더항목에서 사용할 디스크 공간을 자신의 하드디스크 용량에 맞춰 폴더 변경 및 적당한 공간  설정.
* 도구 > 인터넷 옵션 > 일반 > 열어본 페이지 목록항목에서 페이지 보관 일수를 적당히 설정.
* 도구 > 인터넷옵션 > 보안 > 인터넷 보안을 보통으로 변경.
※ 제어판 > 프로그램 추가/제거 > windows 구성요소 추가/제거 > windows구성요소 마법사 > Internet Exporer 보안 강화 구성을 선택 해제하고 자세히를 선택하여 관리자 그룹용과 기타사용자 그룹용 선택 해제 한 후 다음을 선택하면 인터넷옵션 보안에는 보통으로 변경 가능.
* 도구 > 인터넷 옵션 > 개인정보탭에서 설정항목을 낮음으로 설정.
* 도구 > 인터넷 옵션 > 연결 > LAN설정항목에서 자동 구성, 프록시 서버 모든 선택를 해제.
* 도구 > 인터넷 옵션 > 프로그램 > 시작할때 기본 브라우저 확인에 선택 해제.
* 도구 > 인터넷 옵션 > 고급 에서
> 멀티미디어 > 이미지 크기 자동조정가능에 선택 해제.
> 보안 > 브라우저 닫을때 임시 인터넷 파일 폴더 비우기에 선택. (시스템을 항상 유지시킬 분만 추천)
> 탐색 > 예약시 동기화할 오프라인 항목 사용에 선택해제.
> 탐색 > 웹페이지 단추 및 컨트롤 시각 스타일 사용에 선택해제.
> 탐색 > 인라인 자동 완성사용에 선택해제.
> 탐색 > 주소표시줄에 [이동] 단추 표시에 선택 해제.
> 탐색 > 타사브라우저 확장 사용에 선택 해제.(다시 시작해야 함)
> 탐색 > URL을 항상 UTF-8로 보냄에 선택 해제.

-작업표시줄의 인터넷 익스플로러창 합쳐지는것 막기
시작 > 제어판 > 작업표시줄 및 시작메뉴 > 같은 종류의 작업 표시줄 단추를 그룹(G)으로에 선택 표시 해제.

-미리 보기 캐쉬로 인한 메모리 사용량 과대 방지
윈도우탐색기 > 도구 > 폴더 옵션을 실행 한 후 미리 보기 캐쉬 안 함 선택.

-내 문서 폴더 저장위치 변경하기
내 문서 > 속성 > 대상 폴더 위치에서 변경.

-탐색기의 폴더 옵션 설정 
탐색기 > 도구 > 폴더옵션 > 보기 > 고급옵션 >
보호된 운영체제 파일 숨기기에 선택 해제,
숨김 파일 및 폴더 표시에 선택,
시스템 폴더 내용 표시에 선택,
알려진 파일 형식의 확장명 숨기기에 선택 해제,
암호화 되거나 압축된 NTFS 파일을 컬러로 표시에 선택 해제,
폴더 및 바탕 화면 항목에 팝업설명표시에 선택 해제,
폴더팁에 파일 크기 정보 표시에 선택 해제.
폴더 보기 항목에 모든 폴더에 적용을 선택.

-휴지통 설정
휴지통 > 속성 > 일반설정 > 휴지통의 최대 크기를 5%로 삭제 확인 대화상자 표시에 선택를 해제 합니다.

-XP 처럼 디스플레이 사용하기
내컴퓨터 > 속성 > 고급 > 성능 > 설정 > 시각효과 > 두번째 최적모양으로설정 > 선택 > 확인합니다.

-윈2003 작업중단방지
* 제어판 > 디스플레이 > 디스플레이 등록정보 > 화면보호기 > 다시 시작할 때 암호로 보호에 선택를 해제 합니다. 
* 제어판 > 디스플레이 > 디스플레이 등록정보 > 화면보호기 > 전원 > 고급 > 컴퓨터가 대기 모드에서 나올 때 암호로 묻기에 선택 해제 합니다.

-내문서나 미디어플레이어 사용후에 흔적 지우기.
시작 > 실행 > gpedit.msc > 그룹정책개체편집기 > 사용자구성 > 관리템플릿 > 작업표시줄및시작메뉴
* 종료시 최근에 사용한문서 기록지우기를 더블클릭 > 사용선택후 확인
* 최근에 사용한 문서 기록을 보관안함을 더블클릭 > 사용선택후 확인

-종료 속도 빠르게 하기
시작 > 실행 > gpedit.msc > 그룹정책개체편집기 > 컴퓨터구성 > 관리템플릿 > 시스템 > 사용자프로필 > 프로필 언로드 및 
업데이트의 재시도 최대횟수를 더블클릭 > 사용을 선택후 재시도횟수를 0 으로 수정합니다.

 

Step 05. 최적화 팁 (레지스트리 부분)

[1] 메뉴 팝업속도 향상하기
HKEY_CURRENT_USER\ControlPanel\desktop - MenuShowDelay → 0

[2] MSIE 로딩속도(DNS 캐쉬수정) 향상하기
* HKEY_LOCAL_MACHINE\System\CurrentControlset\Services\Dnscache\Parameters
새로만들기(DWORD - 10진수) 
CachehHashTableBucketSize---->1 
CachehHashTableSize---------->384 
MaxCacheEntryTtlLimit-------->64000 
MaxSOACacheEntryTtlLimit----->301 
* HKEY_USER\.Default\Software\Microsoft\Windows\CurrentVersion\InterSettings
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InterSettings
새로만들기(DWORD - 16진수) 
MaxConnectionsPerSever------>20 
MaxConnectionsPer1_0Sever--->20 
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RemoteComputer\
NameSpace에서 {D6277990-4C6A-11CF-8D87-00AA0060F5BF} 폴더 자체를 삭제

[3] 폴더창 팝업속도 향상하기
HKEY_CURRENT_USER\Control Panel\desktop\windowmetrics 
새로만들기(문자열 값) 
MinAnimate ----> 0

[4] 아이콘의 화면출력(Refrash rate) 속도향상하기
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Update 
UpdateMode ----> 0

[5] L2캐쉬 지정으로 속도향상하기
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\MemoryManagement 
SecondLevelDataCache ----> L2 캐쉬값 입력 (예:512)

[6] 디스크 캐쉬 세부 설정 - 하드속도 향상하기
별도의 하드 캐쉬 램이 있는 사용자(레이드 카드에 램이 장착된 경우)는 필요없습니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management 
IoPageLockLimit ----> 40000(512MB기준)

[7] 로그온 메시지
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Winlogon
새로만들기(문자열 값) 
LegalNoticeText ----> 더블클릭후 편집상자에 메시지 입력

[8] 공유문서 삭제/감추기
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\DelegateFolders
59031a47-3f72-44a7-89c5-5595fe6b30ee ----> 삭제

[9] 도움말메뉴 삭제하기
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer
새로만들기(DWORD - 10진수) 
NoSMHelp ----> 1 (0으로 하면 복원됨)

[10] 최근문서메뉴 삭제하기
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
새로만들기(DWORD - 10진수) 
NoRecentDocsMenu ----> 1

[11] 입력도구모음/고급텍스트 삭제
* 시작 메뉴바에서 입력도구모음 언선택 
* cmd>%SystemRoot%\System32\Regsvr32.exe /u %SystemRoot%\System32\msimtf.dll 
%SystemRoot%\System32\Regsvr32.exe /u %SystemRoot%\System32\msctf.dll 
* RegSvr32 확인 
* Ctrl-Alt-Del(작업관리자) - 프로세스 - ctfmon.exe - 끝내기 - 확인 
* HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run - ctfmon.exe 삭제

[12] 윈도즈 메신져 삭제메뉴 추가
windows/inf/sysoc.inf 
msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,hide,7 `hide` 제거 
msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,7

[13] 종료 빠르게 하기
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WaitTokillServiceTimeout : 20000 → 2000 로 수정

[14] 무응답 응용프로그램 타임아웃 시간줄이기
HKEY_CURRENT_USER\Control Panel\Desktop에서 HungAppTimeout 값 5000(5초) → 1000 (1000 = 1초) 로 수정 

java.lang에 정의되어 있는 RuntimeException의 서브 클래스 종류

 

복사 http://blog.naver.com/s9712094/140030018008

 

출처 : Beginning Java 2 SDK 1.4 Edition
(정보문화사)

* ArithmeticException

   - 정수를 0으로 나누려고 하는 등의 유효하지 않은 계산 조건을 사용하는 경우

* IndexOutOfBoundsException
   - 객체의 범위를 벗어난 인덱스를 사용하려고 하는 경우. 배열, String객체, 또는 Vector객체가 이에
      해당된다. Vector 클래스는 표준 패키지 java.util에 정의되어 있음.

* NegativeArraySizeException
   - 음의 크기를 갖는 배열을 정의하려 하는 경우

* NullPointerException
   - null을 포함하는 객체 변수를 사용하려는 경우. 정당한 작업을 위해서는 변수가 객체를 참조해야
      한다. 예를 들어, 메서드를 호출하거나 데이터 멤버에 접근하는 경우가 이에 속한다.

* ArrayStoreException
   - 배열 타입에 맞지 않는 객체를 배열에 저장하려는 경우

* ClassCaseException
   - 객체를 부적절한 타입으로 형변환하려는 경우. 즉, 객체가 지정한 클래스도 아니고, 지정한 클래스
     의 수퍼클래스나 서브클래스도 아닌 경우를 뜻한다.

* IllegalArgumentException
   - 메서드가 파라미터 타입과 일치하지 않는 인자를 전달하려는 경우

* SecurityException
   - 프로그램이 보안에 위반되는 부적절한 작업을 수행하려는 경우. 애플릿에서 로컬 컴퓨터에 있는
     파일을 읽으려 하는 경우가 이에 속한다.

* IllegalMonitorStateException
   - 스레드가 자기가 소유하지 않은 객체를 모니터링하려 할 때.

* IllegalStateException
   - 적절하지 않은 때에 메서드를 호출하는 경우

* UnsupportedOperationException
   - 객체가 지원하지 않는 작업을 수행하도록 요청하는 경우

 

MySQL에서 CUBRID의 변환을 생각하는 많은 개발자들이 궁금해 하는 MySQL의 BLOB타입 데이터를 CUBRID로 이전하는 방법에 대해 기술한다. 본FAQ는 http://blog.naver.com/windyhan/110052262344 블로그를 참조하여 기술하였음을 밝힌다.

이미 문서를 통하여 MySQL to CUBRID의 Data Type변경에 대해 소개하고 있다. 대부분의 경우 대응되는 Type으로의 스키마 변경으로 해결되나 Blob의 경우 약간의 작업이 필요하게 된다. 이 약간의 작업에 대해서 설명하도록 한다.

MySQL에서 사용하는 Blob타입 4종류와 각각의 허용 범위는 아래와 같다.


TinyBlob - maximum length of 255 characters.
Blob - maximum length of 65535 characters.
MediumBlob - maximum length of 16777215 characters.
LongBlob - maximum length of 4294967295 characters.

 


CUBRID에서 대응하는 Type인 Bit Varying의 범위는 아래와 같다.


Bit Varying(n) - n에 대한 값이 생략되면, 디폴트 길이 1,073,741,823이 가정된다. 이는 MySQL의 LongBlob을 제외한 Blob타입에 대응될 수 있다.
* MySQL의 LongBlob에 대해서는 CUBRID는 GLO라는 타입으로 대응이 가능하나 이는 다른 Tip으로 정리한다.
 
MySQL의 Blob을 CUBRID로 변환하는 과정을 아래의 예를 통하여 확인하고자 한다. 아래의 예시는 test_tbl이라는 테이블로 간단한 이미지를 저장한 저장해 놓은 테이블이다. 이미지의 사이즈는 30~60만 byte정도로 MySQL의 MediumBlob에 해당한다.


mysql> describe test_tbl;

+-----------+--------------+------+-----+---------+----------------+

| Field     | Type         | Null | Key | Default | Extra          |

+-----------+--------------+------+-----+---------+----------------+

| id        | int(11)      | NO   | PRI | NULL    | auto_increment |

| file_name | varchar(255) | YES  |     | NULL    |                |

| file_data | mediumblob   | YES  |     | NULL    |                |

+-----------+--------------+------+-----+---------+----------------+

3 rows in set (0.00 sec)

 

데이터는 아래와 같이 들어있다.

 


데이터를 추출하기 위해 JDBC를 이용한다. file_data칼럼에 있는 이미지를 추출하는 java코드는 아래와 같다.

public void getBlobDataFromMySQL(){

          Connection conn=null;

          Statement stmt=null;

          ResultSet rs=null;

          String file_path = "pic";

 

          try{

               File curr = new File("./" + file_path);

               if( !curr.exists() ){

                  curr.mkdir();

               }

               Class.forName("com.mysql.jdbc.Driver");  //드라이버 로드

               conn = DriverManager.getConnection   // Connection객체 가져오기

                   ("jdbc:mysql://localhost/testdb?user=root&password=root");

 

               String sql = "select id, file_name, file_data from test_tbl";

               stmt = conn.createStatement();

               rs = stmt.executeQuery(sql);

               while(rs.next()){

                 int id = rs.getInt("id");

                 String file_name = rs.getString("file_name");

                 InputStream is = rs.getBinaryStream("file_data");

                 FileOutputStream fos = new FileOutputStream("./pic/" + file_name);

                 byte[] buff = new byte[2048000];

                 int len;

                 while ( (len = is.read(buff)) > 0 )

                      fos.write( buff, 0, len);

                 fos.close();

                 is.close();

               }

               rs.close();

               stmt.close();

               conn.close();

          }catch(Exception e){

              e.printStackTrace();

          }

    }

 

위의 코드를 간략히 설명하면 test_tbl 테이블의 이미지를 select 하여 pic이라는 디렉토리에 file_name 을 이름으로 하는 파일들을 생성한다. 이 파일들을 읽어서 CUBRID에 삽입할 것이다.

 

이제 추출한 데이터를 넣을 CUBRID테이블을 생성한다. CUBRID의 테이블 생성 예는 아래와 같다.


csql> create table test_tbl ( id integer auto_increment primary key not null, file_name varchar(255), file_data bit varying);

csql> ;x

 

Current transaction has been committed.

 

1 command(s) successfully processed.

csql> ;sc test_tbl

 

=== <Help: Schema of a Class> ===

 

 <Class Name>

 

     test_tbl

 

 <Attributes>

 

     id                   INTEGER AUTO_INCREMENT  NOT NULL

     file_name            CHARACTER VARYING(255)

     file_data            BIT VARYING(1073741823)

 

 <Constraints>

 

     PRIMARY KEY pk_test_tbl_id ON test_tbl (id)

 

Current transaction has been committed.

 


MySQL의 BLOB 타입에서 빼낸 이미지 파일들을 CUBRID의 test_tbl의 bit varying 타입인 file_data 컬럼에 넣는다.

public void setBlobDataToCUBRID_bit(){

           File curr = new File("./pic");                        

           String[] filelist = curr.list(new BlobFileNameFilter());              -------------------------  1

           cubrid.jdbc.driver.CUBRIDConnection conn=null;

           cubrid.jdbc.driver.CUBRIDPreparedStatement stmt=null;

 

           try{

               Class.forName("cubrid.jdbc.driver.CUBRIDDriver");

               conn = (cubrid.jdbc.driver.CUBRIDConnection)DriverManager.getConnection                   

("jdbc:cubrid:127.0.0.1:33004:testdb1:dba::");          ------------------------- 2

 

               for( int i = 0; i < filelist.length ; i++){

                  String filename  = filelist[i];

                  File file = new File("./pic/" + filename);

                  FileInputStream in = new FileInputStream(file);           ------------------------- 3

 

                  String sql = "insert into test_tbl(file_name, file_data) values ( ?,?)";

                  stmt=(cubrid.jdbc.driver.CUBRIDPreparedStatement)conn.prepareStatement(sql);

                  stmt.setString(1,filename);

                  stmt.setBinaryStream(2,in,(int)file.length());               ------------------------- 4

                  stmt.executeUpdate();                                 ------------------------- 5

                  stmt.close();       

                  in.close();

               }

               conn.commit();

               conn.close();

 

         }catch(Exception e){

            e.printStackTrace();

         }

}

 각각의 설명은 아래와 같다.
1. Bit varying 컬럼에 저장할 파일들의 리스트를 생성한다.

2. CUBRID DB의 Connection 을 가져온다.

3. 입력할 FILE의 InputStream 을 생성한다.

4. Bit Varying 타입인 file_data 컬럼에 setBinaryStream() 함수를 이용해 파라미터 바인딩을 한다.

5. insert 문을 실행한다.

 

위의 java파일을 컴파일 후 실행하면 test_tbl 테이블에 데이터가 삽입된다. 데이터가 제대로 들어갔는지 확인한다.


csql> select file_name, bit_length(file_data)/8 from test_tbl

csql> ;x

 

=== <Result of SELECT Command in Line 1> ===

 

  file_name              bit_length(file_data)/8

================================================

  'DSC_0193_007.JPG'                      329216

  'DSC_0199_010.JPG'                      266272

  'DSC_0202_011.JPG'                      329382

  'DSC_0190_004.JPG'                      419584

  'DSC_0206_013.JPG'                      319426

  'DSC_0187_002.JPG'                      321152

  'DSC_0197_008.JPG'                      273747

  'DSC_0191_005.JPG'                      391503

  'DSC_0192_006.JPG'                      291880

  'DSC_0198_009.JPG'                      169344

  'DSC_0183_001.JPG'                      216492

  'DSC_0208_014.JPG'                      345924

  'DSC_0203_012.JPG'                      333349

  'DSC_0189_003.JPG'                      262936

 

14 rows selected.

데이터가 잘 들어가 있는지 확인해 보았다. 질의에서 Bit_length(file_data)/8 을 한 이유는 저장된 데이터의 byte 수를 알기 위해 한 것이다. 특별히 다른 점은 없고, JDBC 표준 인터페이스를 사용하여 저장을 한 것이다.

 

CUBRID에 저장된 데이터를 추출하는 방법은 위의 MySQL에서 추출한 방법과 거의 같다 아래의 두가지 부분만 변경해 주면 된다.

 1. 함수 이름을 변경한다.

 2. MySQL Connection 연결하는 방법을 CUBRID용으로 변경한다.
[출처] MySQL의 Blob타입을 CUBRID로 변환하기 (큐브리드 공부하기) |작성자 Neo

'PHP > Mysql_이미지저장및 뷰' 카테고리의 다른 글

MySQL 쿼리에 이미지 저장  (0) 2013.07.04

이 소스는 요기에서 퍼왔습니다.

책 - 프로 안드로이드 미디어 그래픽, 오디오, 비디오를 비록한 리치 미디어 앱 개발하기

지은이 - Shawn Van Every

옮긴이 - 배장열

출판사 - 제이펍(Jpub)]

참고할 라이브러리 소스 ==>

ca.zip

Activity


import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.media.AudioFormat;

import android.media.AudioRecord;

import android.media.MediaRecorder;

import android.os.AsyncTask;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import ca.uol.aig.fftpack.RealDoubleFFT;


// FFT(Fast Fourier Transform) DFT 알고리즘 : 데이터를 시간 기준(time base)에서 주파수 기준(frequency base)으로 바꾸는데 사용.

public class AudioProcessing extends Activity implements OnClickListener{

    // AudioRecord 객체에서 주파수는 8kHz, 오디오 채널은 하나, 샘플은 16비트를 사용

int frequency = 8000;

    int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;

    int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;

    // 우리의 FFT 객체는 transformer고, 이 FFT 객체를 통해 AudioRecord 객체에서 한 번에 256가지 샘플을 다룬다. 사용하는 샘플의 수는 FFT 객체를 통해

    // 샘플들을 실행하고 가져올 주파수의 수와 일치한다. 다른 크기를 마음대로 지정해도 되지만, 메모리와 성능 측면을 반드시 고려해야 한다.

    // 적용될 수학적 계산이 프로세서의 성능과 밀접한 관계를 보이기 때문이다.

    private RealDoubleFFT transformer;

    int blockSize = 256;

    Button startStopButton;

    boolean started = false;

    

    // RecordAudio는 여기에서 정의되는 내부 클래스로서 AsyncTask를 확장한다.

    RecordAudio recordTask;

    

    // Bitmap 이미지를 표시하기 위해 ImageView를 사용한다. 이 이미지는 현재 오디오 스트림에서 주파수들의 레벨을 나타낸다.

    // 이 레벨들을 그리려면 Bitmap에서 구성한 Canvas 객체와 Paint객체가 필요하다.

    ImageView imageView;

    Bitmap bitmap;

    Canvas canvas;

    Paint paint;

    

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        startStopButton = (Button)findViewById(R.id.StartStopButton);

        startStopButton.setOnClickListener(this);

        

        

        // RealDoubleFFT 클래스 컨스트럭터는 한번에 처리할 샘플들의 수를 받는다. 그리고 출력될 주파수 범위들의 수를 나타낸다.

        transformer = new RealDoubleFFT(blockSize);

        

        // ImageView 및 관련 객체 설정 부분

        imageView = (ImageView)findViewById(R.id.ImageView01);

        bitmap = Bitmap.createBitmap((int)256, (int)100, Bitmap.Config.ARGB_8888);

        canvas = new Canvas(bitmap);

        paint = new Paint();

        paint.setColor(Color.GREEN);

        imageView.setImageBitmap(bitmap);

    }

    

    // 이 액티비티의 작업들은 대부분 RecordAudio라는 클래스에서 진행된다. 이 클래스는 AsyncTask를 확장한다.

    // AsyncTask를 사용하면 사용자 인터페이스를 멍하니 있게 하는 메소드들을 별도의 스레드로 실행한다.

    // doInBackground 메소드에 둘 수 있는 것이면 뭐든지 이런 식으로 실행할 수 있다.

    private class RecordAudio extends AsyncTask<Void, double[], Void>{

    @Override

    protected Void doInBackground(Void... params) {

    try{

    // AudioRecord를 설정하고 사용한다.

    int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding);

   

    AudioRecord audioRecord = new AudioRecord(

    MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, bufferSize);

   

    // short로 이뤄진 배열인 buffer는 원시 PCM 샘플을 AudioRecord 객체에서 받는다.

    // double로 이뤄진 배열인 toTransform은 같은 데이터를 담지만 double 타입인데, FFT 클래스에서는 double타입이 필요해서이다.

    short[] buffer = new short[blockSize];

    double[] toTransform = new double[blockSize];

   

    audioRecord.startRecording();

   

    while(started){

    int bufferReadResult = audioRecord.read(buffer, 0, blockSize);

   

    // AudioRecord 객체에서 데이터를 읽은 다음에는 short 타입의 변수들을 double 타입으로 바꾸는 루프를 처리한다. 

    // 직접 타입 변환(casting)으로 이 작업을 처리할 수 없다. 값들이 전체 범위가 아니라 -1.0에서 1.0 사이라서 그렇다

    // short를 32,768.0(Short.MAX_VALUE) 으로 나누면 double로 타입이 바뀌는데, 이 값이 short의 최대값이기 때문이다. 

    for(int i = 0; i < blockSize && i < bufferReadResult; i++){

    toTransform[i] = (double)buffer[i] / Short.MAX_VALUE; // 부호 있는 16비트

    }

   

    // 이제 double값들의 배열을 FFT 객체로 넘겨준다. FFT 객체는 이 배열을 재사용하여 출력 값을 담는다. 포함된 데이터는 시간 도메인이 아니라

    // 주파수 도메인에 존재한다. 이 말은 배열의 첫 번째 요소가 시간상으로 첫 번째 샘플이 아니라는 얘기다. 배열의 첫 번째 요소는 첫 번째 주파수 집합의 레벨을 나타낸다.

   

    // 256가지 값(범위)을 사용하고 있고 샘플 비율이 8,000 이므로 배열의 각 요소가 대략 15.625Hz를 담당하게 된다. 15.625라는 숫자는 샘플 비율을 반으로 나누고(캡쳐할 수 있는

    // 최대 주파수는 샘플 비율의 반이다. <- 누가 그랬는데...), 다시 256으로 나누어 나온 것이다. 따라서 배열의 첫 번째 요소로 나타난 데이터는 영(0)과 15.625Hz 사이에

    // 해당하는 오디오 레벨을 의미한다.

    transformer.ft(toTransform);

    // publishProgress를 호출하면 onProgressUpdate가 호출된다.

    publishProgress(toTransform);

    }

   

    audioRecord.stop();

    }catch(Throwable t){

    Log.e("AudioRecord", "Recording Failed");

    }

   

    return null;

    }

   

    // onProgressUpdate는 우리 엑티비티의 메인 스레드로 실행된다. 따라서 아무런 문제를 일으키지 않고 사용자 인터페이스와 상호작용할 수 있다.

    // 이번 구현에서는 onProgressUpdate가 FFT 객체를 통해 실행된 다음 데이터를 넘겨준다. 이 메소드는 최대 100픽셀의 높이로 일련의 세로선으로

    // 화면에 데이터를 그린다. 각 세로선은 배열의 요소 하나씩을 나타내므로 범위는 15.625Hz다. 첫 번째 행은 범위가 0에서 15.625Hz인 주파수를 나타내고,

    // 마지막 행은 3,984.375에서 4,000Hz인 주파수를 나타낸다.

    @Override

    protected void onProgressUpdate(double[]... toTransform) {

    canvas.drawColor(Color.BLACK);

   

    for(int i = 0; i < toTransform[0].length; i++){

    int x = i;

    int downy = (int) (100 - (toTransform[0][i] * 10));

    int upy = 100;

   

    canvas.drawLine(x, downy, x, upy, paint);

    }

    imageView.invalidate();

    }

    }

    

    @Override

    public void onClick(View arg0) {

    if(started){

    started = false;

    startStopButton.setText("Start");

    recordTask.cancel(true);

    }else{

    started = true;

    startStopButton.setText("Stop");

    recordTask = new RecordAudio();

    recordTask.execute();

    }

    }

}



main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<TextView  

    android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

    android:text="@string/hello"

    />

<ImageView

android:id="@+id/ImageView01"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

<Button

android:text="Start"

android:id="@+id/StartStopButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />    

</LinearLayout>


AndroidManifest.xml

<uses-permission android:name="android.permission.RECORD_AUDIO">

'실내 측위 시스템 > 참고자료' 카테고리의 다른 글

주파수(음파) 측정 관련  (0) 2013.07.03
 

웹 애플리케이션 서버에 관해 알아보자.

1. 웹 서버와 웹 애플리케이션 서버(WAS)

웹 서버는 Web Client(웹 브라우저)에게 제공하는 컨텐츠를 제공하는 서버이다.

주로 정적인 컨텐츠를 제공할 때 사용하는 서버이다.

  • 정적인 컨텐츠 : HTML, Jpeg 혹은 gif같은 이미지를 HTTP 프로토콜을 통해 웹 브라우저로 제공
  • Ex) apahce, IIS, Nginx

웹 애플리케이션 서버는 서버 단에서 애플리케이션을 동작할 수 있도록 지원. 일반적으로 컨테이너 라는 용어로도 사용한다.

주로 동적인 컨텐츠를 제공할 때 사용하는 서버이다.

  • 동적인 컨텐츠 : 초창기 CGI, 현재는 Servlet, JSP, ASP, PHP 등의 프로그램으로 사용
  • Ex) Tomcat, JBoss, Weblogic

 

2. WAS만 쓰면 되는 것 아닌가? 라고 질문할 수 있다.

웹 서버와 WAS를 둘 다 사용하는 이유?

  • 최적화 측면 : WAS는 동적인 처리에 최적화 되어 있다.
  • WAS가 정적 데이터를 처리하는 동안 정적 데이터의 입출력 처리로 인해 동적 데이터의 처리에 지연이 생긴다. 즉 웹 애플리케이션의 수행을 방해함.
  • 웹 애플리케이션의 수행으로 인해 정적 데이터에 영향을 줄 수도 있다.

정적인 데이터는 주로 앞의 웹 서버에서 처리를 하고, 동적인 데이터는 뒤의 WAS에서 처리한다.

 

3. 웹 서버와 웹 애플리케이션서버(WAS)의 관계 그림

 

 

'ICT 이야기' 카테고리의 다른 글

어노니머스  (0) 2013.04.04

+ Recent posts