아파치 apache vhosts.conf
내용을 보시려면 비밀번호를 입력하세요.
Objective C 주민등록번호 체크 로직
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
char *jumin1 = (char *)malloc(14);
printf("주민등록번호를 입력하세요 : ");
scanf("%s", jumin1);
NSString *str = [NSString stringWithUTF8String:jumin1];
if ([str length] <13){
NSLog(@"자리수가 틀립니다");
return false;
}
NSArray *arrayLogic = [NSArray arrayWithObjects:@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"2",@"3",@"4",@"5",nil];
int allSumSsn2;
for(int i=0 ; i< [arrayLogic count]; i++){
allSumSsn2 += [[str substringWithRange:NSMakeRange(i, 1)] intValue] * [[arrayLogic objectAtIndex:i] intValue] ;
}
int nanum = (11-(allSumSsn2 % 11) ) % 10;
if (nanum == [[str substringWithRange:NSMakeRange(12, 1)] intValue]){
NSLog(@"맞는 주민번호 !");
}else{
NSLog(@"틀린 주민번호 !");
}
free(jumin1);
[str release];
[arrayLogic release];
[pool drain];
return 0;
}
- 이 글의 트랙백 주소
- http://www.basaaja.com/trackback/618
- 댓글 남기기
Objective C 문자열 컨트롤
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *str1 = @"This is string A";
NSString *str2 = @"This is string B";
NSLog(@"%@",str1);
//문자열의 갯수
NSLog(@"%lu",[str1 length]);
//대소문자 변경
NSString *result;
result = [str1 uppercaseString]; //소문자
NSLog(@"%@",result);
result = [str1 lowercaseString]; //대문자
NSLog(@"%@",result);
//두문자열이 같은지 비교
if([str1 isEqualToString: str2] == YES){
NSLog(@"두문자열은 같다");
}else{
NSLog(@"두문자열은 같지 않다");
}
//문자열 결합
result = [str1 stringByAppendingString: str2] ;
NSLog(@"%@",result);
//처음부터 3개의 문자만 추출하고 싶다
result = [str1 substringToIndex:3];
NSLog(@"%@",result);
// 5자리부터 끝까지 문자열 추출
result = [str1 substringFromIndex:5];
NSLog(@"%@",result);
// 8~13번 문자까지만 분리
result = [[str1 substringFromIndex:8] substringToIndex:6];
NSLog(@"%@",result);
result = [str1 substringWithRange: NSMakeRange(8,6)];
NSLog(@"%@",result);
//문자열 안에서 문자열 찾기 : 길이, 위치가 객체로 리턴
NSRange subRange = [str1 rangeOfString: @"strindg"];
if(subRange.location == NSNotFound){
NSLog(@"String Not Found");
}else{
NSLog(@"index : %lu, length: %lu",subRange.location, subRange.length);
}
//문자열 첫 글자의 대소문자를 확인하여 변환하기
NSString *convertString = @"aBC";
NSString *convertStringFirst = [convertString substringToIndex:1]; //첫번째 글자
NSString *convertStringUpper = [convertStringFirst uppercaseString];//강제로 대문자로 변환
if ([convertStringFirst isEqualToString:convertStringUpper]){
NSLog(@"%@ lowercase = %@", convertString,[convertStringFirst lowercaseString]);
}else{
NSLog(@"%@ uppercase = %@", convertString,[convertStringFirst uppercaseString]);
}
[pool drain];
return 0;
}
- 이 글의 트랙백 주소
- http://www.basaaja.com/trackback/617
- 댓글 남기기
아이폰에 네이버, 다음을 기본 검색으로 해달라고 ?
아이폰에 네이버를 집어 넣어라
http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=105&oid=112&aid=0002083460우리나라의 대표 포털들이 공정 거래 위반이라며 아이폰에 자사의 검색엔진을 추가 할 수 있도록 요청 한것이다.
NHN의 관계자는 아이폰에 구글이 기본 검색엔진으로 탑재 되어 있고 국내 검색엔진은 배제되어 있어서 명백한 불공정 거래이다 라고 주장 하고 있었다.
한국의 특수성 문제로 인하여 네이버나 다음을 기본 검색엔진으로 넣어 달라는 말이 되는 말인가? 모든 웹의 생태계를 자신들의 포탈안에 한정짓게 하여 자라나는 대한민국 인터넷의 싹을 잘라 버린 대표 포탈 다운 발상이다. 초기 검색엔진에서는 결과를 보여주고 바로 해당 사이트에 연결 시켜 주는 기능에 충실 하였다. 그리하여 여러 아이템들의 다양한 웹사이트들이 인터넷에서 공존 하여 발전 하던 모습을 지켜 볼 수 있었다. 하지만 지금의 모습은 어떠 한가? 초기의 검색엔진으로 출발한 업체들이 자신들이 사용자들이 다른 사이트를 찾기 위하여 들리는 게이트임을 이용하여 온갖 광고와 찾고자 하는 내용과는 상관 없는 자사 서비스를 먼저 보여주고 있는것이 현실이다.
또한 인터넷에서 새로운 아이템이 나와서 시장이 생기면 해당 사업을 벤치마킹 하여 자사의 서비스나 CP로 만들어 버려 중소 업체가 더 이상 사업을 운영 할 수 없거나 대기업의 CP 역할만 하게 만들어 버렸다. 그리하여 한국의 인터넷은 대형 포탈안에서 생태계가 돌아가게 되었고 사용자들 또한 그것이 당연한듯이 인식하게 되어 버렸다.
이제는 스마트폰에서도 똑같이 장사를 하시겠다는건가 ? 애플이나 구글의 스마트폰에서도 자사의 검색엔진을 선택 할 수 없다면 불공정 거래라고 주장 하고 있다. 과거 MS의 인터넷 익스플로러가 기본 브라우져로 지정 되어서 독점 판결을 받은 것을 생각해서 외쳐 보는 거란 생각이 강하게 든다. 당시는 일반 사용자들의 Windows OS 점유율이 90%를 넘는 상황이었다는것은 생각을 못하셨나? 지금 전체 휴대폰 시장의 90%를 애플이나 구글이 점유 하고 있나 ? 그들은 자체의 하드웨어로 전체 시장의 10%에도 미치지 못하는 점유율을 보이고 있다. 단지 요새 스마트폰의 인기로 인하여 많은 점유율을 차지 하고 있는것이지 독점에 해당 될 만큼 인기를 차지 하는것은 아니다.
삼성이 휴대폰을 만들때 동일 모델을 가지고서 국내용 스펙 다운 버젼과 해외용 버젼을 따로 만든다. 해외용은 대부분 자신의 입맞에 맞게 최고의 성능을 자랑 하는 휴대폰으로, 국내용은 통신사의 입맞에 맞게 기능들을 이리 저리 빼버려서 만든다. 국내 통신사의 요구를 어쩔 수 없이 수용해야 하는 문제 때문이다. 그때 소모되는 기획, 개발 비용만 해도 어마 어마 할거라 생각된다.
스마트폰에서도 대한민국 인터넷의 갈라파고스화는 막아야 한다. 구글이 기본 검색엔진으로 되어 있는것은 검색 조건에 충실한 결과물을 보여주는 세계인이 사랑하는 검색엔진이여서다. 네이버, 다음이 스마트폰의 기본 검색엔진이 되고 싶다면 그들의 서비스를 구글처럼 바꿔 보는것은 어떨까? 대기업이나 대형 포털이 하드웨어 업체에 강압적 지위를 내새워 입맞에 맞는걸 요구만 한다면 대한민국에서 애플 같은 회사나 스티브 잡스 같은 사람은 나올 수 없을 것이다.
세계적 검색엔진이 되기 힘들면 삼성에 졸라서 네이버 폰, 다음 폰을 만들던가 ~~
- 이 글의 트랙백 주소
- http://www.basaaja.com/trackback/616
- 댓글 남기기
\Device\Harddisk1 가 의미 하는 물리적 하드 디스크 찾기 Event ID 7

이벤트 아이디 : 7
원본 : Disk
찾기는 힘들다. ( 물론 하드 디스크가 하나라면 답은 매우 쉽다. )
구글링을 통해 확인 하니 MS에서는 레지스트리를 검색하여 찾는 방법을 추천 하였지만 어쩐지 번거롭다.
[컴퓨터 관리] -> [저장소] -> [디스크 관리]
각각의 디스크를 우클릭하여 속성을 클릭하자.[하드웨어] 탭을 선택하면 아래의 그림을 볼 수 있다

이부분에서 Target ID 숫자 부분이 Hardisk숫자와 같으면 우리가 찾고자 하는 물리적 하드 디스크인것이다.
- 이 글의 트랙백 주소
- http://www.basaaja.com/trackback/612
- 댓글 남기기
애플 매직 마우스 셋팅법
이때 시스템 환경 설정 -> 마우스의 패널 화면은 다음처럼 보인다.

해결 방법은 간단하다.
http://support.apple.com/kb/DL950?locale=ko_KR&viewlocale=ko_KR
위의 링크로 들어가서 Wireless 마우스 소프트웨어 업데이트 1.0을 설치 하면 해결 된다.
- 이 글의 트랙백 주소
- http://www.basaaja.com/trackback/603
- 댓글 남기기
리눅스 ss 명령어
거의 졸다가 친 단어인데 명령이 실행 되는걸 보곤 깜짝 놀랐다.
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 ::ffff:111.10.60.40:ssh ::ffff:111.33.54.170:52646
ESTAB 0 0 ::ffff:111.10.60.40:http ::ffff:111.33.54.170:53728
ESTAB 0 0 ::ffff:111.10.60.40:http ::ffff:111.33.54.170:53723
ESTAB 0 0 ::ffff:111.10.60.40:http ::ffff:111.33.54.170:53727
ESTAB 0 0 ::ffff:111.10.60.40:http ::ffff:111.33.54.170:53726
ESTAB 0 0 ::ffff:111.10.60.40:http ::ffff:111.33.54.170:53725
ESTAB 0 0 ::ffff:111.10.60.40:http ::ffff:111.33.54.170:53724
지금 연결된 TCP 의 상태를 보여주는 명령어이다. Netstat 의 심플 버젼으로 보이니
실무에서 유용하게 사용이 될듯하다.
확인 할 수 있는 정보는 다음과 같다
- All TCP sockets.
- All UDP sockets.
- All established ssh / ftp / http / https connections.
- All local processes connected to X server.
- All the tcp sockets in state FIN-WAIT-1 and much more.
출처 : http://www.cyberciti.biz/tips/tag/ss-command
- 이 글의 트랙백 주소
- http://www.basaaja.com/trackback/610
- 댓글 남기기
맥북 프로 하드 교체 방법 및 스노우 레오파드 복원
교체 하는 작업을 진행 하였다. 작업의 핵심은 기존에 사용 하던 환경 그대로 복구를 하는것이었다. 그래서
다른 외장 하드에다가 타임머신을 이용하여 백업을 진행 하였다. 스노우 레오파드 DVD로 부팅 후 복구 하기를
통하여 복구를 진행 했더니 약 1시간 후 하드 교체 전과 동일한 화면을 만날 수 있었다 !!
OSX 의 복원 능력이란.. 실로 감탄이 절로 나왔다 ㅎㅎ
순서를 정리 하자 !
1. 준비물 확인
( 교체할 HDD, 타임머신 백업용 외장 HDD, 스노우 레오파드 DVD, T7 사이즈 별 드라이버, #00 십자 드라이버, 작은 일자 드라이버 )
2. 노트북의 전원을 켜고 타임머신을 통하여 외장 HDD에 모든 내용을 백업 받는다.
3. 컴퓨터를 종료 하고 노트북을 뒤집어서 본격적인 교체 작업을 진행 한다.

4. 십자 드라이버를 이용하여 나사를 분리 한다. 요때 핵심은 각각의 나사 사이즈가 다르기 때문에 뽑은 모양대로 보관을 해야 한다는것 ! 아래는 나사 분리 후 맥북

5. 뚜껑을 열어 살펴 보면 왼쪽 하단에 하드 디스크가 보인다. (나는 이미 변경 했음으로 삼성 HDD가 장착 되어 있었다.)

6. 하드 디스크를 지지 하는곳 상단을 보면 나사가 양쪽에 2개 있는걸 확인 할 수 있다. 요걸 살살 돌려서 푼다. 주의 할 것은 하단의 2개는 풀 필요가 없다는것이다.

7. 상단의 나사 2개를 풀면 하드 디스크를 지지 하던 것을 제거 할 수 있다. 이때 하드 디스크를 빼기 조금 힘이 듬으로 일자 드라이버를 이용하여 상단 오른쪽을 살짝 들어주면 좋다. 단 중요한것은 하드 디스크에 연결된 케이블이
매우 얆기 때문에 아주 살짝 (대략 1-2cm ) 만 들어서 왼쪽 상단의 케이블을 우선 제거 해야 한다는 것 ! 무턱대고
들었다간 케이블이 끊어지는 난감한 사태가 벌어질지도 모른다.

8. 하드 디스크 제거 후 기존에 연결되었던 케이블을 확인 할 수 있다. 매우 얇다. 조심 조심

9. 기존의 하드에는 그림과 같이 옆면에 돌출형 나사가 박혀 있다. 이걸 별 모양 드라이버를 이용하여 제거 후
새로운 하드 디스크에 옮긴다.

10. 하드 디스크까지 제거 한 상태에는 아래와 같은 부속품들을 확인 할 수 있을것이다.

11. 조립은 분해를 반대로 한 순서와 같다. 우선 새로운 하드 디스크에 케이블을 연결하고 조심 스럽게 올려
놓으면 아래의 그림과 같이 된다. 상단 지지대를 장착하고 덥개를 까지 씌우면 조립은 끝 !

12. 스노우 레오파드 DVD를 넣고 부팅을 시작 하면 한참 뒤에 OSX 화면이 뜨면서 복원 할거냐고 물어본다.
이때부터는 화면의 순서대로 타임머신 백업이 된 HDD를 USB 포트에 꼽고 타임머신을 통한 복원을 진행 하면
된다. ( 나는 약 1시간 정도 걸렸다. 처음엔 복구 예상 시간에 6시간 이라고 나와서 깜짝 놀라긴 했다.) 엄청난
CD-ROM 굉음을 듣고 있다보니 어느새 완료. 리부팅후 그 전과 동일한 스노우 레오파드 화면 구성을
볼 수 있었다.
처음엔 하드 디스크 교체 및 복원 방법을 전혀 몰라서 살짝 두려운 마음도 있었는데 막상 순서대로 진행을 해보니
매우 매우 쉬었다. 집에서 남는 하드 가지고 계신 분은 한번 도전 하시길 !
MAC,
osx,
스노우레오파드,
타임머신 백업,
하드교체
- 이 글의 트랙백 주소
- http://www.basaaja.com/trackback/609
- 댓글 남기기
MS SQL 전체 백업, 차등 백업, 트랜잭션 백업 에서의 데이터베이스의 복원.
1.데이터베이스 백업
1.1 백업 종류
데이터베이스 백업의 종류는 다음과 같다.
전체 백업, 증분 백업, 차등 백업, 트랜잭션 백업
전체 백업 : 데이터베이스의 모든 데이터를 백업 하는 것을 의미 한다.
증분 백업 : 전체 백업후 증가한 데이터만 백업하며 다음 증분 백업시에는 마지막 증분 백업 데이터를 기준으로 증가한 데이터만 백업 한다. 그럼으로 매번 증분 백업 후의 늘어난 데이터베이스만 백업 함으로 백업 파일의 크기는 작지만 전체 백업 후 여러개의 증분 백업이 생성 됨으로 해당 되는 증분 백업을 모두 포함하여 복구 해야 함으로 번거롭고 복구에 시간이 걸리는 단점이 존재 한다.
차등 백업 : 전체 백업후 증가한 데이터만 백업하지만 차등 백업의 기준이 무조건 전체 백업 이후 임으로
백업되는 파일의 양은 많지만 복구시 전체 백업과 마지막 차등 백업 파일만을 가지고 복구 하게되어 시간이 단축된다.
트랜잭션 백업 : 지정된 시간에 지정된 크기의 트랜잭션 백업을 진행 할 경우 지정 시간안에 늘어난 데이터만큼만 백업 하고 지정된 크기로 LDF 파일을 재조정 하여 데이터베이스가 필요 이상으로 페이징을 하여 I/O가 증가 하는 것을 방지 할 수 있습니다.
1.2 적용된 백업
이 문서에 적용된 적용된 백업은 다음과 같다.
전체 백업, 차등 백업, 트랜잭션 백업
1.3 적용된 백업 스케쥴
전체 백업 : 로컬 매일 04시 , 원격 04:30분
차등 백업 : 매시 00분, 원격 매시 10분
트랜잭션 백업 : 매 10분 마다, 백업 후 200MB로 재조정
복원 가능 시점
*로컬 백업 : 장애 발생전 최대 10분의 데이터베이스
2.데이터베이스 복원
2.1 복원 준비 단계
1. 전체 백업 : 04시 생성 (파일명 ex : 데이터베이스1_backup_201002080400.bak ) 2. 차등 백업 : 10시 생성 (파일명 ex : 데이터베이스1 1_backup_201002081000.bak ) 3. 트랜잭션 백업 : 10시 10분, 10시 20분 생성 (파일명 ex : 데이터베이스1 1backup_20100208101000.trn , 데이터베이스1 1backup_20100208102000.trn )
2.2 복원 순서 및 방식
1. 모든 네트워크 연결을 차단한다. 콘솔 작업시 네트워크의 활성화되어 있는 네트워크를 중지 시키는 것만으로도 되며 원격 작업시 1433번 포트에 타 네트워크에서 접근을 하지 못하게 설정 한다.
2.윈도우 계정으로 로컬의 SQLServer에 접근 한다.
3.데이터베이스 (오른쪽 마우스 클릭) -> 데이터베이스 복원을 클릭 한다.


4.전체 백업을 복원 하기 위해 복원에 사용할 원본 -> 장치를 선택 후 우측의 “...” 을 클릭하여 백업 지정 창을 띄운 후 백업 미디어 : 파일 체크 하고 추가를 클릭 하여 전체 백업 파일을 선택한다.

5.복원에 사용할 원본 에서 목록에 있는 데이터베이스를 체크 한다.

6.상단의 복원 대상의 데이터베이스를 선택한다. ( 조금전에 선택한 데이터베이스 명이 새로 생겼을 것이다.)

7.전체 복원만 진행 하려면 여기서 바로 확인을 클릭 하면 바로 복원 작업이 진행 된다. 하지만 우린 차등 백업도 복원 할것임으로 왼쪽 페이지 선택 메뉴의 옵션을 선택한다.
8.복원 옵션에서 데이터베이스 파일을 다음으로 복원 에서 복원될 장소를 지정 할 수도 있다.

9.복구 상태에서 “데이터베이스를 비작동 상태로 유지하고 커밋되지 않은 트랜잭션을 롤백하지 않습니다. 추가 트랜잭션 로그를 복원 할 수 있습니다” 를 선택후 확인을 클릭하면 전체 복구를 진행 한다.

10. 전체 복구를 완료 하였다. 여기까지가 오전 04시까지의 복원이 완료된것이다.

11. 정상적으로 전체 백업이 복원 되면 다음과 같은 화면을 볼 수 있다. ( 전체백업만 진행한 것이라면 아래 화면과는 다르게 정상으로 보이지만 차등 백업을 진행 한다면 다음의 화면과 같이 복원 중... 으로 떠야 정상이다.

12. 차등 백업을 복원 한다. 복원할 파일만 차등 백업 파일을 선택하며 전체적인 과정은 아래와 같다. 이미지로 설명을 대처 하겠다. 데이터베이스 복원을 선택 한다.

13. 모든 순서는 파일명을 제외한 전체 백업 복원과 동일 하다 . ( * 옵션에서 복원 상태 2번째의 “데이터베이스를 비작동 상태로 유지하고 커밋되지 않은 트랜잭션을 롤백하지 않습니다. 추가 트랜잭션 로그를 복원 할 수 있습니다” 를 선택한다. ) 물론 여기서 다음의 트랜잭션 백업 복구를 진행 하지 않을 것이라면 복원 옵션의 첫번째를 선택후 확인을 클릭하면 복원후 추가 복원을 하지 않게 된다.

14. 차등 백업의 복원을 완료 하였다. 여기까지가 오전 10시 데이터까지 복구가 완료 된것이다.

15. 트랜잭션 백업의 복원을 진행 할 것이다. 작업 -> 복원 -> 트랜잭션 로그를 선택 한다.

16. 복구해야할 트랜잭션 로그가 총 2개인것을 기억 해두고 (10시 10분, 10시 20분의 트랜잭션) 아래의 복원할 트랜잭션 10시 10분에 생성된 것을 선택한다. 또한 아래의 복원 위치를 통하여 복구할 좀더 정확한 시간의 지정도 가능하다. 우리는 트랜잭션을 10분마다 백업했음으로 트랜잭션이 작성된 10분 이내에서만 가능 할 것이다.

17.여기서도 옵션 에서 복구 상태 2번째를 선택해야 추가로 트랜잭션을 복구 할 수 있다. 물론 복구를 종료 하려면 첫번째를 선택한다.

18. 확인을 클릭 한다. 여기까지가 10시 10분의 데이터까지 복원된 상태이다.

19. 10시 20분의 트랜잭션 복원도 위의 (15번 이후) 트랜잭션 복원과 동일하다. 단 복원 파일은 10시 20분의 트랜잭션 로그이며 옵션 의 복구 상태는 첫번째를 선택하여 모든 복원이 종료 됨을 알려야 한다. 확인을 클릭한다.

20. 완료 되었다는 메세지를 볼 수 있다. 이제는 정말로 데이터베이스가 복원 된것이다.

21. 데이터베이스 목록에서 아래의 그림과 같이 기존에는 “복원 중...” 에서 정상적인 데이터베이스명이 표시 되는것을 확인 할 수 있다.

22. 네트워크 단에서 1433port 로 다른 사용자의 정상적인 SQLServer 접속을 허용 한다.
2.3 복원된 데이터의 확인
*최근 사용자 로그인 정보등의 로그 테이블에서 조회를 해보면 알 수 있다. (이건 데이터베이스 마다 다름으로 로그 관련된 테이블을 직접 찾아 보기 바란다.)
- 이 글의 트랙백 주소
- http://www.basaaja.com/trackback/608
- 댓글 남기기


















