최근에 랜섬웨어도 그렇고 웹서핑을 하다보면 드물지만 가끔씩 악성코드를 발견할때가 있다. (물론 내가 아닌  보안 프로그램이 발견하지만)


 특히나 웹으로 프로그램을 내려받거나, 오피스 문서등을 내려받은 경우 악성코드가 포함되어있을 수가 있는데, 이때 다행이 안티바이러스 프로그램에서 악성코드를 미리 잡아주면 안전하다.


그런데, 웹브라우저에서 미리 잡아주면 어떨까? 


이것이 가능한 방법이 있다. 그것도 무료로.


노턴 세이프 서치(Norton Safe Search) 를 설치하면 되는데,  이를 설치 하면 구글검색시 자동으로 검색결과에 노출되는 사이트들이 악성코드를 포함하고 있는지 여부를 바로 알려준다. (검색 결과 체크는 구글검색만 가능하다.)


예를들면 아래처럼 작동한다.  특정 키워드로 아래처럼 구글검색을 했는데, 빨갛게 X 표시가 옆이 보인다.(2015-6-24 18시 검색 시점 결과임)


빨간 X 표시 옆에 Norton 이라고 되어있는데. 이것은 시만텍 노턴에서 자체 보고된 악성코드 결과에 따라 표시해주는 결과 이다. 


이렇게 표시되었는데도 불구 하고 클릭하여 들어가면 한번더 차단된다.


이렇게 들어갔을때 차단시켜주는 기능은 노턴 세이프웹(Norton Safe Web)이 작동해서 이다. 

상세한 위협요소리포트를 살펴보면  Trojan.Gen.2 바이러스가 들어있는 실행파일 경로를 표시하고있다. 


즉 해당 경로에 바이러스로 탐지된 파일이 있다는 뜻이다. 이렇게 특정한 경로에 악성코드가 있는 경우 해당 도메인은 모두 차단된다.


현재시점 실제 해당 사이트에서 악성코드를 차단했을지는 모르겠는데.  삭제등의 조치를 한경우에도 반영에는 시간이 좀 걸리는것 같아 정상화 되었을때에도 뜰 수 있는부분은 있다. 



노턴 세이프 서치는 크롬확장으로 바로 설치가능하기도 하지만 노턴 세이프 서치는 별도의 프로그램을 다운받아 설치해야 한다. 본래 인터넷시큐리티 같은 유료 프로그램에서만 지원되는 기능이나.  노턴 아이덴티티 세이프를 설치하면 무료로 이용할 수 있다.


노턴아이덴티티 다운로드 바로가기 



노턴 아이덴티티는 본래 암호관리 프로그램이다. 

무료로 제공된지는 꽤 되었으며, 해당 프로그램패키지 않에 노턴 세이프서치/노턴 세이프 웹을 포함하고 있다.



노턴아이덴티티 설치를 할때 노턴계정을 생성해야 한다. 계정생성및 볼트암호(암호해제용)도 생성해주어야한다.

(노턴아이덴티티 암호관리 기능에 대해 알고 싶으면 http://funnylog.kr/515  참고.)



설치가 끝나고 나면 자동적으로 크롬확장 프로그램이 설치되는데 크롬 우측상단에 확장프로그램 확인 표시가 뜨면 


Norton Security Toolbar 확장프로그램 사용을 묻는다.


이때 확장프로그램 사용을 허용해주면 이때 부터 크롬웹서핑은 모니터링 되기 시작한다.


그리고 나면 악성코드가 있는 사이트를 검색하거나 방문시 자동 차단 된다.


  MS 에서 윈도우7, 윈도우8,윈도우8.1 사용자들을 대상으로 윈도우 10(Windows 10)으로 무료 업그레이드를 진행하고 있습니다.


예약은 6월1일부터 시작하여 7월29일 정식 발표까지 진행될것으로 보이고, 7월 29일부터 실제 설치가 가능할 예정입니다.


미리 윈도우10 무료 업그레이드  예약을 해둘 경우 백그라운드로 자동 다운로드를 해두어 긴 시간 다운로드를 위해 기다릴필요없이 해당 일자가 되면 바로 설치가 가능합니다.



이글에서는 윈도우업그레이드 예약방법, 예약이 안될경우 조치, 예약 취소방법을 같이 정리 해보겠습니다.





업그레이드 예약을 위해서는 작업표시줄에 윈도우10 아이콘이 보여야 합니다.


해당 아이콘이 나타나있는지 확인하세요.  만일 해당 아이콘이 보인다면 설치 아이콘을 클릭한뒤 예약을 진행합니다.



예약 아이콘 확인



만일 위 예약 아이콘이 보이지 않는다면 아래 사항을 확인해주세요.


아이콘이 보인 다면 해당아이콘 클릭 후 [3. 업데이트 예약 진행하기]번으로 넘어가세요.


1. 윈도우7,8 의 무료업그레이드 예약은 엔터프라이즈(기업용)버전에서는 지원되지 않습니다.(홈,프로,얼티밋 가능)


2. 최신 윈도우 업데이트 적용이 되어있는지 확인하세요.

특히 아래 업데이트가 반영 되어있어야 합니다.

For Windows 7 SP1:

KB3035583

KB2952664

For Windows 8.1 Update:

KB3035583

KB2976978


위 업데이트 적용여부 확인방법 


   프로그램 및 기능 에서 설치된 업데이트 보기로 확인합니다.




이때 뜬 화면에  *KB3035583*  처럼 해당 업데이트 번호 앞뒤에 * 를 붙여 입력합니다.




해당 업데이트가 보이는지 확인합니다.


윈도우7, 윈도우8 용 필요한 업데이트에 맞춰 확인합니다.


만일 있다면 기다려 보시기바라고 , 그래도 안된다면 해당 업데이트를 삭제후 재 설치를 권합니다. 




3. 업데이트 예약 진행하기 


아이콘이 보인다면 해당 아이콘을 클릭합니다.





무료 업그레이드 예약을 클릭합니다.





여기에서 이메일 주소를 입력해둡니다.





앞서 해당 메일로 며칠안에 아래처럼 예약했다는 메일을 받게 됩니다.





만일 예약을 취소하고 싶다면.


4. 예약취소 방법


예약을 취소하고 싶다면 예약할때와 마찬가지로 윈도우10 업그레이드 아이콘을 클릭합니다.





그리고 좌측 상단에 메뉴아이콘을 클릭합니다.


메뉴에서 [확인보기]를 클릭합니다.



그러면 [예약취소]가 나타납니다.




예약취소버튼을 클릭합니다. 취소됩니다.




취소 했더라도 다시 업그레이드 예약은 가능합니다.



  이번 구글 I/O에서는 구글포토를 소개하였다. 


구글 포토는 사진저장 클라우드로 일정 크기이하의 사진과 동영상을 제한없이 저장 할 수 있는 무료 클라우드 서비스 이다.


구글포토를 시작하면서 PC용 Google Auto Backup 과 모바일용 앱도 같이 출시되었다.


   그런데 문득 이전부터 구글이 제공하던 피카사, 구글플러스로 이름을 달리하면서 변화되었던 무제한 사진저장소가 이미 있는것으로 아는데 무엇이 달라진것일까?  


그래서 찾아보았다 정확히 무엇이 달라졌으며 단순히 변화에 그치는것인지 진화되는 것이지.


우선 무제한 저장가능 이미지 저장크기가 늘었다.  기존 구글플러스/피카사에 무제한 저장방식은 2048x2048(약 4백만화소)사이즈 사진에 한에  저장용량 감소없이 업로드가 가능했었지만  이번 구글포토에서는 이러한 허용크기가 16MP(1600백만 화소) 사이즈까지로 늘었다.





해당 크기는 2015년 6월 현재 최신스마트폰의 해상도를 포함하고, 괜찮은 미러리스카메라 화질, DSLR 일부 까지도 커버가능한수준이다. 


허용되는 이미지 품질 수준은?


 이 정도 해상도로 만일 300dpi 고품질로 인화를 할 경우 17인치 x 11인치 까지 괜찮게 나온다고 보면 된다. (관련 구글 블로그에서는 24인치 x 16인치까지 괜찮다고 하지만)


아래 이미지 쌤플은 구글 블로그에서 소개 하고 있는 예 인데, 원본저장과 구글의 무제한 허용품질 크기로 저장했을때 이미지 화질 비교 이다. 클릭하면 크게 볼 수 있는데 그닥 품질차이를 느끼기가 쉽지않다.



출처 http://googleblog.blogspot.kr/2015/05/picture-this-fresh-approach-to-photos.html




  또 한가지 더 맘에드는건 동영상 무제한 저장 허용 크기이다. 허용수준은 1080p 해상도까지 이고 개별 파일의 최대 크기 10GB 이다. 현재시점 비디오촬영용 카메라가 4K 이상도 촬영하고 있지만 사실 용량면에서나  플레이어가 많지 않다는 점에서 볼때는  1080p가 현실적이고 괜찮은 수준이라 판단된다. 1080p면 FullHD 급화질 이다. 


촬영시간으로 보면?


 구글포토에 용량제한 없어 허용되는 동영상 파일크기인 10GB은  촬영시간상으로 계산하면 1080p 품질에 H.264 압축으로 저장하여 초당 15Mbit 가량속도로 저장한다고 볼때 1시간 30분가량 저장가능한 크기이다.  이정도 시간을  끊지 않고 원샷으로 SD 카드에 이렇게 동영상촬영 할 경우는 많지 않다고 볼때, 사실상 홈비디오 수준에서는 매우 만족스런 수준의 허용치가 아닐까 싶다.   구글 포토의 동영상 저장은 마치 개인용 유튜브 공간제공이라 봐도 될듯하다. ( 그동안 유튜브를 저장공간 삼아 비공개로 저장하던것에서 벗어날듯 싶다.^^; )



그리고 큰 차이라면 한결 편리해진 사진 백업기능이다. 구글에서는 사용자들의 사진백업을 위해  데스크탑버전과 스마트폰버전 두가지로 내놓고 있다. 




개인적으로는  그동안 사진백업을 위해 플리커를  이용했었는데  구글 포토로  완벽한 이중화(?) 가 되지 않을까 싶다.



PC(윈도우)용 Avast 는  http://honeylife.info/36  글 을 참고하세요. 이하 맥(OSX)용 설명입니다.

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


  맥(Mac) OSX 가  MS 윈도우에 비해서 비교적 보안에 강한 모습을 보이기는 하나. 악성코드들에 의한 피해가 아예 없는것은 아니죠. OSX 사용자가 늘어날수록 그만큼 악의적 코드의 접근시도도 늘어나고 있는 편이기 때문에  OSX 사용자라고 안심할 수 는 없습니다. 

 

  그래서 무료백신이라도 하나 설치해줄까해서 찾아보는데  윈도우용에 비해 맥용은 찾기가 쉽지 않더군요. 그래서  찾아서 설치해본 설치 사용기를 정리해볼까합니다.


윈도우용으로는 MS에서 사용중인 MSE,  그리고 비교적 이벤트를 통해 가격이 저렴한 노턴안티바이러스나 노턴인터넷시큐리티를 사용중인데 맥용은 대체로 가격이 비싼편이더군요. 그래서 찾아보던중 눈에 들어온게 Avast 무료 버전이었습니다.





해당 이미지 링크에서 avast_free_mac_security_online.dmg 다운로드 한뒤 순서대로 설치해주면 됩니다.



설치를 하고 나면 한차례 업데이트와 자동 검사를 실시합니다.  별도로 사용자가 선택한 영역을 검사해주기도 하구요.


무료 버전이기는 하나 기본적으로 필요한 기능은 다 있네요.


가장 중요하게 생각하는 파일 시스템 실시간 감시




웹에 대한 실시간 감시




발견되서 삭제처리등 되었을때 보관되는 바이러스 검역소



전체적인 시스템 상태 보고 까지 



보통 무료버전 백신들이 위 기능중 일부만 제공하는것에 비하면 나쁘지 않은편입니다.


AVAST 가 과거보다 백신 순위에서는 조금 밀렸다고는 하지만 유료버전 기준은 그렇고, 무료버전 백신가운데는 최상이라는 관련글이 대부분이었습니다.


특히나 유저인터페이스가 좋기로 유명한 편이었습니다.


Mac용 유료버전과 무료버전의 차이는 원격관리정도인것 같습니다.

(https://www.avast.com/en-us/faq.php?article=AVKB72#idt_07)


 PC용에서는 방화벽기능, 스팸메일 차단기능 정도인것 같긴한데  이정도는 Mac에서는 굳이 필요없고,  


다만 무료버전인 경우 최초1년만 무료로 사용가능하고 이후에는 유료로 구입하지 않으면 사용이 안된다고 하네요, 그러니까 무료는 기능적차이를 둔다기 보다 유료버전으로 사용자들 유도하기 위한 수단으로 보입니다. 그래서 그만큼 무료이지만 기능성이나 성능면에서 좋은가 보네요. 


그래서 일단 한해 써보고 이후 고민 하면 될것 같습니다. ㅎ



클리앙 알뜰구매게시판에서 촉발한 델모니터 가격에.. 뽐뿌,SLR등으로 번지면서 사태(?)가 확산된것같은데..


아침에 스마트폰으로 보고 PC에 급 접속 후 결국 지르고 말았네요..


(판매 링크는 이글  맨 하단에 있어요...^^)



분명 상품 목록 화면에서는 499,400원에서 쿠폰할인가가 317,900원 이라고 되어있는데... 하단에 쿠폰코드까지 먹이면..



이처럼 136,400원이 되어버리네요... 출시한지는 좀 되긴 했는데... 나름 최신 인터페이스 DisplayPort를 지원하고, 화면비율 16:10, 1920x1200 이어서 나름 고급형 모델인것 같은데... 폭락가가 되는 상황인거죠.



집에 쓰던 오랜된 모니터를 교체할 생각으로.  무심결에 1개만 구매 했다가.... 하나더 사고 말았는데..




 어젯밤 자정직전 부터해서 지금 시간까지도 팔리는거 보면... 정상적인것 같긴한데... 재고물량이 엄청나게 있는건지..


장바구니에서보면 해당 쿠폰은 오늘의 특가 쿠폰이라고 되어있어서.. 잘못된것 같지는 않아보이는데.. 내일되면 정상으로 바뀔지 모르겠군요.


델의 실수 인건지 어째든 이번 대란이 어떻게 끝나질 궁금합니다. ㅎㅎ 


해당제품 링크 바로가기  


바로들어가면 가격이 317,900원으로 보이는데 장바구니에 넣은뒤 쿠폰 91ZHT9GGBJQ3V1  을 먹이면 136,400원으로 됩니다.

주의)  결제는 IE 브라우저에만 가능합니다. ActiveX 를 설치하기때문에요.


13시경 현재 종료되었네요..


에러 같은 창이 뜨는걸로 봐선.. 재고 소진이 아닌... 실수조치가 아닐까 싶은데... 


기 구매자처리를 어떻게 할지 모르겠네요.. ㅎㅎ 안전 배송 기대해 봅니다.




프로그램을 개발하다보면 소스에 대한 버전관리는 필수 이다.  오래된 CVS 사용이후  SVN을 사용했었고, 최근에는 Git을 사용하고 있는데.  사실 Git에 대한 얘기를 들은지는 오래됐었지만 실제 사용까지는 시간이 많이 걸렸었데

 


 






 

git은 다른 버전 관리 소프트웨어들과 다른 개념을 갖고 있는게 있다보니 이를 이해하는것이 귀찮았었다.  하지만 Git 이 좋다니 몇가지 명령만으로 사용하고는 있었는데  최근에  Git 를  일종의 파일시스템으로 이용해봐야 겠다는 생각이 있어. 이렇게 하기위해서  Git에 대한 깊숙한 이해가 필요하기에

좀더 상세 하게 알아보게 되었다.

 

그러다 보니 그간 불분명했던 Git에 대한 것이 좀더 명확해졌는데. 이를 정리해 볼까 한다.   여기서는 Git 의 Repository 구조를 알기위해서는 Gi에서 Tree라는 object를 정확히 이해 하고 있어야하는데 이해대한 이해를 위해  git 의 Low Level 명령어를 이용해  Git repository에 파일과 디렉토리를 추가하는 것을 해볼것이다.

 

준비환경은 git 을 실행할 수 있는 환경이면 어디든 상관없는데. 참고로 여기서는 Windows 에 msysgit(http://code.google.com/p/msysgit/) 을 설치했을때 생겨나는 bash 쉘 에서 실행했다.

 

아래 내용은  git 의 문서인 (정확히는 Pro Git이라는 책의 온라인 링크) http://git-scm.com/book/en/Git-Internals 경로의 내용을 내 나름대로 좀더 명확하게 다뤄봤다고나 하는 정도이다.

 

 

먼저 git init 명령으로 빈  git 디렉토리 생성하고 진행한다.

 

 init 명령을 통해 git repository를 생성하고 나서 이하의 디렉토리를 살펴보면 다음과 같다.

 $ find .git -type f
.git/config
.git/description
.git/HEAD
.git/hooks/applypatch-msg.sample
.git/hooks/commit-msg.sample
.git/hooks/post-commit.sample
.git/hooks/post-receive.sample
.git/hooks/post-update.sample
.git/hooks/pre-applypatch.sample
.git/hooks/pre-commit.sample
.git/hooks/pre-push.sample
.git/hooks/pre-rebase.sample
.git/hooks/prepare-commit-msg.sample
.git/hooks/update.sample
.git/info/exclude



hash-object 명령을 이용해 object ID와  blob object를 생성한다.

 파일에서가 아닌 직접 입력으로 파일을 생성한다. 

$ echo 'test content' | git hash-object -w --stdin
d670460b4b4aece5915caf5c68d12f560a9fe3e4


위 명령을 하고 난뒤  git의 database 공간인  .git/objects  디렉토리 이하를 살펴보면   하나의 object가 새로 생성되었음을 알 수 있다.  

아래 명령 실행 참고
$ find .git/objects -type f
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4


위의 것은 파일로 부터 object를 만드는 것과 어떤 차이가 있을까?

이번에는 object를 파일로 부터 만들어 본다.

$ echo 'test content  2' > second.txt

 

$ git hash-object -w second.txt
warning: LF will be replaced by CRLF in second.txt.
The file will have its original line endings in your working directory.
031da66cfe6457d8fb541fa95e54e5b600576d41

 위 명령어는 파일로 부터 내용을 읽어 blob object와  object ID를 생성해서  git database에 생성한다.

단지 파일에서 내용을 읽을 뿐  앞서  echo 명령을 이용해 데이터를 바로 전달한 것과 차이가 없다

다음 명령실행결과를 보면  둘간에 차이가 없음을 알 수 있다.

$ find .git -type f
.git/config
.git/description
.git/HEAD
.git/hooks/applypatch-msg.sample
.git/hooks/commit-msg.sample
.git/hooks/post-commit.sample
.git/hooks/post-receive.sample
.git/hooks/post-update.sample
.git/hooks/pre-applypatch.sample
.git/hooks/pre-commit.sample
.git/hooks/pre-push.sample
.git/hooks/pre-rebase.sample
.git/hooks/prepare-commit-msg.sample
.git/hooks/update.sample
.git/info/exclude
.git/objects/03/1da66cfe6457d8fb541fa95e54e5b600576d41
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4

단지 git/objects/ 디렉토리에 object파일(031da6)이 하나 만들어 졌을 뿐이다.  이 말인즉,  파일명 정보는  아직 저장 되지 않았다는 의미 이다. 단지 내용만 object로 만들어 졌다. 

실제로 object에 파일명을 붙여주는(매핑해주는) 작업은 추가로 해주어야 한다.

git 에서 object와  해당 object의 이름(파일명 또는 또 다른 tree 명)을 매핑해주는 정보는  tree 라는 object에 저장하게 된다. 

즉 파일명을 붙여주려면 tree object를 만들어 주어야 한다. tree object를 만들기 위해서는 먼저 index 정보가 필요하다. index 내용을 이용해서 tree object를 만들기 때문이다.



update-index 명령으로 이를 해줄 수 있으며  앞서  echo명령을 이용해 내용을 전달해서 만든 object 에 first.txt 라는 파일명을 부여해줘보겠다.

$ git update-index --add --cacheinfo 10644 d670460b4b4aece5915caf5c68d12f560a9fe3e4 first.txt

위 명령을 하고 나서 .git 디렉토리를 살펴보면 
 
$ find .git -type f
.git/config
.git/description
.git/HEAD
.git/hooks/applypatch-msg.sample
.git/hooks/commit-msg.sample
.git/hooks/post-commit.sample
.git/hooks/post-receive.sample
.git/hooks/post-update.sample
.git/hooks/pre-applypatch.sample
.git/hooks/pre-commit.sample
.git/hooks/pre-push.sample
.git/hooks/pre-rebase.sample
.git/hooks/prepare-commit-msg.sample
.git/hooks/update.sample
.git/index
.git/info/exclude
.git/objects/03/1da66cfe6457d8fb541fa95e54e5b600576d41
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4

.git/index 파일이 생겨났음을 알 수 있다. 

이 index 정보는 곧  git 에서 말하는 stage 상태의  (cache)정보가 된다.  

그리고 아직 object들간의 관계정보는 없는데 관계정보라 함은,  object의 이름. object의 위치(파일시스템에서 보면 어떤 디렉토리에 존재하는 지 정보 등) 이들 관계정보를 갖는 것이 결국 tree 이다. 

git 에서 tree 에 대한 개념만 정확히 이해 하면 사실 90% 이상은 이해하는 것 같다.

git에서  commit 이라는 것이 특정 시점의 특정한 object들의 관계정보를 저장하면서 commit 이라는 object를 만드는 것인데 결국 이는 tree 정보를 말한다.   다만 commit object와  tree object 차이점은  commit object는 특정한 tree object를 가리키고 여기에 comment와 누가 만들고 commit했는지 정보를 추가하는 것 뿐이다.

여기서 오해가 없어야 할것이 대상 tree object는 계속 바뀐다는 것이다.  파일을 추가한다는 것은 기존 tree 정보를 활용해 object가 추가된다는 것이고, 파일을 변경한다는 것은 기존 object를 둔채 새로운 object가 역시 추가된 다는 것이고 

(좀더 상세히 말하면 중간에 index 에 추가되거나 변경되는 object들에 대한 매핑정보를 가지고 있다가 write-tree 에서 실제 새로운 tree 를 만들면서 저장이 된다.)   그리고 추가되고나 바뀐 내용을 저장하기 위해서는 새로운 tree object 가 생겨난다는 것이다.  따라서 해당 tree object를 가리키는 oid는 당연히 바뀌고 이때 commit을 하기되면 commit object가 가리켜야할 tree object역시 바뀌어야 하기 때문이다.



  index =   object's name + object type + oid 

  tree =  writed index 

  commit =  tree  +  comment + author info    라고 보면 되겠다.


그리고 branch 와 같은 reference 도  모두  특정한 commit을 가리키게되는 데 결국 특정시점에 만들어진 tree object를 가리키게 되는 셈이다.

이제 앞서 만든 index 내용을 tree object로 만들어 보자 

$ git write-tree
802e62ded81357dc7b0f74ed37f72bf245f88a4b

 tree 역시 object 로 만들어지기 때문에 object ID를 뱉어 냈다.

$ find .git/objects -type f
.git/objects/03/1da66cfe6457d8fb541fa95e54e5b600576d41
.git/objects/80/2e62ded81357dc7b0f74ed37f72bf245f88a4b
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4

그리고 해당 tree object의 내용을 살펴보면  

$ git cat-file -p 802e62ded81357dc7b0f74ed37f72bf245f88a4b
100644 blob d670460b4b4aece5915caf5c68d12f560a9fe3e4    first.txt

 이제 commit object를 만들어 볼 것이다.  commit을 만들었다는 것은 이를 이용해 branch 를 지정 해 줄 수 있다는 의미이다.

앞서 만든 tree object를 이용해  commit-tree 명령을 하면  commit object가  생겨난다. 

$ echo 'commit first' | git commit-tree 802e62
296f93c8cd0adbd687cbf73b0c8cef61e138e71e

그리고 다시 한번 objects 디렉토리를 살펴보면   object가 하나 추가 되어있다. 해당 object는 commit object이다. 

$ find .git/objects -type f
.git/objects/03/1da66cfe6457d8fb541fa95e54e5b600576d41
.git/objects/29/6f93c8cd0adbd687cbf73b0c8cef61e138e71e
.git/objects/80/2e62ded81357dc7b0f74ed37f72bf245f88a4b
.git/objects/99/12b44e53af4bce15827526c1709f75bc7bb88a
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4 

$ git cat-file -p 296f93c8cd0adbd687cbf73b0c8cef61e138e71e
tree 802e62ded81357dc7b0f74ed37f72bf245f88a4b
author user@somecomp.co.kr <user@somecomp.co.kr> 1395645128 +0900
committer commiter@somecomp.co.kr <commiter@somecomp.co.kr> 1395645128 +0900

commit first


이렇게 만들어진 commit을 master(reference)로 지정해 보겠다. 방법은 간단하다.  
해당 commit object oid .git/refs/heads/master  에 넣어주면 된다.

먼저 해당 폴더를 살펴보면 아직 파일이 없다. 

$ find .git/refs
.git/refs
.git/refs/heads
.git/refs/tags

 그리고 앞서 만든 commit 의 oid를 이용해 master 파일을 만든다.

$ echo  "296f93c8cd0adbd687cbf73b0c8cef61e138e71e" > .git/refs/heads/master

 이제 만들어진 master를 checkout해볼텐데 앞서 현재 디렉토리 상황을 한번 보면 


$ ls
second.txt

앞서 테스트용으로 만들어봤던 second.txt 파일이 있다. 

이제 checkout을 할 텐데  , chechkout 하기에 앞서 최종적으로 commit을 만들때 사용한 tree 에는 first.txt라는 파일명을 붙여준 object하나만을 매핑 하고 있음을 기억하고 있자.

checkout 에 -f 옵션을 붙여 줄텐데  이는 현재 작업디렉토리 상황을 무시하고 master branch 내용대로 파일들을 chechkout하라는 의미이다. 안그러면 현재 작업디렉토리에 first.txt 가 없기 때문에 삭제된 것으로 인지 하 기 때문이다.

$ git checkout -f master
Already on 'master'
$ ls
first.txt  second.txt

 자 이렇게 해서  파일없이 git object추가 부터 commit 까지 해보았다.

그럼 디렉토리는 어떻게 추가할까? 

git 에서 디렉토리는 tree 가 그 역할을 하게 되는데  tree 는 기본적으로 다른 object에 대한 매핑정보없이는 만들어질 수 없다.  즉 한개의 object라도 매핑이 되어야 한다.  

예를 들어 mydir 이라는 디렉토리가 생성되려면,  mydir/ 밑에 특정 object를 있는 것으로 경로를 지정해주면서 index에 추가 해주면 된다.

추가하기전에 먼저 현재 object 목록을 살펴보자


$ find .git/objects -type f
.git/objects/03/1da66cfe6457d8fb541fa95e54e5b600576d41
.git/objects/29/6f93c8cd0adbd687cbf73b0c8cef61e138e71e
.git/objects/80/2e62ded81357dc7b0f74ed37f72bf245f88a4b
.git/objects/99/12b44e53af4bce15827526c1709f75bc7bb88a
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4


그리고 서브디렉토리생성및  object 추가 하기 

$ git update-index --add --cacheinfo 10644 031da66cfe6457d8fb541fa95e54e5b600576d41 mydir/echo_second.txt

이렇게 index에 mydir/echo_second.txt를 추가하더라도 object 상황은 바뀐게 없다. 

$ find .git/objects -type f
.git/objects/03/1da66cfe6457d8fb541fa95e54e5b600576d41
.git/objects/29/6f93c8cd0adbd687cbf73b0c8cef61e138e71e
.git/objects/80/2e62ded81357dc7b0f74ed37f72bf245f88a4b
.git/objects/99/12b44e53af4bce15827526c1709f75bc7bb88a
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4

단지 index 파일에만 내용이 저장되기 때문이다. 

그런데 이렇게 하고 나서 write-tree를 하게 되면 어떨게 될까.

$ git write-tree
adf331e74367e0a991c41b7918e14be8faf3189b

우선 해당 tree를 살펴보면  mydir 이라는 tree object를 가리키고 있는 것을 볼 수 가있는데, 

 $ git cat-file -p adf331e74367e0a991c41b7918e14be8faf3189b
100644 blob d670460b4b4aece5915caf5c68d12f560a9fe3e4    first.txt
040000 tree 1f6e6885b83dd560a9d6ea062a3e3a997b035855    mydir

정작 echo_second.txt는 안보인다.  어디있을까 ?
이것은 다시 mydir 이라는 tree object를 살펴보면 된다.

$ git cat-file -p  1f6e6885b83dd560a9d6ea062a3e3a997b035855
100644 blob 031da66cfe6457d8fb541fa95e54e5b600576d41    echo_second.txt

이렇게 write-tree를 하게되면 해당 tree 에 대한 새 object(adf331e) 와  echo_second.txt를 포함해야하는 tree object(1f6e688) 이 생겨나게 된다.

$ find .git/objects -type f
.git/objects/03/1da66cfe6457d8fb541fa95e54e5b600576d41
.git/objects/1f/6e6885b83dd560a9d6ea062a3e3a997b035855
.git/objects/29/6f93c8cd0adbd687cbf73b0c8cef61e138e71e
.git/objects/80/2e62ded81357dc7b0f74ed37f72bf245f88a4b
.git/objects/99/12b44e53af4bce15827526c1709f75bc7bb88a
.git/objects/ad/f331e74367e0a991c41b7918e14be8faf3189b
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4 


즉 git 에서는 directory라는 형태의 object가 없고  다른 tree를 포함하는것으로 서브 디렉토리역할을 하게 되는데. tree 는 기본적으로 object의 관계정보를 가지고 있어야하기때문에  결국 디렉토리를 만들기 위해서는 하나의 이상의 파일을 포함해야 하게 된다.

그러다 보니 git 에서 빈 디렉토리가 필요할 경우  git add 명령을 이용해 비어있는 서브디렉토리를 지정해줘 봤자 추가가 안된다.  그래서 보통은  .gitignore 와 같은 파일을 하나 만들어 두고 추가하는 방법을 쓰곤 한다.

 

끝으로 이글을 정리하기 전에 참고한 링크 이다.

http://git-scm.com/book/en/Git-Internals

 

 

 

소규모 네트워크를 구성할때 많이 사용되는 공유서버 및 VPN과 관련한내용을 작성정리한 블로그 링크만 찾아 보기 편하도록 따로 뽑았습니다.



#1 삼바(SAMBA)를 이용한 윈도우 접근 가능 공유폴더 만들기(설정방법) - 우분투 리눅스를 이용한 개인, (중)소기업용 PC 파일서버(NAS) 구축하기 강좌

http://funnylog.kr/434


#2 rsync를 이용한 (공유폴더) 디렉토리 자동(동기화)백업 방법 - 우분투 리눅스를 이용한 개인, (중)소기업용 PC 파일서버(NAS) 구축하기 강좌

http://funnylog.tistory.com/439


#3 Dynamic DNS(DDNS)을 활용 나만의 무료 도메인네임 부여 하여 원격접속하기(공유기 포트포워딩 설정) - 우분투리눅스 강좌 시리즈 

http://funnylog.tistory.com/457


#4 AjaxPlorer를 이용한 스마트폰/PC 모두 사용가능한 웹디스크(WebDisk) 서버 만들기 - 우분투 NAS 구축 강좌 시리즈

http://funnylog.kr/481


VPN(가상사설망) 이란 "가상전용선(터널링)"을 이용한 "가상전용망" 이다. VPN 필요성과 개념정리

http://funnylog.tistory.com/543


VPN의 활용.가상인터페이스 이해.- PPTP를 이용한 외부에서의 공유폴더 접속하기, VPN 공유기/윈도우 설정 방법

http://funnylog.tistory.com/552






오늘 한국어문회에서 하는 6급한자 시험에 둘째녀석이 다녀왔네요.  


지난 번 7급시험때는 어이없게도 시험시간을 잘못알고 놓쳤는데.  이번에 6급으로 올려서 시험을 보았습니다.


   6급 시험을 보기 최근 1주일 전에는 모의 시험지를 사가다 아이에게 풀어보도록 하는데 너무 어려워 하면서 7급을 봤어야 했다면서 울기 까지 하더군요..   그래도 학습지로 6급 수준을 공부했던 녀석이 그러는걸 보니 조금 밉상(?) 이었습니다. 그래도 어떻게든 시험을 보게 해야 겠다고 생각하던차에  전에 스마트폰에 깔아두었던 한자급수 공부용 앱이 떠오르더군요. 


그래서 그 앱을 띄워놓고 6급 부분을 실행한뒤 아는 한자와 모르는 한자를 고르도록 하고, 다시 반복하면서 그 개수를 줄여나가도록 해보았습니다.  다행이도 스마트폰 가지고 하는것은 게임처럼 느껴졌던지 반복적으로 계속하면서  6급한자 전체 150개 정도에서  처음에는 모르는게 100개 넘었는데 3일째가 되더니 몇개정도 빼놓고는 모르는것 없이 다 알게 되는 기적(?) 같은 벼락치기 공부가 되더군요.  물론 아예 한자공부를 안한상태였다면 이런 방법이 통하기 어렵겠지만 학습지로 공부하면서 익히긴 했으나 잘정리 되지 않은채 머리속에 있던 한자들이 다시 잘 정리되는듯해 보였습니다.


   그렇게해서 오늘 시험보러갔었는데  20분도 채 안되서 시험 끝내고 나오더니 잘 본것 같다며 좋아하면서 5급 시험도 빨리 보고싶다는 허세까지 부리는 녀석을 보니 그나마 다행이다 싶었습니다.


어째든 스마트폰 덕을 톡톡히 보게되었는데.  오늘 시험장에 가서 시험시작전까지 시험보러온 학생들중에는 스마트폰을 꺼내놓고 공부하는 다른 애는 볼 수 없었습니다. 다들 모의시험문제집을 꺼내놓고 풀거나 저마다의 종이인쇄물을 보고 있었습니다. (종이로 학습하는것도 물론 좋긴 하지만)  다른 곳에서는 그렇게 많은 애들이 스마트폰 갖고 노는모습을 많이 보았는데.  스마트폰을 정작 학습도구로 사용하는것은 또 별개 일인가 봅니다.





추천하는 앱은 2개 입니다.


너도나도 재미있는 한자공부



급수별 한자 공부에서 원하는 급수를 선택해 


한자 음과 뜻을 생각해내 보면서 암기여부를 체크 할 수 있습니다.



다음은 즐거운 한자공부Q라는 앱인데.

한자 퀴즈에 들어가서 4지 선택형으로 연습하기에는 좋습니다.




  모의시험학습지에 비해 스마트폰 학습의 장점이라면 자신의 모르는 부분만 자동적으로 정리되면서 집중반복이 쉽다는 점이 아닐까 싶습니다.


앞서 소개한 2가지 앱 이외에도 여러가지 한자급수 공부 앱이 있기때문에 공부하는 개인 취향에 맞춰 선택하면 될것 같고, 무료앱만으로 충분한 효과를 볼 수 있을것 같습니다.



오늘 금요일날 발송된 부품을 받아 조립하면서 사이사이 사진을 찍어 보았네요.


 먼저 조립할 부품들 입니다.


위에서 부터 파워,HDD,메인보드,ODD,CPU,SSD,RAM 입니다.



먼저 본체케이스에  파워를 장착합니다.




그리고 메인보드를 조립하기에 앞서 출력포트 가이드를 장착합니다.





그리고 메인보드 안착시킵니다.





CPU를 소켓에 얹어 



잠급니다. 이때 메인보드 소켓위에 있던 플라스틱 뚜껑은 CPU를 얹고 닫을때 자동으로 분리됩니다.




그리고 CPU팬을 장착합니다.




램을 장착합니다.




파워케이블을 연결합니다. 꽂아야 할곳이 2개 입니다. 




그리고 SSD/HDD를 연결합니다.



ODD도 연결하고,  ODD 삽입은 본체 앞에서 부터 집어넣습니다.


HDD LED, POWER 스위치, POWER LED, RESET 스위치, 보드 SPEAKER 까지 연결합니다.


그리고  케이블 정리하여, 


전원연결후 부팅해봅니다.


BIOS 설정후 부팅, 그리고 OS 설치하면 끝.



 하스웰을 이용해서 PC를 한대 조립하려고 주문해놓고 잠시 공황상태가 되었었네요.


주문한 CPU가 i7 - 4770K 였는데 VT-d 를 지원하지 않는것이었습니다. vPro도 지원안되구요.


아래경로 참고

http://ark.intel.com/ko/products/75123/


보니까 4770은 지원은 되는데 4770K 만 안되더군요.  4670K 처럼 K가 붙은 시리즈가 안되고 있었습니다.



4770k 고급기술 지원여부

 


이번에 PC를 조립하는이유가 가상화서버로 쓰려고 하는것이었는데. VT-d (가상 Direct I/O)가 안된다고 하니 갑자기 당황스럽더군요.   그런데 조금있다가는 그냥 포기하는게 맞을 것 같았습니다.


하스웰을 지원하는 칩셋이 데스크탑용으로는  Z87, H87, Q87  이 있는데  Q87만 VT-d를 지원하는 것으로 되어있더군요.  (http://ark.intel.com/ko/products/75013/Intel-DH82Z87-PCH)

 


z87 칩셋 고급기술 지원여부




 그런데 아직 Q87 을 지원하는 메인보드는 시중에 출시되지 않은 상태라  4770이어도 어차피 할 수 없는 상황이었기 때문입니다.  나중에 기다리다 Q87 칩셋 보드가 나오면 모르겠지만.   그리고 주로 사용하는 VMWare Workstation 역시 VT-d 기술을 지원하지 않기때문에 이래저래 무용지물이어서.  그대로 i7 - 4770K로 가기로 마음을 먹었습니다.


   4770K에서도 VT-x 지원은 되기때문에 그동안 써오던 가상화성능 이상은 충분히 나올것으로 기대 되네요. 




+ Recent posts