Language/Python

TIL-파이썬 기초 마무리,Linux/Terminal 입문, Git 입문(Python basic, Linux/Terminal basic, Git basic)

청렴결백한 만능 재주꾼 2020. 4. 28. 22:01
반응형

오늘 Python 기초 문법 마무리하려고 한다. Repl.it 수업 하나 남았다.

Exceptions

의도하지 않는 에러가 일어나는 경우를 예외 상황이라고 함.

short_list = [1,2,3]에서 4번째 요소를 indexing 하게 되면 IndexError가 발생함.  

처음부터 이러한 exception이 발생하지 않도록 코드를 구현하는 게 가장 좋겠지만, 현실적으로 항상 가능하진 않다.

Exception이 발생하면, 발생한 코드 위치에서 다음코드들이 실행되지 않고 곧바로 프로그램이 종료를 하게 됨.

Exception이 발생해도 프로세스가 종료되지 않고 다른 로직을 실행하게 한 후 프로그램을 계속 실행하게 할 수 있음.

이러한 것을 exception handling이라고 함.

 

 

 

간략하게 예시로 설명이 됨.

 

간략한 파이썬 마지막 문제


My answer is:

>>>def division(num1,num2):
>>>    x=0
>>>    try:
>>>        x = num1/num2
>>>        print("정상 작동1")
>>>    except ZeroDivisionError:
>>>        print("0으로 나눌 수가 없음")
>>>        x = -1
>>>    except Exception as e:
>>>        print(f"예기치 않은 오류가 발생했습니다.==>{e}")
>>>    else:
>>>        print("예외 상황이 발생하지 않았음")
>>>    finally:
>>>        print("정상 작동2")
        
>>>    return x 


임의로 print 값을 넣긴 했지만 과제에서 요구하는 것을 실행해서 한방에 통과되었다. 드디어 약 5일간의 파이썬 문법 대장정을 마친다. 

 


쟝고를 들어가기 전에 리눅스 터미널에 대해서 잠깐 공부를 한다. 이전에도 몇 번 포스팅을 하였지만 이어서 하는 것이다.

 

간략한 꿀팁

 

Basic Shell Command

계속해서 반복해서 포스팅되는 것 같지만 중요하니 다시 한번 적는다.

  • cd : Change directory
  • ls : list
  • mv : move
  • cp : copy
  • cat : concatenate(연결하다)
  • less : 파일내용 출력(표준 출력), 구조는 [ less [options] file_name]이고  여러 명령어를 쓸 수 있음.
  • tail : 지정된 데이터의 마지막 몇 줄을 보여줌.
  • nohup : HUP(Hangup) 신호를 무시하도록 만드는 명령어.
  • rm : remove , 덧붙여 사용 가능한 옵션[ -r : recursive , -i : interactive, -f : force , -v : verbose(장황하게)]
  • mkdir : make directory
  • clear : 화면을 깔끔하게 해 줌.
  • pwd : Print working directory
  • chown : of change owner
  • chmod : change mode
  • grep : Global regular expression print 주어진 keyword가 들어있는 것들을 찾아옴.
  • history : 이전에 사용한 명령어들 확인
  • ps : Process status 현재 프로세싱 중인 것 들을 보여줌.

 

Piping

  • |
    • Pipe이라고 한다. 위에서 아래로 내려가는 줄이 꼭 파이프 기둥처럼 생겨서 그렇게 이름이 붙어졌다.
    • Pipe는 일반적인 명령어가 아니라 2개의 명령어를 이어주는 역할을 한다.
    • command1 | command2
    • command1의 결괏값을command2의 input으로 넘겨준다.
    • 예를 들어, history 명령어는 이제까지 입력한 명령어들을 출력해주는 명령어다. history 만 실행하면 결괏값이 화면에 출력되지만| 를 사용해 grep 과 같이 사용하면 history가 출력하는 값들 중 원하는 값만 필터링을 할 수가 있다.
    • history | grep ls

||||||||||||||||||| 파이핑||

 

 

Man page

Manual page 란 뜻.

명령어를 어떻게 쓰는지 설명해 줌.

$man ls 라고 하면 읽기가 매우 힘들어 Too Long Didn't Read(tldr)을 설치한다.

 


Git & Github

Git은 VCS(Version Control System)이다. 소스코드의 버전을 같게 해 변경사항 내역을 관리하는 시스템. 

  • 코드 변경 사항 내역 기록 및 관리
  • 필요시 이전 상태로 rollback
  • 팀 단위 개발 시 체계적이고 효과적인 협업

 

버전 관리할 때 파일의 상태 3가지

- Committed : 수정 사항들이 git에 저장이 된 상태. 이러한 행위는 "commit"이라고 함.

- Modified : Modified file은 이름 그대로 수정된 file이나 committed가 되지 않은 상태.

- Staged : Staged file은 modified file에서 한 단계 더 나아가서 곧 commit 될 상태. modified와 committed의 중간 상태.

 

Basic git commands

git init

:프로젝트를 git repository로 만들기 위해서 사용하는 명령어

git add : 수정 사항들, 즉 modified 파일들을 staged 상태로 옮기고자 할 때 사용하는 명령어.

git commit : staged 된 파일들을 commit 하고자 할 때 사용하는 명령어입니다.

git diff : 어떤 수정 사항들이 적용됐는지 보고자 할 때 사용하는 명령어입니다.

git status : 현재 상태를 보여주는 명령어

git log : Commit 내역들을 보여줍니다. Commit history라고도 함.

git rm : 원하는 파일을 git repo에서 삭제함.

git mv : 원하는 파일을 git repo상에서 이동시킬 때 사용함. 주로 rename 할 때 사용함.

git branch : Branch를 생성할 때 사용됨.

git checkout : 어떤 branch를 checkout 할 때 사용됨.

 

사실 고친 것과 고치기 전에 것들을 계속 저장하고 가져가야 한다. 그렇게 해야지 프로그램에 문제가 생겼을 때 긴급하게 roll back이라도 가능할 수 있기 때문이다. 버전 관리하는 데이터베이스를 따로 빼어 귀찮지만 매번 save as 해서 새로 저장하면 버전 관리가 된다. 이렇게 하였을 때 내 컴퓨터에서 나 스스로 버전 관리를 할 수 있게 된다. 하지만 다른 사람과 협업을 할 때에 다른 사람에게 나만의 방식으로 버전 관리해 온 것들이 쉽게 읽히지 않을 것이다.

 

 

 

 

위의 방법을 보완을 하여 server에 저장을 한 뒤에 공유를 하고 일련의 룰을 통해 관리를 한다면 더 나을 것이다. Version database를 Central VCS Server에 저장해놓고 공유를 하는 그림이다. 수정사항 내역들과 meta 정보들은 전부 중앙 서버에서 관리하고 개발자는 각자 컴퓨터에 최신 버전의 코드들만 중앙 서버에서 다운로드 받아서 작업하는 방식이다. 하지만 해당 서버가 다운이 되면 큰일이 난다는 리스크를 가지고 있습니다.

 

 

또 위의 방법을 보완하여 만든 VCS 시스템이다. 쉽게 설명하면 지상 최대의 도서관이 있는데 거기에서 책들을 온라인에서 빌릴 수 있다. 그 책들을 읽다가 세월이 흘러 고쳐야 할 부분 업데이트해야 할 것들을 내가 코멘트를 적는다. 그리고 다시 반납한다. 약간 이런 식의 비유가 되는데 정확하게 비유하기가 힘들다고 생각 든다. 하여튼 Computer A 의 Version Database에서 버전 관리를 한 것을 Server Computer에 Push 하고 다른 버전 관리된 것(다른 사람이 했을 수도 있는 것)을 Pull 하여 또 하고, 하지만 여기서 도서관으로 비유가 힘든 것이 있다. 분명한 장점인데 똑같은 것을 여럿이서 Pull 하여 볼 수 있다. 각자가 코멘트한 것들이 다르게 저장이 된다. 이렇게 개발자에게 유용한 시스템을 리눅스 개발자가 만들었다니 대다나다증말.

 

 

 

 

 

Git에서 데이터(수정사항들)가 어떻게 저장될까?

Git은 데이터를 단순한 변경사항으로 저장하지 않는다. Git은 파일의 스냅숏을 연속으로 저장한다. 속도가 중요하기 때문에 파일이 달라지지 않았으면 이전 상태의 파일의 링크만 저장되어 있다. Snap샷을 시간순으로 저장하여 비교한 다음 변경사항을 보는 방식이다. 동시에 같은 repo를 snapshot을 받아 개발을 할 때에 문제가 생기는데 branch 란 개념으로 잡아준다.

 

Branch & Merging

Branch 나뭇가지 혹은 분점을 뜻한다. 기준이 되는 Snapshot을 Master branch라고 한다. 그리고 각 개발자는 master branch를 checkout먼저 하고, master branch로부터 자신만의 branch를 만듦. 이 과정을 feature branch라고 함.

Feature branch를 기반으로 개발은 한 후 개발이 완료가 되고 commit을 하면 자신의 feature branch를 다시 master branch로 합하면 됨.

합치는 과정을 merge라고 함.

1.  Master branch를 check out 한다.

2. 자신만의 feature branch를 만든다.

3. Feature branch에서 개발을 한다.

4. 완료되면 commit 한다.

5. Master branch에 feature branch를 merge 한다.

대략 이런 그림으로 설명이 되려나 몰겠지만

 

Github

위에서 말한 중앙 서버 역할을 하고 있다. 여러 가지 VCS가 있는데 깃헙이 제일 크다고 알고 있다. 

 

 


배우는 것을 다 정리해야 하는데... 이것저것 배우는 것들을 흡수하다 보니 정리하는 것도 힘들다. 미리 알아놓았으면 좋았을 것들이지만 이렇게 배울 때 배워야 머릿속에 들어오네.. 혼자 할 땐 그렇게 이해 안 되더니 

반응형