"분류 전체보기"에 해당되는 글 291건

  1. 2012/03/13 갤럭시 S2 Quadrant 밴치 마크 결과 (ICS 4.0.3)
  2. 2012/03/09 Sphinx 설정 (sphinx.conf)
  3. 2012/03/06 PHP MySQL Native Driver (mysqlnd)
  4. 2012/02/23 32Bit PHP 에서 42억 이상의 수 계산 및 합산 (with MySQL, without bc, gmp)
  5. 2012/02/22 Apache 2.4.1 릴리즈
  6. 2012/02/13 Node.js
  7. 2012/02/13 Halo 액상 해외 구매 (3)
  8. 2012/02/08 Mouse Without Borders
  9. 2011/07/22 갤럭시 S SHW-M110(SKT/KT) VG14 순정 펌웨어
  10. 2011/07/22 JQuery 정규식으로 selector 사용방법
  11. 2011/07/22 갤럭시 S2 SHW-M250(SKT) EG14 순정 펌웨어
  12. 2011/07/21 갤럭시 S2 SHW-M250(SKT/KT) EE31 순정 펌웨어
  13. 2011/05/13 HTML 5 Cache manifest (HTML 5 Application Cache)
  14. 2011/05/09 가족 나들이 - 오산 물향기 수목원 (1)
  15. 2011/04/25 MySQL 데이터 타입
  16. 2011/04/25 MySQL Optimization Hint
  17. 2011/04/23 MySQL 효율적인 테이블 설계 방법
  18. 2011/04/21 MySQL TO_SECONDS()
  19. 2011/04/20 MySQL Foreign key 체크 끄기
  20. 2011/04/15 Apache 2.2 Server MPM event(mpm event)
  21. 2011/04/15 nginx 1.0.0, php 5.3.6 (php-fpm)
  22. 2011/04/12 PHP 5.2 가 오늘 (2011.04.12) 부터 PHP.net의 지원이 중단되었습니다.
  23. 2011/04/11 MySQL Query Profiling
  24. 2011/04/04 대현이 50일 사진 촬영~
  25. 2011/04/01 MySQL SELECT 연산 오류 (BIGINT UNSIGNED value is out of range) 해결
  26. 2011/03/25 Windows Update Backup 삭제
  27. 2011/03/17 MySQL 5.5.x 설치 [cmake]
  28. 2011/02/16 득남했습니다. ^^
  29. 2011/01/27 상호 검색 후 무료 통화 방법
  30. 2011/01/25 Windows 7 서비스 팩 1 설치 후 백업 제거

갤럭시 S2 Quadrant 밴치 마크 결과 (ICS 4.0.3)

Quadrant Benchmark(갤럭시 S2)
갤럭시 S2 ICS 업그래이드 이후 밴치 마크 결과
왠지 .. 기분은 좋네요~ ^^ 상세 점수
Total : 3875
CPU : 5523
Mem : 3183
I/O : 7614
2D : 990
3D : 2066

Sphinx 설정 (sphinx.conf)

2012/03/09 12:43

Sphinx 검색엔진 기본 설정

Sphinx 검색엔진 기본 설정 (서버 기본 구성값 )

# sphinx 검색엔진 기본 설정 구성
# 데이터 소스 설정
source sourcename # 데이터 소스 명
{
	# 데이터 베이스 설정
	type = mysql	# 데이터 베이스 타입
	sql_host = localhost	# 호스트
	sql_user = mysqluser	# 사용자
	sql_pass = mysqlpass	# 비밀번호
	sql_db = mysqldatabase	# 데이터베이스 이름
	sql_port = 3306	# 포트 

	# 데이터 수집질의 전 수행할 질의 
	sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
	sql_query_pre = SET NAMES utf8

	# 데이터 수집용 질의 
	sql_query = SELECT * FROM data

	# 데이터 확인질의 (기본키는 $id로 넘겨줌)
	sql_query_info = SELECT * FROM data WHERE id=$id

	# 데이터 수집 질의 이후 수행할 질의 
	sql_query_post = UPDATE data SET status = 'ok'

}

# 데이터 인덱스 설정
index indexname 
{
	source = sourcename	#데이터 소스명 (상단 설정 이름)
	path = /data/		# 데이터 저장소 
	docinfo = extern	# 데이터 저장 모드 (기본 extern, inline, none)
	charset_type = utf-8	# 데이터 캐릭터 셋
	# 케릭터셋 테이블
	charset_table = 0..9, A..Z->a..z, _, a..z, U+AC00..U+D7A3, U+1100..U+1159, U+1161..U+11A2, U+11A8..U+11F9
	min_word_len = 2	#최소 단어 단위 
	ngram_len = 2		# N-gram Indexing 단위 (기본 0)
	ngram_chars = U+AC00..U+D7A3 # N-gram Indexing 을 사용할 캐릭터셋 범위 
}

# 인덱서 설정
indexer
{
	mem_limit = 128M	# 메모리 제한
}

# 검색데몬 설정
searchd
{
	listen		  = /tmp/searchd.sock	# unix domain socket 경로
	listen		  = 9312		# TCP 포트 
	listen		  = localhost:9306:mysql41	# MySQL 프로토콜 (SphinxQL)
	log = /log/log.log	# 데몬 로그 
	query_log = /log/query.log # 질의 로그 
	read_timeout = 5 # timeout
	max_children = 30 # 최대 자식 프로세스
	pid_file = /var/run/pid.pid # pid 경로
	max_matches = 1000 # 최대 매칭 수 
}

PHP MySQL Native Driver (mysqlnd)

2012/03/06 12:58

PHP MySQL Native Driver (mysqlnd)

PHP 5.3 부터 지원하기 시작한 MySQL Native Driver 는 MySQL 에서 지원하는 MySQL API를 이용하지 않고, PHP만을 위해 새로 쓰여진 C언어 기반의 API입니다. MySQL 의 듀얼라이선스 정책과 기타 메모리 반환시, 데이터 복사시 불필요한 낭비를 줄이고 좀더 PHP에 최적화된 성능을 제공하기 위해서 작성된 것입니다.

기존 MySQL Client API 와 동일한 동작을 하게끔 새로 작성된 API로 큰 성능향상에 기대하는 것은 무리지만 아주 약간은 빨라지고 가벼워 졌다는것에 중점을 두면 좋겠습니다.

또한 MySQL 클라이언트가 구지 필요없고 DB접속만 가능한 웹 서버일 경우 MySQL 클라이언트를 설치 하지 않고 PHP를 컴파일하는 것에는 매우 환영할 점입니다. ^^

MySQL , MySQL Improved, MySQL PDO (PHP Data Objects) 의 client api를 기존 MySQL Client API를 사용하지 않는것입니다. (libmysqlclient.so 등)

컴파일 환결설정에는 클라이언트만 존재하는 서버에서 더이상 MySQL Client 설치가 필요치 않고 PHP 소스만 가지고 설치를 할 수 있습니다.

--with-mysql=mysqlnd  (MySQL API)
--with-mysqli=mysqlnd (MySQL Improved Extension)
--with-pdo-mysql=mysqlnd (MySQL Functions:PDO_MYSQL)
--enable-mysqlnd

경로 설정등은 기존의 MySQL Client API (libmysqlclient)를 더 이상 사용하지 않기 때문에 필요치 않습니다.


32Bit PHP 에서 42억 이상의 수 계산 및 합산 (with MySQL, without bc, gmp)

오랜만에 PHP 팁을 쓰네요 ~ 사실 PHP팁이라기 보다는 MySQL 질의 사용 방법에 대한 것을 적어 봅니다. 32bit 로 컴파일된 PHP의 경우 최대 정수 값이 int(2147483647) 입니다. 64bit 환경에서 컴파일된 PHP는 int(9223372036854775807) 의 값을 다룰 수 있습니다. 하지만 32bit환경에서 최대 정수값 이상의 계산을 하려 할때는 bc, gmp등의 수치 계산 확장 모듈이 필요 합니다.

사용하고 있는 모든 환경에서 수치 계산 확장 모듈이 모두 사용가능 한것은 아니기에 MySQL 의 힘을 빌려 계산을 할 수 있습니다. MySQL 내부적 수치 연산은 BIGINT 는 unsigned 일떄 18446744073709551615 까지 가능합니다. 엄청 큰 수를 다룰 수 있어 종종 사용을 합니다.

합 , 누적 , 평균등의 계산을 MySQL 내부 변수와 함께 질의로 표현을 할 수 있습니다.

SET @total = 0; -- 전체 합을 구할 변수 

SELECT 
	tRst.trade_date, -- 거래일
	tRst.s_amount,	-- 합계
	@total := @total + tRst.s_amount AS acc_amount -- 누적합
FROM
(
	SELECT 
		trade_date, -- 거래일
		sum(amount) as s_amount -- 거래 금액
	FROM
		trade
	GROUP BY 
		trade_date
) AS tRst
GROUP BY tRst.trade_date
UNION
SELECT @total; -- 총계

위 간단한 질의로 각 거래일에 대한 합산과 함께 , 누적합, 총계 등을 한번에 구할 수 있습니다. UNION 을 사용하여 총 누적된 합산 금액을 모두 구할 수 있습니다. 물론 이와 함께 별도의 수식을 이용하여 좀더 다양하게 응용이 가능 하겠죠 ~ ^^

이상으로 bc, gmp를 사용할 수 없는 32bit 컴파일된 PHP환경에서 MySQL의 도움으로 큰 수에 대한 합산 및 계산을 할 수 있습니다.

Apache 2.4.1 릴리즈

2012/02/22 08:51

Apache 2.4.1 릴리즈

드디어 Apache httpd 2.4.1 이 릴리즈 되었네요 ~ 정말 반가운 일이고 많은 변화가 있습니다. 가장 큰 변화중에 하나가 Apache 실행시에 MPM 타입을 선택을 할수 있는 형태로 변한것입니다. 그리고 그중에 가장큰 Event MPM이 추가 된것이죠 그동안 Apache httpd 에서는 prefork, thread 형태의 MPM을 지원했었고 2.2 대에서 실험적으로 Event MPM을 지원했는데 이번에는 정식으로 Event MPM을 지원합니다. 물론 컴파일을 다시 하지 않아도 모듈형태로 실행시 원하는 형태의 MPM을 선택하여 실행시킬수 있는 형태로 바뀌었습니다.

소스의 변화점은 apr, apr-util 이 소스에 포함되어 있지 않은 형태로 배포가 됩니다. 컴파일할때는 좀더 귀찮겠지만 , 자주 바뀌지 않는 apr, apr-util 을 매번 한번에 컴파일 하지 않아도 되는 점이 있습니다. (물론 그전에도 따로 사용해도 괜찮았었죠, 소스에서 포함되지 않았다 라는 것이죠)

기능상의 변화는 비동기 통신에 더좋은 반응을 할수 있는 형태로 바뀌었다는 것인데 이것은 Event MPM을 지원한다는 말 같습니다.

그외 사용상 더 새로운점이 있으면 포스팅을 수정,추가 해보도록 하죠~ ^^

컴파일 방법

선행작업
Apache Portable Runtime Project (http://apr.apache.org) 에 방문하여 apr, apr-util 을 다운로드 받아 설치합니다.
apr, apr-util을 apache httpd 2.4.1 의 srclib 디렉터리내에 apr, apr-util로 압축을 해제 하신다음에 사용하셔도 괜찮습니다.(이전 버전들 처럼 사용)
그외 따로 컴파일 하시려면 apr 과 apr-util을 따로 설치해주시고 Apache httpd 2.4.1 컴파일 설정시에 --with-apr=[apr:prefix] --with-apr-util=[apr-util:prefix] 를 옵션으로 넣어 컴파일 하셔야 합니다.

컴파일
이전버전과 동일하게 사용하셔도 됩니다. 다만 여러가지 MPM을 테스트 하시려면 --enable-mpms-shared=all 옵션으로 모든 MPM을 활성화하여 동적 모듈로 만들어 놓을 수 있습니다. 설정만 바꾸면 괜찮겠죠

컴파일 환경 설정 (configure)
1. apr, apr-util을 Apache httpd 2.4.1 의 srclib 에 포함 시켰을때 --with-included-apr 옵션을 추가 시켜 같이 컴파일을 할 수 있도록 설정해주시면 됩니다.

2. apr, apr-util을 별도로 설치하여 사용중이실때 --with-apr, --with-apr-util 옵션 으로 경로를 설정해주시면 됩니다.

그외 사항은 원하시는 옵션으로 컴파일 하시면 동일하게 동작합니다. ^^ 너무 쉽지 않나요? 일단 오늘 사용해봤기 때문에 좀더 상황을 봐서 포스팅을 해봐야 겠네요 ^^

authz_core:error AH01630: client denied by server configuration
mod_authz_core 에서 제한을 한 경우 위와 같은 메시지가 error log에 기록됩니다. Directory 부분에 해당 Directory 접근 제한을 해제 하셔야 합니다.

Require all granted 모든 접근에 대해 제한을 두지 않습니다.
Require all denied 모든 접근에 대해 제한합니다.
Require env env-var 해당 환경 변수만 허용합니다.
Require method http-method 해당하는 HTTP 메소드(GET/POST등)만 허용합니다.
Require expr expression 표현식이 참일때만 허용합니다.
Require user userid 사용자 아이디에 해당할때만 허용합니다
Require group group-name 해당하는 그룹만 허용합니다.
Require valid-user 허가된 사용자만 허용합니다.

(auth 모듈을 사용하지 않는 다면 해당하지 않습니다.)

Node.js

2012/02/13 18:20

Node.js

사용자 삽입 이미지

Node.js 는 Javascript 문법으로 서버 사이드 스크립트를 손쉽게 제작 할 수 있는 도구(?) 입니다. 서버에서 간단한 소켓 서버를 구성하거나, 파일 감시, 또는 특정 이벤트에 대한 작업을 처리 할때 C, Perl, Java등의 언어로 복잡하게 작업 해야 할것을 아주 간단하고, 쉽게 작업할 수 있습니다.

웹 개발자에게 아주 친숙한 Javascript 문법으로 되어 있으며 Node.js 는 Google Chrome 에서 사용하는 V8 Javascript Engine을 사용하여 아주 뛰어난 성능을 보입니다. (최종 결과물 실행결과가 , 매우 최적화 되어서 빠르다거나, 메모리 사용량이 매우 작다는 뜻은 아닙니다. ^^)

해당 기능만 수행하는 전용 프로그램과는 틀리게 좀 무겁기는 하지만 간단하게 작성하며 유지보수가 쉬운 서버사이드 스크립트 언어로서는 최적의 방법으로 작업을 마무리 할수 있게 도와줍니다.

아래 스크립트는 /tmp/testfile 을 감지하여 파일에 대한 이벤트를 검출하는 것입니다. 변경이 이루어 졌는가 또는 , 이름이 변경되는가를 감지 할 수 있는 스크립트 입니다.

// 파일 경로 
var filepath = '/tmp/testfile';

// Filesystem 모듈 로드 
var fs = require('fs');

// fs watch 메소드를 사용하여 /tmp/testfile 을 감시한다.
fs.watch(filepath, function (event, filename) {
	console.log('event is: ' + event);

	if (filename) {
		console.log('filename provided: ' + filename);
	} else {
		console.log('filename not provided');
	}
});

사용자 삽입 이미지

또한 Node.js를 가지고 간단한 웹 서버를 만들 수 있습니다. Web 사이트와 비동기 통신을 하면서 각 클라이언트들에게 방송메시지를 전달하는 아주 간단한 echo 서버를 만드려 할때는 소켓 프로그래밍이 가능한 타 언어보다 좀더 쉽고 간결하게 만들 수 있습니다.

좀더 공부를 해봐야 하지만, 아직까지 힘들게 작업했던 모든것이 한번에 해결되는듯한 느낌으로 다가오네요 ^^

설치 방법은 간단합니다.

Node.js ( http://www.nodejs.org/ )

http://www.nodejs.org/#download 에 방문을 하셔서 Windows , Macintosh, sourcecode  를 이용하여 손쉽게 설치가 가능합니다.

사용자 삽입 이미지

아직 한글화된 문서는 많이 찾아보기 힘들지만, 대부분 손쉽게 접근할 수 있도록 잘 정돈되어 있습니다.
전체적인 평가로는 너무나 재미있는 녀석이네요 ^^

Halo 액상 해외 구매

2012/02/13 12:35

Halo 액생 해외주문

헤일로 액상중 가장인기 있는 액상 Torque56 , Prime15, Malibu Menthol 을 주문했습니다. 약 10일간 기다림 끝에 회사 사무실로 도착했네요
일반 우편으로 배송 받았어도 매우 안정적으로 받을 수 있게끔 포장상태가 매우 좋습니다.
사용자 삽입 이미지

통합 물류 센터 같은 곳에서 보낸것 같습니다.
사용자 삽입 이미지

작은 박스안에 뽁뽁이로 깔끔하게 포장이 되어 있네요 ^^
사용자 삽입 이미지

가장 중요한 액상입니다. 아주 잘 왔네요 서비스로 신제품인 HX3 샘플도 왔군요 ~ ^^

너무 좋네요 일요일 액상이 떨어져 데캉에 가서 USA-Mix를 하나 구매 했는데 조금만 참으면 좋았을텐데.. 아쉽네요

해외 배송이지만 깔끔한 포장과 함께 나름 안전하게 배송이 마무리 되어서 너무 좋네요 ^^

Mouse Without Borders

2012/02/08 11:27

Mouse Without Borders

Mouse Without Borders 는 KVM 소프트웨어 (하드웨어 KVM 스위치와는 다르게 모니터는 각각의 컴퓨터에 연결된 모니터를 이용합니다.) 입니다. 소프트웨어적으로 여러 컴퓨터를 제어할수 있습니다. Microsoft 에서 정식으로 제공하는 프로그램이 아닌 시험적인 프로그램으로 제품에 대한 지원이 지속적으로 이루어지지 않을 수도 있으며 , 여러가지 오류를 포함 할 수도 있습니다.

이와 비슷한 소프트웨어로는 오픈 소스 프로젝트인 Synergy , Input Director 가 있습니다. Synergy 의 경우에는 여러 OS를 지원하지만 설정 방법이나, 키매핑 등의 문제(한/영전환키)가 있습니다. Mouse Without Borders는 시험적인 소프트위어로서 아직까지 (현재까지)는 아무런 비용없이 사용 할 수 있습니다. Windows를 사용하는 환경이라면 아무런 문제없이 사용가능 합니다.

최대 4대의 장치를 사용할 수 있고, 각 장치에 연결된 여러 입력장지로 다른 장치를 동시에 제어 할 수 있습니다. 또한 서버 클라이언트 구조가 아닌각각의 장치가 서버와 클라이언트를 담당하고 있어 한대의 장치가 연결이 끊겨도 다른 장치는 동시에 사용가능 합니다. 클립보드 공유, 파일 드래그앤 드롭등을 지원하고 여러 편의 성이 지원됩니다. 또한 동일 네트웍 내의 장치를 하나의 키를 통해 연결을 합니다. Windows 로그인 화면에서 입력장치를 사용할 수 있습니다.

http://getsatisfaction.com/mouse_without_borders 에서 다운로드 받을수 있습니다.

Windows 에서 설치시에 관리 권한이 요구 될수 있습니다.

설치 후 키셋팅 및 장치 이름을 설정하면 자동으로 네트웍상의 다른 장치를 찾아 연결을 진행합니다.

TCP 포트는 15100, 15101 포트를 사용하며
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MouseWithoutBorders 에 TcpPort 의 이름으로 REG_DWORD 값으로 TCP포트를 변경 할 수 있습니다.
cmd
reg add HKLM\SOFTWARE\Microsoft\MouseWithoutBorders /v TcpPort /t REG_DWORD /d [포트번호]

요구 사항
Microsoft .NET Framework 2.0 SP2

사용자 삽입 이미지

설치 화면 (라이선스 동의)

Accept and Install 을 눌러 다음으로 진행합니다.

사용자 삽입 이미지

간단한 설치과정 (약 5초 이내) 를 진행한 후 설치가 완료 됩니다.
사용자 삽입 이미지

실행 후 최초 설정 화면 입니다. 두대의 컴퓨터에서 진행 준비가 되어 있어야 합니다.
사용자 삽입 이미지

보안키 와 다른 컴퓨터 이름을 적어 넣습니다.
사용자 삽입 이미지

컴퓨터 내부 모든 이더넷 장치의 아이피를 통해 다른컴퓨터를 검색합니다.
사용자 삽입 이미지

연결이 될경우 위와 같이 타 컴퓨터와 연결이 나타납니다. 아이피 및 보안 키를 변경할 수 있습니다.
사용자 삽입 이미지


상세 설정 화면입니다.
Wrap Mouse : 마우스 동작을 모니터 A->B->C->A->B->C 형태로 돌아가면서 사용할 수 있도록 합니다.
Share Clipboard : 클립보드를 공유합니다.
Hide logo on Logon Screen : 로그온 시
Disable CAD (Ctrl + Alt + Del) : 를 눌렀을때는 키를 전달하지 않습니다.
Switch between machine, : 컴퓨터 이동 단축키 입니다. Cltrl+Alt 키 이후 누를 키를 선택합니다.
Show Settings From Ctrl+Alt: 설정화면 표시 단축키 입니다.
Exit the application, Ctrl+Alt: Mouse without borders 의 종료 단축키 입니다.
Lock the controlled machine, Ctrl+Alt : 제어되는 컴퓨터를 잠금 단축키 입니다.
Reconnect to other machines , Ctrl+Alt : 연결된 컴퓨터와 연결을 해제 하고 다시 연결합니다.
Switch to ALL mode : 모든 컴퓨터를 동일하게 제어 합니다. (입력장치 입력이 모든컴퓨터에 동시에 전달됩니다.)

위와 같은 상세 설정을 할 수 있습니다.

또한 Wrap Mouse 설정의 경우 연결된 컴퓨터의 설정이 모두 변경됩니다.

삭제 방법
Mouse without border 는 프로그램 추가 / 삭제 에 표시가 안됩니다. 그러므로 Windows Installer 의 명령어로 직접 삭제를 해야 합니다.
명령어 프롬포트 에서 아래와 같이 입력합니다.
사용자 삽입 이미지

> msiexec /uninstall {D3BC954F-D661-474C-B367-30EB6E56542E}

위와 같이 입력하시면 삭제가 진행됩니다.

갤럭시 S SHW-M110(SKT/KT) VG14 순정 펌웨어


갤럭시 S SHW-M110 SKT 순정 펌웨어 입니다.
루팅 후 순정으로 돌리고 싶으신분들 사용하시기 바랍니다.

SKT 용
다운로드
MD5 Hash : dbdb20bad2d9bec2287942bea829bf7b
SHA256 Hash : 845a29e06c4de994035fb2b145163bd7803a98b19369c7f507213c9e16128fd3

다운로드 받으신 후에 해시값을 확인하신 후 사용하시기 바랍니다.



JQuery 정규식으로 selector 사용방법

2011/07/22 08:07

JQuery 정규식으로 selector 사용방법

여러개의 DOM 객체중 정규식에 해당하는 DOM 객체들만 추출하여 사용하는 방법입니다.
$(
	/* selector구문 */
).filter(function(){
	return this.id.match(
			/* 매칭될 정규식 */
		);
}).each(function(){
	// 해당하는 부분만 사용함
});
위 처럼 아주 간단하게 사용 할 수 있습니다.

갤럭시 S2 SHW-M250(SKT/KT) EG14 순정 펌웨어


갤럭시 S2 SHW-M250 SKT 순정 펌웨어 입니다.
루팅 후 순정으로 돌리고 싶으신분들 사용하시기 바랍니다.

SKT 용
다운로드
MD5 Hash : e0c4c6c293fcc04cb4c6c93e32f89986
SHA256 Hash : 102051b28c291016160b383cf96f1f5ca5f70f64b00f8f3f3a50684d4d5f1bbd

KT 용
아직 안나왔습니다.

다운로드 받으신 후에 해시값을 확인하신 후 사용하시기 바랍니다.



갤럭시 S2 SHW-M250(SKT/KT) EE31 순정 펌웨어


갤럭시 S2 SHW-M250 SKT/KT 순정 펌웨어 입니다.
루팅 후 순정으로 돌리고 싶으신분들 사용하시기 바랍니다.

SKT 용
다운로드
MD5 Hash : 9fce372d16d07f36f73724717e00463b
SHA256 Hash : 8f01c1002bd8f73fa3573c29272ed45b03f0ada425dd2e24493e2df5cc63f4df

KT 용
다운로드
MD5 Hash : 67b22853676ef548b2504329c5af8adb

현재 블로그에서 직접 다운로드 할 수 있습니다.
SHA256 Hash : 5535ad0d7dd7afe76d89aae917f702eef085f106d3ce2e208bfaae5ba881f779

다운로드 받으신 후에 해시값을 확인하신 후 사용하시기 바랍니다.



HTML 5 Cache manifest (HTML 5 Application Cache)

2011/05/13 08:51

HTML 5 Cache manifest (HTML 5 Application Cache)

HTML 5 를 이용한 웹 애플리케이션을 개발할때 실시간으로 표현시 느린 부분 이나 즉시 수행해야 할 부분을 미리 읽어 들이거나, 다음 접속때, 오프라인된 내용을 이용할때 미리 저장된 데이터를 사용할 수 있도록 하는 방법입니다. 예를 들어 특정 버튼 클릭시 음성 파일을 재생한다고 했을때 캐시 되지 않고 실시간으로 표현하기 위해서는 이벤트가 발생한 후 음성 파일을 다운로드 후 재생을 하게 됩니다. 이때 발생하는 문제점 중에 하나가 버튼을 클릭 한 후 바로 재생을 못하고 다른 동작이 일어 났을때 재생이 될 수 있다는 점이죠. 이런 것을 최소한 방지 하기 위해 미리 읽어 들일 파일을 브라우저에게 알려주는 것입니다.

W3C HTML Application Cache

<DOCTYPE html>


캐시 파일의 MIME 타입은 text/cache-manifest 입니다.

CACHE MANIFEST
#해당 캐시 파일에 대한 설명 , 버전, 갱신일 등.

# 해당 웹 페이지에서 캐시할 내용입니다.
CACHE:
#캐시할 파일 
./cache.jpg
http://example.com/cache.png

# 네트웍 장애(또는 비슷한 현상 : 연결실패등)시 사용할 내용입니다.
FALLBACK:
#대상 파일	#대체할 오프라인 파일
./cache.jpg ./cache_offline.jpg

# 오프라인시 사용 불가능 한 파일 입니다. (온라인에서만 접근 가능한 파일)
NETWORK:
./networkimg.jpg

위 처럼 사용합니다.
HTML 5 Application cache 는 이벤트를 발생시킵니다.

interface ApplicationCache {

	// 상수 : 업데이트 상태
	const unsigned short UNCACHED = 0;	// 캐시가 안되었음 (캐싱전)
	const unsigned short IDLE = 1;	// 유휴상태 
	const unsigned short CHECKING = 2;	// 캐시 채크중
	const unsigned short DOWNLOADING = 3;	// 다운로드중
	const unsigned short UPDATEREADY = 4;	// 업데이트 준비
	const unsigned short OBSOLETE = 5;	// 캐시 크룹이 사용할 수 없는 상태임
	
	// 상태 값
	readonly attribute unsigned short status;
	
	// 업데이트
	void update();	// 업데이트를 다운로드 하도록함
	void swapCache();	// 캐시된 내용 중 최근 변경된 값을 확인합니다. 
	
	// 이벤트 핸들러 
	attribute Function onchecking;	// 캐시를 체크하고 있음
	attribute Function onerror;	// 오류발생
	attribute Function onnoupdate;	// 업데이트가 안되었다. 
	attribute Function ondownloading;	// 다운로드 중
	attribute Function onprogress;	// 다운로드 비율
	attribute Function onupdateready;	// 업데이트 준비 됨
	attribute Function oncached;	// 캐시 완료
	attribute Function onobsolete;	// 캐시 사용 할 수 없음
};
ApplicationCache implements EventTarget;

// cache 객체 
var cache = window.ApplicationCache;	// window 에서 가져옴
끗~

가족 나들이 - 오산 물향기 수목원

5월 8일 오산 물향기 수목원 가족 나들이 ~ 봄꽃이 다 진 후 ~ 가족끼리 여행을 다녀 왔습니다.

수진e 온실앞에서 한컷~

수진e 온실앞에서 한컷~

엄마와 함께~

엄마와 함께~

아빠랑.... (얼굴 표정이 -_-)

아빠랑.... (얼굴 표정이 -_-)

이쁜짓~

이쁜짓~

대현이는 잠자느라고 사진을 못찍었네요

MySQL 데이터 타입

2011/04/25 12:52

MySQL 데이터 타입

정수형
MySQL 의 정수형 타입은 TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 등이 있습니다. 순서대로 1Byte, 2Byte, 3Byte, 4Byte, 8Byte 를 사용합니다. 정수형 데이터를 이용해 연산을 할경우 내부적으로는 BIGINT로 출력이 됩니다. 실제로 연산 결과를 테이블로 저장을 하거나 임시 테이블 생성된 것을 확인해 보면 필드 타입이 BIGINT로 되어 있습니다. 테이블 생성시 INT(10) 과 같이 괄호 안의 숫자의 크기는 MySQL에서의 출력 제한일 뿐 실제 내부 데이터는 4Byte를 차지하게 되어 있습니다. 또한 UNSIGNED 를 사용하여 보다 큰 값을 활용할 수 있습니다. 예를 들어 많이 저장하는 형태인 IP주소는 32Bit의 부호 없는 주소 입니다. 이 것을 MySQL 에 저장을 할때 CHAR(15) 와 같이 저장하는 것 보다는 INET_ATON 함 수를 이용하여 4Byte 의 정수로 저장을 할 수 있습니다. 고정된 길이 형태의 정수형 데이터를 이용하는것이 테이블 이용 측면이나, 공간활용 측면에서 매우 좋습니다. 수십개의 ROW를 다룰때는 상관없지만 매우크게 늘어날 데이터의 경우 꼭 생각을 해보는 것이 좋습니다.

실수형
실수형 데이터 타입은 FLOAT, DOUBLE, DECIMAL 이 있습니다. 이 데이터 형식은 매우크거나 소수점이 포함된 실수를 표현하는 데이터 형입니다. 데이터의 크기는 FLOAT 는 4Byte, DOUBLE 는 8Byte를 이용합니다. DECIMAL은 정한만큼의 크기를 이용해 저장이 가능합니다. 하지만 정확도 면에서는 DECIMAL이 정확합니다. 실수형 데이터에 대한 매우 정밀한 연산을 요하지 않는 이상 DECIMAL보다는 FLOAT, DOUBLE을 사용하는게 바람직합니다.
* UNSIGNED 연산 오류 발생시

문자열
문자열에는 많은 형태의 데이터 형이 있습니다. CHAR, VARCHAR, TEXT, BLOB, BINARY 등이 있습니다. (물론 SMALLTEXT, TINYTEXT 등의 타입도 존재합니다. 하지만 이런것 들은 다루지 않도록 하겠습니다.)
CHAR
고정 형태 문자열입니다. CHAR(20)으로 설정된 필드의 경우 20개의 문자를 저장할 수 있는 공간이 됩니다. 1개의 문자를 저장해도 실제 저장된 영역은 "1Byte + \0 ...." 형태로 20Byte를 사용하게 됩니다. (MySQL에서 문자열 저장시 한개의 필드내 값은 마지막 \0(널문자)가 나오는 곳을 확인합니다.)

VARCHAR
가변 길이의 문자열입니다. 최대 저장할 수 있는 길이를 VARCHAR(200)등 과 같이 지정 할 수 있습니다. 많은 양의 데이터를 저장 할 때는 불필요한 공간을 차지 하지 않기 때문에 저장공간 활용면에서는 많은 효율이 있습니다. 테이블 생성시 ROW_FORMAR=FIXED 를 지정을 하면 CHAR과 동일하게 취급합니다.

BLOB,TEXT
매우큰 형태의 데이터를 저장하는 데이터 타입입니다. 보통 게시판에서의 게시물등이 이에 해당합니다. 이러한 형태의 데이터 타입은 별도의 테이블로 빼 놓는것이 좋습니다.

ENUM
ENUM은 정해진 문자열과 (최대 64개) 수(bit)로 매칭시켜놓은 형태입니다. 예를 들어 Apple = 1, Banana = 2, Melon = 3 등과 같이 ENUM에 정해진 값들은 내부적으로 숫자로 취급됩니다. 데이터의 속성 , 카테고리 등의 상태 값을 지정하는 데이터로 사용시에 매우 좋은 형태의 자료입니다. 예를 들어 CHAR(10)형태의 데이터 타입에 INDEX를 생성하, 똑같은 데이터에 ENUM형태에 INDEX를 사용하는 것과는 하늘과 땅차이 입니다. 8개의 타입이 필드에 지정된다고 했을때 데이터 길이는 ENUM은 1Byte, CHAR형은 10Byte를 차지하게 되고 INDEX또한 매우 근 형태를 나타나게 됩니다.

SET
SET은 여러개의 값을 지정할 필요가 있을때 사용합니다. 예를 들어 읽기,쓰기,실행 3개의 권한을 데이터 베이스에 표현을 해봅시다. 특정 필드에 "철수"의 권한은 "읽기,쓰기,실행" 이렇게 표현을 할 경우 데이터를 읽어온 후에 또다시 처리를 하게 됩니다. 하지만 SET의 경우에는 읽기 = 1, 쓰기 = 2, 실행 = 3 으로 할당(비트)을 합니다. 각각 값은 1개의 비트로 표현을 하고 3개의 값은 3개의 비트로 처리 됩니다. 예를 들어 "000" 비트의 경우 모든 값을 가지지 않는 형태이고 "001"은 읽기, "010" 은 쓰기, "100" 은 실행 으로 저장하는 형태입니다.(저장 크기는 최소 1Byte 최대 8Byte) 이 처럼 권한 등 여러가지 상태값을 저장할때 SET은 매우 좋은 성능을 나타 냅니다.

MySQL 데이터 타입과 설계 방법
MySQL 데이터형의 괄호안 숫자 의미

MySQL Optimization Hint

2011/04/25 08:51

MySQL Optimization Hint

DELAYED 처리 지연
SELECT 가 매우 바쁜 테이블이고 , INSERT , REPLACE의 경우에는 늦게 처리가 되어도 문제가 없을 경우 사용할 경우 해당 구문은 테이블 작업이 없을때 작업을 하도록 큐에 기록됩니다. LAST_INSERT_ID를 사용할 수 없습니다. 구문의 큐에 적재되었을때는 해당 구문을 바이너리 로그에 남기지 않으며 실제로 구문이 수행이 되엇을때 로그에 남기게 됩니다. 서버가 갑작스레 중단이되거나 시스템이 사용불가 상태에 놓였을때는 해당 구문이 수행되지 않으며 또한 복구 할 수 없습니다. 그리고 파티셔닝된 테이블에서는 사용할 수 없습니다. DELAYED구문은 MySQL 의 시스템 설정 값인 server_delyed_insert_limit 구문 이상으로 많을 경우 지연되지 않고 바로 수행될 수 있습니다. 사용가능한 테이블 엔진은 MyISAM, MEMORY, ARCHIVE, BLACKHOLE 에서 사용가능 합니다.

HIGH_PRIORITY , LOW_PRIORITY
테이블 접근 우선 순위를 다루는 힌트 입니다. HIGH_PRIORITY 는 테이블 락을 기다리는 큐 앞에 우선적으로 힌트가 주어진 질의를 앞에 놓습니다. LOW_PRIORITY 는 다른 테이블 락을 위해 기다리는 구문들 중에 가장 마지막에 위치 시켜 늦게 실행 시키는 것입니다. HIGH_PRIORITY 를 사용가능한 테이블 엔진은 MyISAM, MEMORY, MERGE 에서 사용가능합니다.

SQL_SMALL_RESULT, SQL_BIG_RESULT
GROUP BY, DISTINCT 구문을 수행할 때 임시 테이블 과 정렬중 어떤것을 사용할지 알려주는 것입니다. SQL_SMALL_RESULT 결과가 적으므로 정렬을 위해 인덱스가 포함된 임시테이블을 사용하고 SQL_BIG_RESULT 는 결과를 정렬전에 임시테이블을 만들고 임시테이블에서 정렬을 수행합니다.

SQL_BUFFER_RESULT
질의 실행을 위해 테이블 락을 빨리 해제 하도록 임시테이블을 사용합니다.

STRAIGHT_JOIN
MySQL 이 최적화 실행을 하기 위해 분석되는 시간이 극도로 클때 사용합니다. PROFILING 을 수행했을때 Statistics 상태 값이 매우 클때 이 구문을 사용하여 최적화를 수행하지 않고 나열된 순서대로 테이블을 이용합니다. 이런 질의를 수행할때 이 구문을 수행하는 것 보다는 쿼리 옵티마이저가 최적 화를 수행 할 수 있도록 구문을 재작성 하는것이 좋습니다. (FROM 이후 JOIN 구문에서 테이블간 JOIN 유형을 쓰지 않거나, 나열했을 경우 STRAIGTH_JOIN 으로 수행 됩니다.) MySQL 서버 설정 값 중 optimizer_search_depth 는 쿼리 옵티마이저가 얼마나 실행계획을 철저히 분석할지 결정합니다. Statistics 에서 오래 수행이 된다면 이 값을 줄여주세요 , (최적화된 쿼리를 작성하는것이 더욱 중요합니다.) optimizer_prune_level 는 옵티마이저에게 조사된 행 수를 바탕으로 특정 실행 계획을 무시하도록 합니다. (특별한일이 없을 경우 수정하지 않는게 좋습니다.)

USING INDEX, FORCE INDEX, IGNORE INDEX
EXPLAIN 결과를 봤을때 질의와 관계 없는 인덱스를 사용하고 있으면 USING INDEX, FORCE INDEX를 이용하여 강제적으로 사용할 인덱스를 지정 할 수 있습니다. 또 FOR ORDER BY FOR GROUP BY를 이용하여 정렬/그룹 수행에 필요한 인덱스를 지정 할 수 있습니다.
IGNORE INDEX는 사용되는 인덱스중 무시할 인덱스를 지정합니다. 이 구문으로 지정된 인덱스는 사용하지 않고 무시됩니다.

SELECT * FROM table USE INDEX (index_1) IGNORE INDEX FOR ORDER BY (index_2) ORDER BY field_1;

MySQL 효율적인 테이블 설계 방법

2011/04/23 15:08

MySQL 의 효율적인 테이블 설계 방법

1. 저장될 형식에 맞추어서 데이터를 정규화 합니다.

어떠한 데이터라도 정규화가 가능한 범위까지 최대한 정규화를 합니다. 예를 들어 학생정보를 입력하는 테이블의 경우 학생의 기본 정보와 학과, 전공, 수강과목등을 하나의 테이블에 몽땅 넣는것 보다는 학과 전공 강의과목을 분류해 다른 테이블로 분류를 하여 학생 테이블에는 관련된 항목에 대한 키를 가질 수 있도록 합니다. 또한, 모든 정보를 가지고 있지 않은 별도의 정보는 별도의 테이블에 따로 저장을 하여 불필요한 공간이 모든 학생 정보에 들어가지 않도록 합니다. 정규화에 대한 자세한 정의는 천천히 다뤄보도록 하겠습니다.

2. 작은 형태의 데이터를 큰 데이터 형으로 저장하지 않도록 합니다.
학생들의 과목 점수를 저장하는 성정 테이블을 예를 들어보도록 하겠습니다. 학생 과목과 함께 학생 성적이 0점에서 최대 100점까지 기록이 된다고 할때 저장되는 필드의 데이터형을 INT, MEDIUMINT , SMALLINT 등으로 지정하지 않고 가장 작은 형태인 TINYINT로 지정합니다. INT의 경우에는 4Byte의 공간을 차지하게 되지만. TINYINT의 경우에는 1Byte의 저장공간을 자치하게 됩니다. 많은 양의 데이터가 쌓이게 된다면 한개의 필드 형에 따른 연산 속도가 많은 차이를 불러오게 됩니다.

3. NULL 의 최소화
MySQL은 조회시 필드의 값이 NULL인지를 판단하는 동작을 하게되어있습니다. 필드에 NULL값을 최소화 하여 쿼리 수행 속도를 높일수 있습니다.

4. ENUM, SET 을 활용
데이터 중 형태, 속성등을 나타내는 값을 저장하기 위해 CHAR,VARCHAR를 사용하는것 보다는 ENUM을 사용하는것이 효율적입니다. 표현상으로는 문자열이지만 내부적으로는 bit 단위로 처리가 됩니다. 도한 2개 이상의 속성을 구분값으로 처리하는것 보다는 SET 형식으로 처리하는것이 훨씬 효율적이고 공간과 쿼리 수행속도에 도움이 됩니다.

5. 테이블 Row format 을 고려합니다.
테이블의 Row format 은 테이블 내에 가변 컬럼들의 유무에 따라 결정이 됩니다. 그 형태에 따라 테이블 연산 수행 속도와 , 저장공간에 많은 차이를 불러옵니다. 예를 들어 특정 프로그램에 대한 수행 로그를 기록하는 테이블을 예를 들어 봅시다. 프로그램 연산시 사용하는 중요한 테이블이 아닌 연산 결과에 따른 로그들을 기록하는 테이블의 경우 수 많은 데이터가 쌓이게 됩니다. 또한, 많은 연산 보다는 필요에 의해 가끔 조회를 하게 됩니다. 이런 테이블의 경우에는 가변형 데이터 타입인 VARCHAR등을 사용하여 테이블의 구조를 잡는것이 좋습니다. 가변형 테이블을 사용함으로서 많은 공간 절약 효과를 나타낼 수 있습니다.

이것 과 반대로 회원 주문내역 테이블을 생각해 봅시다. 많은 회원들이 조회를 하는 주문내역 테이블에서는 가변 형태의 저장 포멧 보다는 고정형태의 필드를 사용하는것이 연산 속도 및 테이블 최적화, 복구에 더 좋습니다. 고정적인 형태의 저장 형태로 인해 필드 데이터의 종료 위치를 계산할 필요도 없으며 데이터 타입 선언 형태만큼 데이터를 불러오게 됩니다. 물론 10개의 문자를 저장할 수 있는 CHAR형태의 필드일 경우에 1개의 문자만 저장해도 실질적 공간은 10byte를 차지하게 됩니다. 테이블 설계시 이 2개의 Row format 에 대해서는 특 실을 잘 따져 보는게 좋습니다. SHOW TABLE STATUS 구문으로 테이블 형태를 알아 볼 수 있습니다.

6. 큰 데이터 형은 별도의 테이블로 분리 합니다.
큰 데이터형식 BLOB, BINARY BLOB, TEXT 등은 별도의 테이블로 저장하는것이 좋습니다. 게시판을 예를 들어 보겠습니다. 여러 목록을 불러올 시에 해당 목록의 번호, 제목, 작성자 등만을 목록으로 표시합니다. 하지만 내용도 같은 테이블에 있다고 하면 해당 내용의 길이 및 데이터 저장 끝부분을 검사 하고 ,또한 ROW의 종료 위치 마저 재 각각임으로 테이블 연산시 많은 시간이 걸리게 됩니다. 이처럼 가늠하기 힘든 크기의 데이터를 가진 컬럼 데이터 타입은 별도의 테이블로 저장을 하여 테이블의 효율성을 높일 수 있습니다.

7. OPTIMIZE TABLE을 주기적으로 수행합니다.
큰 데이터 형을 가지는 테이블에 대한 INSERT / UPDATE 가 많을 경우 그만큼 테이블에 대한 단편화가 심해지게 되어 있습니다. 데이터가 저장되어 있을때 해당 ROW에 대한 업데이트가 진행되었을때 더욱 작은 형태로 데이터를 수정하게 되면 빈공간이 중간에 남게 됩니다. 또, 더 큰 형태로 업데이트를 하게 될 경우 해당 ROW에 대한 데이터를 다른 위치에 저장을 하게 되고 그 위치는 빈공간으로 남게 되어 있습니다. 물론 다른 작은 데이터가 오게 되면 그 공간으로 들어가겠죠 (Windows 의 디스크 조각모음을 생각하시면 됩니다.) 큰 데이터가 자주 업데이트 되거나, 삽입 삭제가 이루어 진다면 가변 길이 저장형태에 따른 테이블 데이터의 단편화게 오게 됩니다. 이와 같은 현상을 최소화 하기 위해 테이블에 대한 OPTIMIZE TABLE을 수행하여 줍니다.


MySQL TO_SECONDS()

2011/04/21 12:43

MySQL TO_SECONDS()

지정된 일자가 0000년 00월 00일 부터 몇 초가 흘렀는지 알려주는 함수 입니다. DATE , UNIXTIME 등으로 기록된 시간으로 부터 계산된 값으로 MySQL 파티셔닝 등에 유용하게 사용될 수 있습니다. 시간을 기준으로 파티셔닝 할때 최초 기록일 로 부터 시간으로 나누어 관리가 가능합니다.
-- 입력된 시간까지의 초
SELECT TO_SECONDS('2011-04-21 00:00:00');
-- +--------------------------+
-- | TO_SECONDS('2011-04-21 00:00:00') |
-- +--------------------------+
-- |              63470563200 |
-- +--------------------------+
-- 1 row in set (0.00 sec)
-- 특정 일자 로 부터 흘러간 시간
SELECT TO_SECONDS('2011-01-01 00:00:00') - TO_SECONDS('2008-01-01 00:00:00');
-- +-----------------------------------------------------+
-- | TO_SECONDS('2011-01-01') - TO_SECONDS('2008-01-01') |
-- +-----------------------------------------------------+
-- |                                            94694400 |
-- +-----------------------------------------------------+
-- 1 row in set (0.00 sec)

위처럼 결과가 출력됩니다.

MySQL Foreign key 체크 끄기

2011/04/20 21:35

MySQL Foreign key 체크 끄기

MySQL 에서 테이블 덤프 파일이나, 대량 INSERT, ALTER TABLE, LOAD DATA 를 작업할때 Foreign key 체크로 인해 작업이 중단되는 경우는 아래 구문을 이용 할 수 있습니다.
-- 외래키 검사 비활성
SET FOREIGN_KEY_CHECKS = 0;

-- 데이터 입력 부분
SOURCE [덤프 파일]

-- 외래키 검사 활성
SET FOREIGN_KEY_CHECKS = 1;

위 처럼 외래키 검사를 일시 적으로 중지 할 수 있습니다. 이 구문은 현재 연결된 세션이 종료 될때까지 유지 됩니다.

MySQL Foreign Key 

Apache 2.2 Server MPM event(mpm event)

2011/04/15 12:50

Apache 2.2 Server MPM event (mpm event)

Apache 2.2 에서 I/O event 를 이용한 mpm을 사용할 수 있습니다. 단지 현재 시험적인 옵션이긴 하지만 테스트로 사용가능합니다. (상용 서비스에서 사용하면 아직 위험합니다.)

컴파일 환경설정 중에 --with-mpm=event 를 이용하여 I/O 이벤트 핸들러를 사용할 수 있습니다. 물론 리눅스 커널 2.6이상에서 epoll 을 사용할 수 있는 환경이 제공되어 있어야 합니다.

환경 설정을 마친 후에는 아래와 같은 경고 메세지가 나타납니다.
============================================================
    WARNING: THE 'event' MPM IS EXPERIMENTAL
============================================================
 The selected MPM might not be fully functional!

 Development of this MPM is not complete. Do not use this
 MPM unless you are a programmer willing to help fix it.

 If you are looking for a stable server, you should not use
 the 'event' MPM until it is moved out of experimental.
============================================================

약간 무섭기도 하나.. 상관없이 쭉~ 진행을 합니다. 컴파일 방법인 기존 아파치와 동일합니다. 하지만 다중 I/O 처리를 prefork , thread 등으로 처리하는것이 아닌 I/O event 를 이용하여 빠른 응답을 할 수 있도록 처리를 한다는것입니다.

컴파일을 쭉 진행한 후에 상태를 확인해 보도록 하겠습니다.
$ ./httpd -V
Server version: Apache/2.2.17 (Unix)
Server built:   Apr 15 2011 11:57:42
Server's Module Magic Number: 20051115:25
Server loaded:  APR 1.4.2, APR-Util 1.3.10
Compiled using: APR 1.4.2, APR-Util 1.3.10
Architecture:   64-bit
Server MPM:     Event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)

Server MPM 이 이벤트로 동작하는 것을 확인 할 수 있습니다. ab로 테스트를 해봤을때 대기 시간이 10~20%가량 줄어들었습니다. (기존 ab테스트 내용이 없는 관계로 차후 비교 하여 포스트에 추가하도록 하겠습니다.)

당분간 event 기반으로 사용을 해봐야 할 것같습니다. ^^

nginx 1.0.0, php 5.3.6 (php-fpm)

2011/04/15 09:11

nginx 1.0.0, php 5.3.6 (php-fpm)

nginx 가 2011 년 04 월12 일 부로 1.0.0 을 릴리즈 했습니다. 매우 반길일인건 분명하나 , 어떤 웹 서버를 선택해야 할지는 만은 고민이네요  , 저전력, 저성능으로 돌아가는 홈서버에서 자원의 사용을 좀더 줄이기 위해 선택하기에는 매우 반길일이나 , 기존 사용하던 apache 웹 서버 설정 만큼 친숙하지 않은 점은 사실 좀 꺼려지는게 사실입니다. 하지만 이번 1.0.0 버전이 릴리즈 된것이 매우 반갑네요 ~ , 세부 설정 및 많은 문서들이 없기에 좀 부족한 포스팅이 될것 같습니다.

nginx 에 대한 설명은 많은 분들이 알고 계시기에 따로 설명을 하진 않겠습니다, 간단하게 설정 방법을 알아 보도록 하겠습니다.

nginx 1.0.0 (http://www.nginx.org/en/download.html)
nginx 의 소스를 다운로드 받습니다. 용량이 작아 다운로드에도 상당히 금방 끝나 버립니다.
컴파일을 하기전 Makefile 을 생성하기 위해 환경설정을 합니다.
./configure \
--user=nobody \
--group=nobody \
--prefix=/usr/local/nginx_1.0.0 \
 --with-http_ssl_module \
 --with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_gzip_static_module \
--with-http_stub_status_module

그외 필요한 설정은 configure --help로 보시기 바랍니다. 기본적으로 홈서버 특성상 자주 업데이트 하고 개발테스트 목적으로 사용하는 만큼 prefix는 특정 기능별로 분리하기 보다 하나의 디렉토리에 버전별로 설정합니다.
동일 하게 make ; install 을 하면 되겠죠 일단 컴파일 후 설치까지만 합니다.

PHP 5.3.6 (FPM-FastCGI Process Manager/FastCGI)
PHP 5.3.3 버전 이상 부터 FPM(FastCGI Process Manager)가 PHP 코어에 포함되어 있습니다. 이전 버전을 사용하실 경우에는 다운로드 하신 후에 사용하시기 바랍니다. (http://php-fpm.org/)

* PHP 5.3.3 이하 (5.3.x)
SVN으로 PHP FPM 을 sapi 에 추가 하기 위해 다운로드 받습니다.
$ svn co http://svn.php.net/repository/php/php-src/trunk/sapi/fpm sapi/fpm
$ ./buildconf --force
$ ./configure --enable-fpm

* PHP 5.2.x 이하 버전
PHP-FPM 패치를 다운로드 받습니다. (http://php-fpm.org/downloads/) 버전별로 존재 합니다.
PHP를 소스를 압축 해재 하신 후 패치를 적용 시킵니다.
$ gzip -cd php-5.x.x-fpm-0.x.x.diff.gz | patch -d php-5.x.x -p1
$ ./configure -enable-fastcgi -enable-fpm

* PHP 5.3.3 이상 버전
$ ./configure \
--prefix=/usr/local/php-fpm_5.3.x \
--enable-fpm  \
--with-fpm-user=nobody \
--with-fpm-group=nobody
$ make;make install
PHP컴파일 옵션은 PHP 설치를 참조해주세요

동일하게 설치 하시면 됩니다. 단 FPM의 경우에는 PHP가 CGI 방식과 같이 한개의 PHP스크립트를 프로세스 1개가 처리하는 방식이 아닌 PHP가 하나의 데몬으로 처리를 하게 됩니다. 즉 PHP가 내부 프로세스로 PHP스크립트를 대기 하도록 되어 있습니다. 그렇기 때문에 실행 권한 등으로 사용자를 설정하게 됩니다. 기본적으로 nobody 를 사용하게 되지만 그외 사용자로 데몬을 돌리게 된다면 다르게 설정하시면 됩니다.

PHP-FPM 설정
앞서 말씀 드린대로 PHP-FPM 의 경우는 하나의 데몬으로 PHP가 프로세스로 떠있게 됩니다. 그러므로 데몬관련 설정을 해주어야 합니다.
설치 옵션상에 특별한 설정을 하지 않는 이상 prefix 의 etc에 위치하게 됩니다.
php-fpm.conf 파일의 설정을 변경합니다.
listen = /tmp/php-fpm.sock FastCGI 용 Listen 포트를 설정하게 됩니다. Unix Domain Socket 으로 설정합니다.  (TCP 설정도 가능합니다. host:port)
user = nobody # 프로세스 사용자
group = nobody # 프로세스 그룹
pm.max_children = 50 # FPM 최대 자식 프로세스 수
pm.start_servers = 20 # FPM 시작 서버 수
pm.min_spare_servers = 5 # FPM 최소 대기 서버
pm.max_spare_servers = 35 # FPM 최대 대기 서버
상세 설정은 FPM 관련 문서를 참조해 주세요. (위 설정으로 최대 성능을 내는것은 아닙니다. )

PHP-FPM 실행
PHP-FPM 의 prefix/sbin 디렉토리로 이동하시면 php-fpm 파일을 실행시키세요
$ ps ax | grep php-fpm 으로 프로세스가 떠있는것을 보실 수 있습니다.
25659 ?        Ss     0:00 php-fpm: master process (/usr/local/php-fcgi_5.3.6/etc/php-fpm.conf)
25660 ?        S      0:04 php-fpm: pool www
25661 ?        S      0:04 php-fpm: pool www

위 처럼 PHP-fpm 이 수행되고 있는것을 보실 수 있습니다.

nginx 설정
기타 설정은 nginx상세 설정 부분에서 다루겠습니다.(나중 시간날때 적어보도록 하죠~)
nginx 의 prefix/conf 에 가보시면 nginx.conf 가 존재합니다. 여기서 location 의 php파일 인식 부분을 설정하셔야 합니다.

location ~ \.php$ { # php 확장자에 대한 설정 (추가 확장자의 경우에는 정규식 형식으로 적어주시면 됩니다.)
                root html; (인식할 Document root 입니다.)
                fastcgi_pass unix:/tmp/php-fpm.sock; (FastCGI 의 경로 입니다. 앞서 설정한 PHP-FPM 의 Listen설정을 참조 하세요)
                fastcgi_index index.php; # (fastCGI 의 index파일 설정입니다. )
                fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; # 스크립트 파라메타 설정입니다.
                include fastcgi_params; # prefix/conf 에 fastcgi_params 파일에 보시면 GET/POST/SERVER 등에 대한 파라메터 설정이 있습니다. 따로 추가 설정하시려면 fastcgi params를 수정하시기 바랍니다.
        }
위 부분을 찾아 수정하시면 됩니다. 그외 추가 사항에 대해서는 나중에 다루어 보도록 하겠습니다.

nginx 실행
nginx 의 실행은 prefix/sbin 의 nginx 를 실행하면 됩니다.

nginx init.d 스크립트  : 포스트에 첨부했습니다.경로만 수정하세요
파일을 저장합니다 /etc/init.d/nginx
nginx="/usr/local/nginx/sbin/nginx"
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
설치한 경로로 설정합니다.
/sbin/chkconfig nginx on

PHP-FPM init.d 스크립트 :
PHP 소스 디렉토리의 sapi/fpm/init.d.php-fpm.in 파일을 /etc/init.d/php-fpm 으로 저장합니다.
php-fpm 스크립트를 열어 상단 경로를 수정해주세요
php_fpm_BIN=/usr/local/php-fpm/sbin/php-fpm
php_fpm_CONF=/usr/local/php-fpm/etc/php-fpm.conf
php_fpm_PID=/usr/local/php-fpm/var/run/php-fpm.pid

설치한 경로로 설정합니다.
/sbin/chkconfig php-fpm on

간단하게 설치 방법을 설명했습니다.~

PHP 5.2.x PHP.net 지원 중단

오늘 (2011.04.12) 부터 PHP.net에서 더이상의 지원을 안하고 차기 버전인 PHP 5.3 버전을 지원합니다. 문법상 틀린 부분 이나 보안 설정 부분이 약간 틀린 부분이 있었는데 이제 지원을 안하는 군요 ~ 버전 업~ 하러 가봐야 겠군요
 [08:40]

* 5.3.x 버전은 지속적으로 릴리즈 되어 왔고 오늘 부터 5.2.x의 지원을 하지 않는것입니다.

버전업 하고 왔습니다. 음. 특히 오래되거나 특별한 함수를 쓰지 않으니 별다른 문제점은 없겠지만. 보안상 , 또는 성능 개선상 없어진 함수들이 아쉬워 지지는 않겠죠 ? ㅋㅋㅋㅋ

간만에 버전업 해봤습니다.

php.ini 에 timezone 설정을 해주세요~ ^^ 안할경우 날자 관련 함수를 사용하는 페이지에 넣어주시면 됩니다. ^^ 기본으로 설정이 필요한 부분입니다.

php.ini

date.timezone = "Aisa/Seoul"

함수
date_default_timezone_set("Aisa/Seoul") ;

*타임존 설정을 하지 않을 경우 "It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier." 메세지가 출력됩니다. 

MySQL Query Profiling

2011/04/11 08:43

MySQL Query Profiling

MySQL 에서 쿼리의 처리 상태별 소요 시간등을 알아 볼 수 있는 방법은 EXPLAIN 으로 쿼리 JOIN 이나 유효하게 사용되는 키등을 볼 수 있습니다. 또하나의 방법이 profiling 입니다. MySQL 에 질의를 한후 쿼리 파싱 시간, 테이블 Locking , Send data 등의 상태를 시간별로 알아 볼 수 있습니다.또한 질의별 CPU사용 시간등을 상세히 볼 수 있습니다. EXPLAIN 등과 같이 사용하여 좀더 효율 적이고 , 최적화된 질의를 구현 할 수 있습니다. (MySQL 5.1 대에서 사용 가능합니다.)

MySQL profiling 에서 상세히 알아 볼 수 있는 값은 아래와 같습니다.
Block IO : 데이터 블럭 연산 횟수를 나타냅니다. (Disk 에서 블럭 단위로 얼마큼의 데이터 사용했는지 알 수 있겠죠
Context Switches : 문맥 교환 횟수를 화면에 출력 합니다.
IPC : 프로세스간 메세지를 주고받은 수를 화면에 출력합니다
MEMORY : 프로파일링 된 질의를 처리 할때 사용된 메모리를 출력합니다
PAGE FAULT : MySQL 질의 처리시 필요한 메모리 확보를 위해 메모리 할당 시도 입니다.
SOURCE : 질의를 처리 할떄 이용된 함수 , 또는 처리에 필요한 함수 를 구현한 소스파일의 이름입니다.
SWAPS : 스왑된 횟수를 나태냅니다. (메모리 스왑과는 차이가 있습니다.)

쿼리 진행 상황별로 상태 값을 표시해줍니다. 상태에 따라서 아래 사항들이 안나올 수도 있습니다.
initialization : 쿼리를 실행하기 위해 초기화  진행
Opening Tables : 테이블 열기
System Lock : 시스템 락
Table Lock : 테이블 락
checking permissions : 권한 체크
optimizing : 쿼리 죄적화
statistics : 통계 기록
preparing : 실행 준비
create tmp table : 임시 테이블 생성
executing : 실행
copying to tmp table : 임시테이블에 데이터 복사
sending data : 데이터 전송
sorting result : 데이터 정렬
removing tmp table : 사용된 임시 테이블 삭제
init :초기화
end : 종료
query end : 쿼리 종료
freeing items : 사용된 자원 반환
closing table : 테이블 닫기
logging slow query : Slow query 기록

위에 열거한 쿼리 상태 값들의 유무가 쿼리의 성능을 나타내는 척도는 아님을 말씀 드립니다. 단, 위 상태 값들을 실행 시간 및 점유율등을 파악해서 쿼리를 최적화 할 수 있는 것입니다. 그리고 쿼리 진행에 있어서 어떤 단계가 가장 많은 자원을 소비하는지 알아볼 수 있는 용도로 이용 할 수 있는 것입니다.

MySQL Query Profiling 을 사용하기 위해서는 profiling 옵션을 켜주어야 사용 가능합니다. 현재 세션에서 켜는 방법은 SET PROFILING = 1 을 사용하여 켤 수 있습니다. 이 옵션은 현재 연결된 MySQL 세션에서만 적용이 됩니다. 실제 서비스 되는 쿼리를 직접 수행 상태를 파악해 볼때 매우 유용합니다.

쿼리 프로파일링을 수행하면 실제 수행보다 쿼리 수행상태, 수행시간등의 기록등으로 쿼리 진행 상태가 늦어질수 있기때문에 쿼리 최적화를 위해 분석용도로 사용하시면 됩니다.

SET PROFILING = 1옵션을 수행 한 이후 에는 해당 세션에서 일어난 쿼리들의 분석 상태들이 기록이 됩니다. 분석이 진행된 쿼리들의 목록을 조회 하려면 SHOW PROFILES 로 분석이된 쿼리들을 볼 수 있습니다.
mysql > SHOW PROFILES;
+----------+------------+--------------------------------------------------+
| Query_ID | Duration   | Query                                            |
+----------+------------+--------------------------------------------------+
|        1 | 0.00059400 | insert into tTable values (default, '안녕하세요')|
+----------+------------+--------------------------------------------------+
1 rows in set (0.00 sec)

프로파일링의 최대 기록수는 SET PROFILING_HISTORY_SIZE=[NN] 으로 설정 할 수 있습니다. 결과는 Query ID 와 수행 시간 , 그리고 수행된 Query 를 보여주도록 되어 있습니다.
mysql> show profile cpu for query 1;
+------------------------------+----------+----------+------------+
| Status                       | Duration | CPU_user | CPU_system |
+------------------------------+----------+----------+------------+
| starting                     | 0.000101 | 0.000000 |   0.000000 |
| checking permissions         | 0.000023 | 0.000000 |   0.000000 |
| Opening tables               | 0.000046 | 0.000000 |   0.000000 |
| System lock                  | 0.000020 | 0.000000 |   0.000000 |
| init                         | 0.000021 | 0.000000 |   0.000000 |
| update                       | 0.000141 | 0.000000 |   0.000000 |
| Waiting for query cache lock | 0.000011 | 0.000000 |   0.000000 |
| update                       | 0.000011 | 0.000000 |   0.000000 |
| end                          | 0.000010 | 0.000000 |   0.000000 |
| query end                    | 0.000014 | 0.000000 |   0.000000 |
| closing tables               | 0.000117 | 0.000000 |   0.000000 |
| freeing items                | 0.000056 | 0.000000 |   0.000000 |
| logging slow query           | 0.000010 | 0.000000 |   0.000000 |
| cleaning up                  | 0.000013 | 0.000000 |   0.000000 |
+------------------------------+----------+----------+------------+
14 rows in set (0.00 sec)

SHOW PROFILE [ALL|BLOCK IO|CONTEXT SWITCHES|IPC|MEMORY|PAGE FAULT|SOURCE|SWAPS] [Query for [Query ID]] 형식으로 호출 할 수 있습니다. Query profiling 의 수행 상태는 information_schema 의 profiling 테이블에서도 해당 기록을 조회 할 수 있습니다. 일반적인 SELECT 구문으로 조회 할 수 있습니다.

쿼리 프로파일링으로 여러 가지 형태의 분석을 할 수 있으며 , 쿼리 처리 시에 가장 대기가 긴 항목을 알아 볼 수 있습니다.

대현이 50일 사진 촬영~

2011/04/04 08:39

대현이 50일 사진 촬영~

2월 10일 태어난 대현이가 드디어 50일이 되었습니다.
스듀디오 가서 50일 기념 촬영을 하고 왔습니다 .
오랜만에 가족 나드리를 하고 왔네요 ^^

가족 사진

온가족(?) 사진 입니다.
오랜만에 나드리라 어색 하기도 하고, 애 돌보느라 지친 아내의 얼굴이 안스럽네요

첫째 수진이가 얼마나 낮을 가리고 울던지.. 겨우 겨우 한컷 건졌네요 ㅋㅋㅋ
대현이 50일 사진

의외로 사진 촬영때 도움을 만이준 대현이가 고맙네요
대현이 50일 사진

딸내미 처럼 나왔네요 ㅋㅋㅋ

50일 사진을 무사히 마치고 ~ 돌아오는 5월 5일(수진이 생일날)에는 수목원에 놀러가서 한컷 찍어봐야 겠습니다. ^^

MySQL SELECT 연산 오류 (BIGINT UNSIGNED value is out of range) 해결

SELECT 절 이후 산술 연산자의 리턴 값은 데이터 형에 따라 종속되지 않고 큰 값을 해결하기 위해 BIGINT 형으로 출력이 됩니다. 하지만. 데이터 타입의 부호 (SIGNED/UNSIGNED) 의 경우에는 종속이 됩니다. 예를 들어 SMALLINT 형의 필드와 INT 형의 연산의 경우 리턴형은 BIGINT 형입니다. 하지만 부호의 경우에는 필드 형에 종속 적입니다. 따라서 형이 틀리거나 음수 연산이 동반이 될 경우에는 아래와 같은 연산 오류가 일어나게 되어 있습니다.

ERROR 1690 (22003) BIGINT UNSIGNED value is out of range

위 같은 오류는 데이터 형이 정해지지 않거나 UNSIGNED 형인 필드에서 연산시 음수를 동반한 연산이 이루어 질 경우 BIGINT UNSIGNED 범위에 벗어난다는 소리 입니다. 해결 방법은 연산 대상에 CAST, CONVERT 로 형을 변환을 해줍니다. 예를 들어 보겠습니다.

mysql> desc test;
+-----------------+-----------------------+------+-----+
| Field           | Type                  | Null | Key |
+-----------------+-----------------------+------+-----+
| nSeq            | int(10) unsigned      | NO   | PRI |
| nAmount         | mediumint(8) unsigned | NO   |     |
+-----------------+-----------------------+------+-----+

위와 같은 테이블이 존재 한다고 했을때 첫번째 ROW 의 값은 아래와 같이 들어 있습니다.
mysql> SELECT * FROM test;
+------+----------+
| nSeq | nAmount  |
+------+----------+
|    1 |     1000 |
+------+----------+
1 row in set (0.00 sec)

위 결과를 아래 처럼 질의를 했을 경우 연산 오류가 발생합니다. 범위를 벗어 났다는 것이죠 unsigned 형의 데이터에 음수를 넣을 수 없다는 것입니다.
mysql> SELECT (nAmount * 1) FROM test;
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(nAmount * 1)'

MySQL 의 산술 연산시에 테이블 데이터 타입의 부호에 따라 리턴 형의 부호가 결정됨으로 음수 연산이 필요할 경우 아래와 같이 해결 해주면 됩니다.
mysql> -- SELECT CAST(nAmount * 1 AS SIGNED) FROM test;
mysql> SELECT CONVERT(nAmount * 1, SIGNED) FROM test;
+-------------------------------+
| CONVERT(nAmount, SIGNED) * -1 |
+-------------------------------+
|                         -1000 |
+-------------------------------+
1 row in set (0.00 sec)

중요한 것은 MySQL 의 수치형 데이터 타입의 결과 타입은 BIGINT 형이며 부호 (SIGNED/UNSIGNED)는 해당 필드의 부호를 따라갑니다.

Windows Update Backup 삭제

2011/03/25 13:04

Windows 7 Update Backup 삭제

SSD를 사용할때 부족한 용량으로 공간을 확보하기 위해 Windows Update(hotfix) 백업(설치)를 삭제 할 수 있습니다. 단 삭제를 할경우 Windows 업데이트를 제거 할 수 없거나 시스템 복원등에서 문제가 생길 수 있습니다.

%WINDIR%\SoftwareDistribution\Download\ 에 Windows Update(Hotfix)관련 설치 파일이 존재 합니다. Windows Update 를 주기적으로 수행했다면 상당한 용량을 차지 하고 있을 것입니다.
%WINDIR%\SoftwareDistribution\Download

%WINDIR%\SoftwareDistribution\Download


위 처럼 약 700MB의 공간을 사용하고 있습니다. 용량 확보가 필요하다면 삭제를 해도 Windows사용에 문제가 없습니다. 단 업데이트 복원/제거 등의 기능에 문제가 생길 수 있으니 이점 참고하시고 삭제하세요 .

서비스팩 백업 파일과 함께 삭제 하시면 약 2GB정도의 공간을 확보 할 수 있습니다.
Windows 7 Service Pack 백업 삭제 를 참고하세요

MySQL 5.5.x 설치 [cmake]

2011/03/17 12:39

MySQL 5.5.x 설치 [cmake]

MySQL 5.5 가 새롭게 릴리즈 되었습니다. 전체적인 성능 및 기능향상이 이루어진 버전입니다.많은 기능을 습득하고 테스트 하기 위해서 이번에 새롭게 설치를 해보았습니다.

전체적으로 가장 많이 변경된 점은 InnoDB가 기본 엔진으로 사용되는것입니다. 이전보다 향상된 InnoDB로 구성되어 있습니다.
 - InnoDB 기본 스토리지 엔진으로 선택
 - 반동기 리플리케이션이 됩니다. 슬래이브는 Master서버가 commit 이 될때 비로서 동기화가 됩니다.
 - Multi core 성능이 향상되었습니다. (자세항 성능에 대해서는 좀더 사용해본 후에 올려보도록 하겠습니다.)
 - configure 를 버리고 cmake 로 변경이 되었습니다.(크로스플랫폼을 더욱 잘 지원하기 위해서 변경이 된것 같습니다.)

기존에 있던 MySQL 5.1.x 에서 사용되던 데이터베이스 파일 (덤프파일이 아닙니다.)를 그대로 사용할 수 없습니다. MySQL DB와 information_schema DB가 변경되었고 , performance_schema DB가 생겻으므로 각 DB별로 백업을 하시면 됩니다 ^^

configure : 컴파일 환경 설정
가장 생소하게 변경된 부분입니다. 그동안 configure 를 통해 컴파일을 했던것을 cmake 로 설치를 해야합니다. cmake는 크로스 플랫폼을 지원하기 위해 새롭게 되입된 컴파일 환경 설정 툴(?)입니다. Makefile을 만들기 위해 각종 설정을 cmake를 통해 설정하게 됩니다.
- 전체 옵션 보기 : cmake . -LH
1. Cmake [http://www.cmake.org/] 를 설치 합니다. 설치 방법은 추후 다루도록 하겠습니다.
2. 컴파일 환경설정 [cmake] Makefile 생성 (기존 : configure)
컴파일 환경 설정 부분이 많이 변했습니다. 옵션 사항은 MySQL Documantion 에서 제공하고 있습니다. 기존 configure 에서 이용되던 옵션이 앞에 -D로 시작하는 옵션으로 변경되어 있습니다.

MySQL Source Configuration Options
(http://dev.mysql.com/doc/mysql-sourcebuild-excerpt/5.5/en/source-configuration-options.html#cmake-compiler-flags)

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql_5.5.10 -DWITH_EXTRA_CHARSETS=all -DMYSQL_DATADIR=/data -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DSYSCONFDIR=/etc -DEFAULT_CHARSET=utf8 -DWITH_EXTRA_CHARSETS=all -DMYSQL_TCP_PORT=3306

위 방법으로 기본적으로 설정 할 수 있습니다. 데이터 디렉토리는 /data 에 설정하고 /tmp/mysql.sock를 unix domain socket으로 사용한다는 옵션입니다.

그외 컴파일 방법은 make;make install 과 동일합니다.

또한 mysql_install_db 스크립트는 기존 bin 디렉토리가 아닌 scripts 디렉토리로 이동이 되었습니다. 참고하세요 ^^

득남했습니다. ^^

2011/02/16 22:29

득남했습니다.

2011년 02월 10일 오후 01시 16분 기다리고 기다리던 둘째 대현이(태명:순둥이)가 태어났습니다. 3.48Kg의 몸무게로 건강하게 태어났습니다. ^^
대현이

둘째 대현이


축하해주신 많은 분들께 감사드립니다. ^^

첫째 딸과 둘째 아들 ㅋㅋ 200점이라는데 너무 좋네요 ^^

제 딸과 아들이 친하고 서로 의지하면서 잘 지냈으면 하네요 ^^
수진이

첫째 수진이


몇 일 지내본 결과 딸내미가 시샘이 많아졌네요

모든것을 자기꺼라고 뺏어 가는.. 모습.. 안스럽기도 하고 약간의 미운털(?)도 박혀 가네요 ㅋㅋㅋ

미운 세살이라고 하던데.. 이런걸 미운거라고 하나요?

상호 검색 후 무료 통화 방법

2011/01/27 09:09

상호 검색 후 무료 통화 방법

원하는 상호를 네이버를 통해 검색을 합니다. 검색 결과로 나온 업체 중 원하는 업체 전화 번호 옆에 무료 버튼을 누릅니다. 누른 후에 받는 사람 전화번호를 입력하면 업체측에서 걸려온 전화로 전화가 옵니다. 동일하게 신호음이 들린 후 상대방이 받으면 통화를 하면 됩니다.

가끔 ARS를 통해 키를 입력하는 부분에서 입력이 안될 수 있습니다.
상호 검색
예를 들어 삼성전자 서비스 센터를 검색 해 보겠습니다. 지도와 함께 검색된 결과 와 업체 전화번호가 나옵니다. 해당 전화 번호 옆에 무료 통화 버튼이 있습니다.
받는 사람 전화번호 입력
무료 통화버튼을 누르면 전화번호를 입력 할 수 있는 새창이 뜹니다. 새창에 받는 사람 전화번호를 입력 한 후 확인 버튼을 누르면 전화를 받을 수 있습니다.
연결 완료
전화가 걸려온 후에는 창을 닫아도 상관없습니다.

가장 중요한것은 15xx, 16xx 처럼 대표번호 서비스등은 무료통화가 불가능 합니다. 일반 전화번호로 이루어진 업체만 가능합니다. 스마트 폰일 경우 일반 웹페이지 (PC화면 보기) 를 이용하시면 될것 같습니다.

Windows 7 서비스 팩 1 설치 후 백업 제거

Windows 7 서비스팩 1을 설치 하면 서비스팩 설치 이전 상태로 돌아가기 위한 시스템 파일 과 변경전의 레지스트리 등을 시스템 파일을 백업해두고 있습니다. 또한 서비스팩 의 설치 프로그램 등으로 약 1~1.5GB 정도의 용량을 차지하게 됩니다.

노트북이나 SSD를 사용하는 시스템에서 불가피 하게 늘어난 용량으로 사용을 할 수 없게 됩니다. 물론 설치 시에 서비스팩과 통합이 된 설치 본으로 설치를 했을 경우에는 문제가 없으나 추가로 설치 했을 경우에는 용량이 부담이 됩니다.

이 처럼 서비스팩 1 설치 후 백업으로 인해 용량이 부족할 경우 제거를 할 수 있습니다.

Windows 에 포함되어 있는 관리 도구중 "배포 이미지 서비스 및 관리 도구" 가 있습니다. 관리자 권한으로 실행 하는 도구 입니다.
* 주의 서비스팩 1 정식 버전이 아닌 경우 절대 제거 하지 마세요. 이 작업 후에는 서비스팩 설치 이전 상태로 돌릴 수 없습니다.

명령프롬프트 - 관리자 권한

관리자 권한으로 명령 프롬포트 실행

관리자 모드로 명령 프롬프트를 실행 시킵니다.
사용자 삽입 이미지
명령 프롬프트가 실행된 후에 dism /Online /Cleanup-image /spsuperseded 를 실행 시켜줍니다.  Windows 에서 자동으로 생성된 백업파일을 제거 할 수 있습니다.