SW 개발자라고 하면 누구나 알고 있는 Stackoverflow


신기하게도 영어를 싫어하는 개발자들조차도

애용한다는 Stackoverflow


그러한 Stackoverflow에서 2019년 Survey를 발표하였다.




Developer Survey Results

2019



https://insights.stackoverflow.com/survey/2019




무려 9만여명의 개발자들의 응답 내용으로 만들어진 Survey라고 한다.




[ 주요 결과 ]



Python


   - 가장 사랑받고, 또 가장 원하는 언어로 뽑힌 Python 이다.

   - 가장 사랑받는 순위로는 2위이지만, 가장 원하는 언어로는 1위에 뽑혔다.



   - 가장 최악의 언어 순위가... Object-C, C, PHP, Ruby, R, C++, Java 등이 있는 것이 눈에 띈다.

   - 사랑하는 언어 1위로 뽑힌 Rust가 원하는 언어로는 6위에 있는 것 또한 특이하다.




DevOps / SRE


   - 업무에 가장 만족하며, 취업 안정성 측면에서도 가장 좋은 평가를 받고 있는 일자리는 바로 DevOps/SRE 분야인 것으로 나타났습니다.

   - 최근 서비스 SW 개발분야가 각광을 받는 배경때문이지 않을까 싶습니다.



   - 임금에 있어서도 manager에 이어 나란히 2/3위가 DevOps와 SRE이다.




Benefit of Stackoverflow


   - 60%의 개발자들은 평균 3회 정도 문제를 해결하기 위해 Stackoverflow를 방문한다고 한다.



   - 또한 이렇게 Stackoverflow를 통해 문제를 해결하는 것은 개발자에게 주당 30 ~ 90 분의 시간을 절약 해준다고 한다.





재미있는 다양한 설문 조사 결과를 볼 수 있어서 좋다.

전세계에 있는 9만여명의 개발자들에 대해서 볼 수 있는 기회가 흔하지 않기 때문이다.


더 많은 결과를 보고 싶으신 분들은 사이트에 방문하면~!! ^^


반응형


작년 광군제를 포함하여 블랙프라이데이 등의 고비를 넘기지 못하고

평소에 갖고 싶었던 것들을 질러버렸다.


마구 마구 장바구니... 


한 번에 너무 많이 풍족하게 질러버리면

지를 때에는 행복하지만 물건들이 도착했을 때 ... 가지고 놀 엄두를 내지 못하는 부작용이 있다.


오랫동안 묵혀뒀었는데... 계속 쌓아만 둘 수 없으니, 하나씩 꺼내봐야겠다.


오늘은 그 중 하나!! "HAT - YUN"이라는 놈을 꺼내보았다.



1. HAT - YUN

   - M5StickC 머리 부분에 꼽아서 사용할 수 있는 장치들을 HAT 시리즈 디바이스라고 한다.

   - 그 중에서 YUN 이라는 제품인데... 중국말로 구름이라는 뜻이다.

   - 온도와 습도 센서가 붙어있는 제품이다.

   - 기본 링크는 아래와 같다.

      . https://docs.m5stack.com/#/en/hat/hat-yun



2. Product

   - 대부분의 M5STACK 제품은 플라스틱 박스로 오는데... 이 제품은 특이하게도 종이박스 포장이었다!!!


   - 말 그대로 구름 모양으로 심플한 구성이다.



   - 파워 연결선은 나중에 별도 전원을 공급하고 싶을 때 사용하면 되고, 꼭 연결을 할 필요는 없다.




3. Features

   - 측정할 수 있는 센서 값은 다음과 같다.

      . 온도, 습도, 기압

   - 광저항센서가 있어서 빛도 측정할 수 있다.

      . 이걸 이용해서 어두울 때 주변에 LED를 켤 수 있는 것이다.




4. Easy Loader

   - 구매해서 가지고 일단 가볍게 가지고 놀 방법을 알아봤다.

   - 홈페이지에 가면 "Easy Loader"를 다운로드 받을 수 있다.

      . 아직은 Windows 환경만 지원한다.



   - 다운로드 받은 후 실행하기 전에 ...

   - M5StickC를 USB 연결해야 한다.

      . 실행 후 연결하면 COM 포트 못 찾는다.

   - USB 연결 후 Easy Loader 실행하자.



   - Burn 하면 아래와 같이 M5StickC에 프로그램을 전송하게 된다.




5. Execute

   - 처음 실행하면 Battery 문제 때문인지 센서값들을 받아오지 못한다.

   - 한동안 USB 꼽아서 충전하도록 내버려 두자



   - 실행 영상도 아래와 같이 찍어봤다.





즐거운 M5StickC 생활~~~~~~~!!!


반응형


우연히 알게되어서 부랴부랴 보게 된 '니지 프로젝트'


JYP 주도로하여서 Sony Music과 같이 일본에서 오디션을 통해 걸그룹을 만들겠다는 프로젝트다.

일본 국적의 여자 아이들을 대상으로 한 오디션인 것이다.



평소에도 느낀 것이지만

'니지 프로젝트'를 보면서 우리나라와 일본의 문화? 분위기? 성향? 차이를 조금은 더 알게 되었다.



각 지역 오디션을 통해 26명을 선발하여 '도쿄'에서 4박 5일 훈련?을 하고선

그 중에서 20명 정도?를 선발해서 서울로 데리고 와서 6개월 훈련 후 데뷔까지 진행하는 프로젝트라고 한다.


개인적인 Pick은 "Suzuno Miihi"



JYP 연습생 출신이라서 공정성에 조금 문제가 있어 보이지만 ... 그래도 귀여워~~~!!!

보여지는 것 외에 모르기에 실제는 모르겠지만... 여하튼, 보여지는 모습만 봤을 때...

목소리 허스키하니 매력적이고, 귀엽고, 겸손하고, 착하고, 노력할 줄 알고~~~~!!!!



이 프로그램을 보면서, 우리나라의 오디션 예능과의 차이가 좀 보였다.

프로그램 편집 자체의 차이도 있을 것이고, 문화적인 차이가 있을 수도 있을 것이다.



1. 드래곤볼을 모아라~

   - 4가지의 큐브를 모으면 당첨~!! 드래곤볼의 나라 답게도... ^^

   - 참가자에게 비어있는 목걸이를 주고, 미션? 성공할 때 마다 한 조각씩 채워주고 전부 채우면 선발되는 형식이다.




2. 감정 절제

   - 합격을 하거나 탈락을 하거나 그 자리에서는 울기도 하고 그러는데... 나와서는 엄청 자제하는 모습이다.

   - 우리 나라에서는 밖에 나와서 함성도 지르고 방방 뛰기도 하는데... 여기 아이들은 상당히 담담한 모습이다.




3. 잘하는데 못하는...

   - 미묘한건데... 가끔 잘하는 아이들이 나오는데... 잘하는데, 못한다. 뭐라 설명하기 어려운데... 말 그대로, 잘하는데 못한다.

   - 못한다고 말할 수 없는데, 뭔가 진짜인데.... 정말 잘하냐? 하면... 못한다. 그런데, 뭔가 있다.




4. 감성팔이 없다!

   - 중간에 가정집이 나와서 걱정했는데... 그냥 일반적인 가정 이야기였다.

   - 오디션 전체적으로 감성팔이가 아예 없는 것은 아닌데, 거의 없다. 우리 나라와 비교하면 이건 아예 없는 정도다. 구웃~!!!




5. 대기자 모습은 조금만?

   - 대기실 전체 모습은 거의 나오지도 않고, 직전 대기자 몇 명 있는 모습만 조금 나온다.

   - 그것도 다른 대기자와의 교류하는 모습은 거의 없고, 혼자 이상한??? 모습 정도만 나오고 만다.

   - 대기실 모습 보면서 다른 지원자들 모습 보는 재미도 있으면 좋은데...




6. 탈락자는 분량도 없네...

   - 우리 나라에서는 웃겼던 지원자도 나오고 말도 안되는 실력으로 웃음을 주는 지원자도 나오고 해서 재미있었는데...

   - 여기에서는 탈락자들은 거의 나오지 않는다. 몇 명 정도만 나오고 거의 합격자 위주로만 나온다.



7. 혼자살기?

   - 뒤로 가면서 우정을 다룰 수도 있겠지만, 지금까지 보면.... 지원자들간에 교류가 없다.

   - 지원자들간에 대화를 나누지를 않는다... 이거 뭐지?




뭐, 아직은 3회 분량밖에 보지 않아서 오해를 하고 있는 부분도 있을 것이고...

앞으로 조금 더 재미있게 지켜보면서 조금 더 분석을 해봐야겠다.


일본과의 관계 때문에 안좋은 이야기가 많은 것 같기도 한데... 그냥 뭐 예능은 예능으로 보면 되지 않나 싶다.

JYP 아저씨도 나름 뭔가 생각이 있겠지... ^^



마무리 짓기 전에 우리 귀여운 스즈노 미이히 ~~~ !!!




반응형


나이먹은 고리타분한 아저씨가 되어버린 나...

수학이 무서워서, 새로운 것 배우기가 무서워서 피해다녔는데...

결국은 AI/ML 공부를 할 수 밖에 없게 되어버렸다.


뭐 이제와서 내가 Modeler가 되거나 Data Engineer가 될 것은 아니지만

인프라쟁이이기에 최소한 MLOps 관련되어서는 알아야 하기에

기본적인 AI/ML 공부는 해야하는 상황에 놓여졌다.


항상 SW 공부할 때 나만의 환경에서 CLI 위주로 하는 스타일이었는데...

그래서 AI/ML 공부도 그렇게 해보려고 했는데,

결국은 Jupyter Notebook의 편리함을 이용하지 않을 수가 없었다.


Jupyter Notebook도 나의 환경에서 설치해서 해볼 수 있지만,

최근 GCP를 사용해볼 이유도 있어서

Colab 환경을 사용해보기로 마음 먹었다.


그러던 中 Kaggle 에서 제공해주는 데이터를 Colab에 넣어야할 상황이 벌어졌는데

Colab과 Kaggle을 바로 연결할 수 있는 방법이 있다고 해서

한 번 알아보았다.


1. Colab

    - 구글에서 무료로 제공해주는 훌륭한 머신러닝 개발환경이다.

    - 제공해주는 환경의 스펙이 아래와 같다고 한다. 와우~!! 대박~!!

        . CPU : 제온

        . Mem : 13GB

        . HDD : 320GB

        . GPU : NVidia Tesla K80

    - https://colab.research.google.com/



2. 준비

    - Colab 접속 후 아래와 같이 "파일 - 새 Python 3 노트"를 선택하자.




3. Kaggle 설치

    - "!"를 앞에 붙이면 시스템 명령어를 사용할 수 있다.

    - 타이핑 후 왼쪽의 화살표(?)를 클릭하면 실행된다.




4. Kaggle 인증키 다운로드

    - Colab에서 Kaggle 데이터를 가져오기 위해서는 접근할 수 있는 권한이 있어야 한다.

    - Kaggle 사이트에서 내 계정에 대한 인증키를 얻어보자.



    - "Edit Profile"을 클릭한 다음



    - "Create New API Token"을 클릭하면, "kaggle.json" 파일이 다운로드 된다.



5. 인증키 업로드

    - 다운로드 받은 인증키를 Colab에 업로드하자.



    - 윗 부분의 "+ 코드"를 선택하면 새로운 라인이 추가된다.

    - 아래 코드를 넣은 뒤 왼쪽 플레이 버튼을 누르면 "파일 선택" 버튼이 나온다.


from google.colab import files

files.upload()


    - "파일 선택"을 누른 뒤 아까 다운로드 받은 Kaggle 인증키 파일을 골라주면 위와 같이 나온다.



6. 인증키 복사하기

    - 업로드된 인증키를 정해진 곳에 넣어줘야 한다.

    - kaggle을 위한 디렉토리를 우선 만들어보자.


!ls -al

!mkdir -p ~/.kaggle

!ls -al ~/


    - 인증키를 복사한 뒤 속성 변경까지 해놓자

!cp kaggle.json ~/.kaggle/kaggle.json

!chmod 600 ~/.kaggle/kaggle.json

!ls -al ~/.kaggle/


    - 위와 같이 한 번에 여러 라인을 넣을 수도 있다.



7. Kaggle 데이터 목록

    - Kaggle 데이터 목록을 살펴볼 수 있다.



!kaggle competitions list



8. Kaggle 데이터 확인하기

    - Kaggle 사이트에서 Dataset을 보면 다운로드를 받을 수 있는 API를 확인할 수 있다.




9. Titanic 데이터 다운로드

    - Colab에 다운로드 받아보자.

    - 주의할 점은 시스템 실행을 위해서 항상 앞에 "!"를 붙여야 한다.



모두들 즐거운 머신러닝 생활~~~~!!!

반응형


최근 서버에 문제가 발생해서 ssh 접속을 하려고 했는데,

그만... 글쎄... 패스워드가 기억이 나지를 않는 것이다.


한창 서버 작업을 할 때에는 그냥 쉭쉭~ 입력해서 잘 사용했었는데...

1달 정도 지난 후에... 나의 머리와, 나의 손이 기억을 잊은 것이다.


그런데, 이러한 패스워드를 어디에 적어놓기에는 너무 찜찜해서... 뭔가 방법을 찾고 있던 와중에,

얼마 전에 어떤 밋업에 갔다가 알게된 재미있는 솔루션이 하나 있다 !!!



"pass"라는 이름의 오픈소스 프로젝트인데...

이름이 너무 평범하여 검색엔진으로 검색하기 너무 어렵다.

https://www.passwordstore.org/



0. 설치 환경

- 필자가 이후 과정을 진행한 환경은 다음과 같다.


$ lsb_release -a


No LSB modules are available.

Distributor ID: Ubuntu

Description:    Ubuntu 18.04.3 LTS

Release:        18.04

Codename:       bionic



1. 설치하기

- Ubuntu에서는 이미 패키지로 제공해주고 있었다.


$ sudo apt-get install pass


Reading package lists... Done

Building dependency tree

Reading state information... Done

The following additional packages will be installed:

  gnupg2 libice6 libqrencode3 libsm6 libxmu6 libxt6 qrencode tree x11-common xclip

Suggested packages:

  python libxml-simple-perl ruby

The following NEW packages will be installed:

  gnupg2 libice6 libqrencode3 libsm6 libxmu6 libxt6 pass qrencode tree x11-common xclip

0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded.

Need to get 428 kB of archives.

After this operation, 1,575 kB of additional disk space will be used.

Do you want to continue? [Y/n]



2. GPG Key 생성

- 암호화를 위해 사용될 GPG key를 생성해놓자


$ gpg --gen-key


gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.


Note: Use "gpg --full-generate-key" for a full featured key generation dialog.


GnuPG needs to construct a user ID to identify your key.


Real name: whatwant

Email address: whatwant@gmail.com

You selected this USER-ID:

    "whatwant <whatwant@gmail.com>"


Change (N)ame, (E)mail, or (O)kay/(Q)uit? O

We need to generate a lot of random bytes. It is a good idea to perform

some other action (type on the keyboard, move the mouse, utilize the

disks) during the prime generation; this gives the random number

generator a better chance to gain enough entropy.

We need to generate a lot of random bytes. It is a good idea to perform

some other action (type on the keyboard, move the mouse, utilize the

disks) during the prime generation; this gives the random number

generator a better chance to gain enough entropy.

gpg: /home/chani/.gnupg/trustdb.gpg: trustdb created

gpg: key 651Axxxx marked as ultimately trusted

gpg: directory '/home/chani/.gnupg/openpgp-revocs.d' created

gpg: revocation certificate stored as '/home/chani/.gnupg/openpgp-revocs.d/465Exxxx.rev'

public and secret key created and signed.


pub   rsa3072 2020-01-04 [SC] [expires: 2022-01-03]

      465Exxxx

uid                      whatwant <whatwant@gmail.com>

sub   rsa3072 2020-01-04 [E] [expires: 2022-01-03]



3. pass 초기화

- 위에서 입력했던 이메일 주소를 이용해서 초기화 하면 된다


$ pass init whatwant@gmail.com


mkdir: created directory '/home/chani/.password-store/'

Password store initialized for whatwant@gmail.com



4. git 설정

- 특이하게도 pass는 도구 차원에서 git을 지원한다.


$ pass git init


Initialized empty Git repository in /home/chani/.password-store/.git/

[master (root-commit) b3b0704] Add current contents of password store.

 1 file changed, 1 insertion(+)

 create mode 100644 .gpg-id

[master 6e3509f] Configure git repository for gpg file diff.

 1 file changed, 1 insertion(+)

 create mode 100644 .gitattributes


- 선택이긴하지만, 이왕이면 백업을 위해서라도 외부에 git repo를 하나 만들어 놓자.

- 그리고 그 git repo 주소를 등록해놓자.


$ pass git remote add origin git@github.com:whatwant/pass.git



5. password 입력하기

- 샘플로 하나 입력해보자


$ pass insert email/xxxx@naver.com


Enter password for email/xxxx@naver.com:

Retype password for email/xxxx@naver.com:

[master 4e6xxxx] Add given password for email/xxxx@naver.com to store.

 1 file changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 email/xxxx@naver.com.gpg


- commit도 같이 작성된 것을 볼 수 있다.



6. git 저장하기

- 원격 git 저장소에 보내보자


$ pass git push -u origin master


Counting objects: 10, done.

Delta compression using up to 2 threads.

Compressing objects: 100% (6/6), done.

Writing objects: 100% (10/10), 1.25 KiB | 426.00 KiB/s, done.

Total 10 (delta 1), reused 0 (delta 0)

remote: Resolving deltas: 100% (1/1), done.

To github.com:whatwant/pass.git

 * [new branch]      master -> master

Branch 'master' set up to track remote branch 'master' from 'origin'.



7. password 확인하기

- 입력된 password를 확인하고 싶은 경우

- 화면에 노출되는 것이 싫은 경우, 또는 다른 곳에 붙여넣기를 하고 싶은 경우에는 "-c" 옵션을 사용하면 된다고 하지만...

  CUI 환경에서는 안되는 것으로 보인다. (GUI 환경에서는 되는 듯)


$ pass

Password Store

└── email

    └── xxxx@naver.com


$ pass email/xxxx@naver.com

xxxxxxxx


$ pass -c email/xxxx@naver.com

Error: Can't open display: (null)

Error: Could not copy data to the clipboard



8. Reference

https://git.zx2c4.com/password-store/about/#SIMPLE%20EXAMPLES

https://boxnwhis.kr/2017/04/27/how_to_manage_passwords_for_your_team.html



여러 PC에서 사용하기 위해서는 GPG Key를 관리할 방법도 별도로 찾아야할 듯 하지만,

password를 관리할 재미있는 방법을 찾은 듯 하여서 재미있다.


반응형


머신러닝에 대해서 공부를 한다고 하면,

예전에는 (아직도) R 등과 같은 수학에 맞춰진 언어를 소개하기도 하지만 대부분은 Python을 추천한다.


사실은 Python이라는 언어 자체가 중요한 것이 아니라

머신러닝을 할 때 필요한 많은 기능(?)들을 제공해주는 라이브러리들이 중요한데

Pandas, Numpy 라이브러리가 워낙에 잘 되어 있어서 Python을 사용하라고 하는 것이다.

물론 Python이라는 언어 자체도 매력적이긴 하지만...



이에 대해서 공부를 하고자 하는 분들에게 드리는 좋은 정보~


Google에서 무려 한국어로 제공해주는 "머신러닝 단기집중과정" 온라인 강좌

https://developers.google.com/machine-learning/crash-course


그 중에서도 Pandas에 대해서 직접 실습해가며 배울 수 있는 정말 멋진 과정

- https://colab.research.google.com/notebooks/mlcc/intro_to_pandas.ipynb?utm_source=mlcc&utm_campaign=colab-external&utm_medium=referral&utm_content=pandas-colab&hl=ko



그런데, 위의 내용 말고도 좋은 강좌가 하나 더 있다.

머신러닝에 대해서 공부하다보면 누구나 알게 되는 Kaggle !!


 Kaggle에서도 Pandas에 대해서 친절한 강좌를 제공해준다.

https://www.kaggle.com/learn/pandas


4시간이면 끝낼 수 있단다~!! ^^ (필자는 멍청해서 4일은 걸릴듯... ㅠㅜ)




모두들 즐거운 머신러닝 공부시간 되세요~


반응형


솔직히 퀸덤을 보기 전까지 "(여자)아이들"이라는 걸그룹을 잘 몰랐다.


노래를 듣고는 '아! 이 노래!!' 했었는데...


퀸덤을 보면서 실력도 좋고, 매력이 있네~ 하던 중!!!





"싫다고 말해(Nightmare Ver.)"


정말 짱이다!!!



앞뒤 스토리까지 보고 싶은 분들은 아래 영상으로...






이런(nightmare) 컨셉 자체가 흔하지 않은데

이걸 너무나 열심히 그것도 잘 소화해버렸다.


걸그룹인데... 맨발로... 화장을 지워가며... 이런 댄스를...

거기에 중간 중간 연기를 보면 정말 소름 그 자체다!!!


이건 정말이지... 전국민이 봐야할 영상이다 !!!



사실.. 솔직히...

중간의 소연의 랩 부분이 조금 아쉬웠지만

약간 날 것 그대로의 발성도

나름의 컨셉일 수 있으니...



이 노래를 보고 듣고

(여자)아이들의 팬이 되기로 했다 !!!




정말 간만에 느낀 감동있었다!!!


14년도 불후의 명곡

알리(Ali) - 내 생애 단 한번만

이후로 이 정도의 감동은 정말이지...



가창력

연기력

퍼포먼스

몰입감

독창성

...


무조건 강추!!!


반응형


옛날 옛날 한 옛날에.... 잠시 궁금했던 git clone 옵션들... [ bare / mirror ]


한 번 테스트 해본다고 마음 먹은지 몇 년만에 갑자기 하고 싶다는 의욕이 불끈! ... 은 거짓말이고

회사 업무 中 [ bare / mirror ]  옵션의 차이에 대한 문의가 있었고

이에 대해서 한 번 살펴보고 싶어졌다!!!


0. clone

    - 일단 무조건 clone 해봤다.

$ git clone git@github.com:tensorflow/tensorflow.git ./tensorflow-normal

Cloning into './tensorflow-normal'...

remote: Enumerating objects: 3, done.

remote: Counting objects: 100% (3/3), done.

remote: Compressing objects: 100% (3/3), done.

remote: Total 796000 (delta 0), reused 3 (delta 0), pack-reused 795997

Receiving objects: 100% (796000/796000), 453.08 MiB | 8.29 MiB/s, done.

Resolving deltas: 100% (643770/643770), done.

Checking out files: 100% (19052/19052), done.


$ du -hs ./tensorflow-normal
690M    ./tensorflow-normal


$ git clone --no-checkout git@github.com:tensorflow/tensorflow.git ./tensorflow-no

Cloning into './tensorflow-no'...

remote: Enumerating objects: 3, done.

remote: Counting objects: 100% (3/3), done.

remote: Compressing objects: 100% (3/3), done.

remote: Total 796000 (delta 0), reused 3 (delta 0), pack-reused 795997

Receiving objects: 100% (796000/796000), 453.51 MiB | 8.85 MiB/s, done.

Resolving deltas: 100% (643732/643732), done.


$ du -hs ./tensorflow-no
475M    ./tensorflow-no


$ git clone --bare git@github.com:tensorflow/tensorflow.git ./tensorflow-bare

Cloning into bare repository './tensorflow-bare'...

remote: Enumerating objects: 3, done.

remote: Counting objects: 100% (3/3), done.

remote: Compressing objects: 100% (3/3), done.

remote: Total 796000 (delta 0), reused 3 (delta 0), pack-reused 795997

Receiving objects: 100% (796000/796000), 455.34 MiB | 8.28 MiB/s, done.

Resolving deltas: 100% (643815/643815), done.


$ du -hs ./tensorflow-bare
477M    ./tensorflow-bare


$ git clone --mirror git@github.com:tensorflow/tensorflow.git ./tensorflow-mirror

Cloning into bare repository './tensorflow-mirror'...

remote: Enumerating objects: 1124, done.

remote: Counting objects: 100% (1124/1124), done.

remote: Compressing objects: 100% (1116/1116), done.

remote: Total 1055983 (delta 805), reused 21 (delta 8), pack-reused 1054859

Receiving objects: 100% (1055983/1055983), 1.09 GiB | 8.69 MiB/s, done.

Resolving deltas: 100% (783532/783532), done.


$ du -hs ./tensorflow-mirror
1.2G    ./tensorflow-mirror



1. 정리

    - 위 내용을 표로 정리하면 아래와 같다.


구분 

 normal

 --no-checkout

--bare 

--mirror 

objects 

796,000 

796,000 

796,000 

1,055,983 

Receiving Size 

453.08 MiB 

453.51 MiB 

455.34 MiB 

1.09 GiB 

du Size 

690 M 

475 M 

477 M 

1.2 G 



2. 도식화

    - 위의 상황을 그림으로 설명해보면 아래와 같다.




3. 설명

    - normal

        . 당연히 commit 이력을 모두 담고 있고, 거기에다가 기본 branch로 설정된 소스코드가 working tree에 존재하게 된다.

    - no-checkout

        . commit 이력을 모두 담고 있고, 아직은 working tree에 소스코드를 넣어놓지는 않은 상태다.

    - bare

        . commit 이력만 담고 있다

    - mirror

        . 일반적인 commit 이력뿐만 아니라, 숨어있는(?) 모든 이력들을 담고 있다.


    # 적고나니 이게 뭔 설명인가 싶네.... ^^



4. 차이점 살펴보기

    - normal vs no-checkout

        . HEAD가 가리키는 기본 branch의 latest commit으로 checkout 했냐/안했냐의 차이만 있다.

        . no-checkout으로 clone 한 뒤에 "git checkout -b master"를 하면 결국 똑같다.


    - normal vs bare

        . bare 옵션으로 clone을 하는 것은 개발을 하고자 하는 용도가 아니다. 그러므로 working tree는 없다.

        . normal clone을 했을 때 ".git" 디렉토리 부분만 있는 것이 bare 옵션이기 때문이다.

$ diff ./tensorflow-bare/config ./tensorflow-normal/.git/config

4c4,5

<       bare = true

---

>       bare = false

>       logallrefupdates = true

6a8,11

>       fetch = +refs/heads/*:refs/remotes/origin/*

> [branch "master"]

>       remote = origin

>       merge = refs/heads/master

        . 위의 차이를 보면 알겠지만, bare 옵션으로 clone을 하게 되면 remote를 바라보지 않는다


    - bare vs mirror

        . mirror 옵션은 현재 서버에 기록된(?) 모든 사항을 전부 가져오게 된다.

$ nano ./tensorflow-mirror/packed-refs

# pack-refs with: peeled fully-peeled sorted

4be56f381cd000e91f79209aaf150636db6fb840 refs/heads/0.6.0

...

45e1e4598d3ebab316bf87df9160656f524af36c refs/heads/master

e1c85596366f3133c797f153dac34e01589a231f refs/pull/10000/head

c2d4f5e964503d17107123e51139aa8bbf27c57c refs/pull/10007/head

29d57e0360306de6bc9021eec4b633e96f3549f5 refs/pull/10008/head

ad9e6a95e53a4407db44e0436fc5318522e832cf refs/pull/10011/head

...

        . bare 옵션의 경우에는 "refs/heads/*" 항목만 보이지만,

        . mirror 옵션의 경우에는 "refs/pull/*" 항목도 보인다.

        . GitHub에서 Pull-Request를 할 때 사용되는 commit들이 기록되는 위치가 바로 "refs/pull/*" 이다.



위의 내용에 대해서 잘 생각해보고 용도에 맞춰서 잘 사용하기 바란다~


반응형

+ Recent posts