카일 스쿨 7회차

  • Hits
  • #0. 회복 탄력성
  • #1. Git

0. 회복 탄력성

  • 회복 탄력성이란?
    • resilience의 번역
    • 심리학, 정신의학, 간호학, 교육학, 유아교육, 사회학 등 다양한 분야에서 연구되는 개념
    • 다양한 역경, 시련, 실패에 대한 인식을 도약의 발판으로 삼아 더 높이 뛰어오르는 마음
    • 실패한 상황을 어떻게 인식하냐에 따라 달라진다는 개념
  • 회복 탄력성 지수
    • 자기조절력 = 감정조절력 + 충동통제력 + 원인분석력
    • 대인관계력 = 소통 + 공감 + 자아확장
    • 긍정력 = 자아낙관성 + 생활만족도 + 감사
  • 앞 부분은 교과서에서 나올 내용이고, 조금 더 현실적인 이야기
    • 인생에선 많은 역경과 고난이 옴
    • 많은 사람들이 실패와 성공을 반복함
    • 그럴 때 자신의 멘탈을 어떻게 지킬 수 있을지? 카일타임 때 많이 물어본 내용
  • 최근에 마음이 다친건 언제인가요?
    • 발표의 피드백이 좋지 않은 경우
    • 사람들이 내가 공유하는 글을 읽으면 좋은데 읽지 않는 경우
  • 이런 경우 힘들기도 하지만, 저는 원인을 분석합니다
    • 발표 피드백이 안좋아? 그럼 개선하자 ㅇㅋ
    • 공유하는 글 왜 안읽지? 그럼 더 읽게 어떻게 이야기해볼까? 근데 안읽으면 뭐 어쩔수 없지~
  • 핵심
    • 어떻든 나와 미리 약속! 빨리 되돌아올 수 있는 오뚜기같은 마음
    • 자존감, 번아웃과도 관련됨
  • 추가적으로
    • 운동하거나
    • 게임하거나(카트라이더)
    • 평소에 해보지 않은 것들을 하거나
    • 다양한 경험을 통해 내가 어떤 것을 좋아하는지 체크 => 그걸 하는것
    • 맛있는 음식 먹는 것도 좋음
    • 각자의 상황에 맞는 해결책이 있음
  • 자신을 잘 이해합시다. 그리고 나와 회복을 잘 하도록 약속합시다
    • 우리 인생은 처음이라, 다 낯설고 어렵잖아요
    • 어렵지만 그래도 계속 나아갑시다

1. Git

  • Git이란?
    • 언제 쓰는가?
      • 학교에서 팀플에서 많이 겪는 이야기
      • 내가 피피티 앞쪽 수정할게~
      • ㅇㅇㅋ
      • 근데 음성 파일 깨졌네?
      • 발표 오마이갓?
      • 이런 경우 개발에선 Git을 씀
    • 버전관리, 협업을 위한 용도
  • Git
    • 특정 시점에 체크인을 하고
    • 원하는 시점으로 순간이동! (체크아웃)
    • USB가 아닌 저장 공간만 있다면 가능!
    • 이거 다 만들었어~ 합치자
    • 어? 에러나는데 저번꺼로 가자!
  • Github란?
    • Git으로 관리하는 프로젝트를 올려둘 수 있는 곳
    • Github, Gitlab, Bitbucket 등
    • 공간의 제약 없이 협업 가능
    • 오픈소스도 대부분 Github나 Gitlab에서 진행
    • Microsoft가 인수하고 매우 좋아지는 중(기존 유료 플랜이 무료로 전환되는 등)
  • 정리하면
    • Git은 버전관리를 위한 도구
    • Github는 Git을 호스팅해주는 플랫폼
  • 1) Git 설치

      • brew로 설치하면 편함
      • brew가 없다면

          /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
      • brew 설치 후(있으면 바로)

        brew install git
    • 윈도우
  • 2) Git 초기 설정

    • 내 컴퓨터에서 수정한 후, github에 push하려면 github id, password를 계속 입력해야 함
    • 따라서 설정을 1번 해주면 편함

      git config --global user.name "kyle"
      git config --global user.email zzsza@naver.com
    • 만약 프로젝트마다 다른 email을 사용하고 싶으면 --global 인자를 제거하면 됨

    • git config --list로 설정을 확인할 수 있음
  • 3) Git에 SSH 공개키 등록
    • SSH란?
      • Secure Shell Protocol, 네트워크 프로토콜 중 하나
      • 컴퓨터끼리 서로 통신할 때, 보안적으로 안전하게 통신하려고 사용하는 프로토콜
      • Private Key와 Public Key가 있음
      • Private는 암호라고 생각하면 되고, 다른 사람에게 노출되면 안됨
      • SSH는 Private Key와 Public Key 쌍을 통해 컴퓨터와 인증함
      • Public Key를 통해 메세지를 암화하고, Private Key로 암호화된 메세지를 복호화함
      • SSH를 등록하면 유저 메일, 이메일을 물어보지 않고 사용 가능
  • 참고로 Github는 SSH, HTTPS 2가지가 있음
  • 우리는 ssh-key를 생성하고, Github에 Public Key를 저장할거임
  • 터미널에서 공개키 생성
      ssh-keygen
  • 엔터를 3번 눌러주면 공개키가 생성됨. passphrase를 설정해도 되는데, 저는 안하는 편
  • 이제 ~/.ssh/id_rsa.pub 키가 생김

    • 아래 명령어로 나오는 공개키를 복사

      cat ~/.ssh/id_rsa.pub
  • 이 키를 이제 Github - Settings - SSH and GPG Keys에 저장

Github에서 코드 올리는 흐름

  • 1) Github에서 Repository 생성
  • 2) Git clone해서 로컬에 저장
  • 3) 수정이 필요한 내용을 add => 이제 이 파일을 올릴 준비
  • 4) add한 파일들을 묶어서 한 덩어리로 commit하며 메세지 작성
  • 5) Github에 push
  • 6) 필요시 원하는 브랜치를 추가해서 이동 가능
  • 7) 과거 커밋으로도 이동 가능

Git 명령어

  • clone

    • 원격 저장소에 있는 파일을 내 로컬로 이동시킨다

      git clone https://github.com/zzsza/kyle-school.git
  • README.md를 수정해봅시다
  • add
    • Staging Area에 추가
    • git add README.md
  • commit
    • 변경 사항 최종 확인 겸 메세지 작성
    • 의미있는 단위로 쪼개서 메세지와 작성!
    • git commit -a를 쓰면 add를 생략하고 바로 커밋도 가능함
    • git commit -m"[modify] README"
  • status
    • Branch와 Stage를 출력
    • git status
  • log
    • 커밋 로그를 보여줌
    • git log
  • push
    • 원격 저장소에 Push
    • git push origin HEAD:master : 현재 branch의 HEAD Commit까지 변경을 origin라는 원격 저장소의 master branch에 push
    • git push
  • branch
    • git branch branchname
    • branchname을 생성함
    • git branch <닉네임>/github_test
  • checkout
    • git checkout branchname으로 브랜치에 들어감
    • 브랜치가 없는 경우, 생성하면서 체크아웃하고 싶으면 -b 조건을 붙이면 됨
    • git checkout <닉네임>/github_test
  • 다시 README를 수정하고 add - commit - push
  • Master와 <닉네임>/github_test의 차이 확인
  • Github에서 commit 로그 확인하기

Github 첫 실습 : repo 만들어서 master와 branch에 커밋하기

  • 자신의 repo 생성 : first-git이란 이름을 가지는 repo 생성
  • add, commit, push 진행
  • kyleschool branch 만들어서 push
  • 슬랙에 URL 제출
  • 파일의 Lifecycle
    • 일부러 이 내용을 말하지 않음
    • Working directory, Staging, Git Directory(repository)에 대해 알면 좋음(이건 모두 Local 환경 이야기)
    • Sourcetree 등에도 사용되는 단어
  • Commit : 커밋된 상태, 안전하게 저장된 상태로 remote(원격) 저장소로 이동할 준비
  • Modified : 수정한 파일을 아직 커밋하지 않은 상태
  • Staged : 수정한 파일을 곧 커밋할 것이라 표시한 상태(add 상태)
  • git Directory : 깃의 repo
  • working directory : 프로젝트의 특정 버전을 checkout
  • staging area : 곧 commit 할 것으로 예상되는 공간

    • 이 공간이 있는 이유는 여러 파일을 add하고 한번에 commit이 가능하도록 저장하는 임시 저장

협업하기

  • 협업할 땐 어떻게 사용할까?
    • 1) Repo를 Fork해서 push하고 PR => 해당 레포의 관리 권한이 없는 경우(주로 오픈소스)
    • 2) 자체 Repo에서 새로운 브랜치를 따서 push하고 PR => 해당 레포의 관리 권한이 있는 경우(회사에서 이렇게 진행)
  • 1) Fork하기
    • Github Repo에서 Fork 클릭
  • 2) Github Branch 전략(Git Flow)
    • git Flow 전략은 소프트웨어의 소스코드를 관리하고 출시(release)하기 위한 브랜치 관리 전략
    • 데이터쪽은 개발과 관련된 부분(모델 프러덕션) 제작시 활용할 수 있음. 노트북은 이렇게 진행하진 않음
  • pull
    • 원격 저장소에 저장된 최신 코드 받아오고 merge
    • 항상 브랜치 이동할 때 사용하는거 추천. commit 전에 pull할 것이 있는지?
    • git pull
  • fetch
    • 원격 저장소에 저장된 최신 코드 다운(단, merge는 따로 해야함)
    • 기존 내용과 바뀐 내용의 차이를 알 수 있음 : git diff HEAD origin/master
    • commit이 얼마나되었는지 확인 가능 : git log --decorate --all --oneline
    • merge하면 git pull가 상태가 같아짐 : git merge origin/master
    • git fetch
  • stash
    • 종종 하던 작업을 멈추고 다른 브랜치로 변경해야할 수 있음
    • 이 때 아직 완료하지 않은 일을 commit 하는 것은 좀..? 그냥 checkout 하려면 오류가 발생함
    • 아직 마무리하지 않은 작업을 잠시 stack에 저장하는 명령어
    • 아직 완료하지 않은 일을 commit하지 않고 다시 꺼내올 수 있음
    • git stash list로 stash 목록 확인 가능
    • git stash apply를 하면 최신 stash를 가져옴
    • git stash apply [stash 이름]을 사용하면 해당 stash를 적용함
  • pull reqeust
    • 왜 사용하는가?
    • Push 권한이 없는 오픈소스 프로젝트에 기여할 때
    • 코드 리뷰하기 위해 사용
    • Collaborator에 소속되면 그냥 저장소에 branch 따고 Push가 가능함
  • branch에 commit하고 repo에 들어오면 가능
  • Compare & pull request 클릭
  • 브랜치 지정 확인하고, 리뷰어랑 메세지 작성

협업 프로세스 실습

  • kyle-school repo의 오타 찾기
  • kyle-schoool Github Fork
  • 오타를 찾아서 commit push - PR 날려주세요!

Sourcetree

  • CLI 터미널에서 하는건 파일이 적으면 괜찮음
  • 하지만 수정할 파일이 많거나, 브랜치가 복잡하면? => 헷갈리고 어려움
  • GUI의 편리함
  • 링크에서 다운로드 후 설치
  • Registration에서 Bicbucket 클릭 후 소스트리 가입하고 로그인
  • Sourcetree - Preference - Accounts에서 계정 등록
  • 메인 화면
  • Git clone
    • Clone from URL
  • repo URL 입력 및 경로 설정
  • 혹은 터미널에서 먼저 git clone하고, 그 repo를 연동하기
    • Add Existing Local Repository - 폴더 선택 후 클릭
  • Sourcetree에서 commit
    • commit 버튼 클릭 - 체크박스에서 체크하고 commit(여기선 No staging이라 add가 없이 가능)
  • Split view staging을 누르면 staging 공간이 같이 보임(즉, add 부분)
  • push
    • commit 후 push 버튼 클릭
  • pull
    • pull 버튼 클릭
  • branch 생성
    • Branch 버튼 클릭하고 새로운 브랜치 이름 작성
  • 새로운 branch에서 커밋 - push
    • 그리고 다시 master branch 클릭
  • Branch History 보기
    • History 클릭하면 분기가 보임

Github Blog 만들기 실습

  • 카일 블로그 Fork
  • Settings - Repository name에 zzsza을 현재 계정명(여기선 socar-kyle)으로 변경 : socar-kyle.github.io
    • 단, 기존에 socar-kyle.github.io가 있으면 삭제하고 진행해야 함
  • 조금 기다리면 socar-kyle.github.io로 접근 가능
  • 현재 카일이 작성한 글이랑 테마가 저장됨 => 지워줍시다
  • _config.yml, _data, _featured_categories, _featured_tags, about.md 내용 수정
  • favicon.ico, tile-wide.png, tile.png 원하는 이미지로 설정