[ KDT] 핀테크 서비스 프론트앤드 개발자 - TIL #1

Suhyxn·2022년 3월 29일
1

1주차 3/28 ~ 4/1


Linux 란?

  • 리누스 토발즈가 작성한 커널 혹은 GNU 프로젝트의 라이브러리와 도구가 포함된 운영체제
  • PC와 모바일, 서버, 임베디드 시스템 등 다양한 분야에서 활용
  • Redhat, Debian, Ubuntu, Android 등 다양한 배포판이 존재
  • 0.1 - bash(GNU Bourne Again SHell), gcc(UNIX 기반 C 컴파일러)

Before Linux

[ Unix ]

  • 1965년 데니스 리치, 켄 톰슨 외 x명이 AT&T Bell 연구소에서 PDP-7 기반 어셈블리어로 작성한 UNIX를 개발
  • 1973년 데니스 리치와 켄 톰슨이 C를 개발한 뒤, C 기반 UNIX 재작성
  • 1984년 리차드 스톨먼이 오픈 소프트웨어 자유성 확보를 위한 GNU 프로젝트 돌입
  • →GNU : G NU is N ot U nix ! Kernal 이 없다

Kernal 이란?

하드웨어와 응용프로그램을 이어주는 운영체제의 핵심 시스템소프트웨어

Shell 이란?

운영체제의 커널과 사용자를 이어주는 소프트웨어

  • sh(Bourne Shell) : AT&T Bell 연구소의 Steve Bourne이 작성한 유닉스 쉘
  • csh : 버클리의 Bill Joy가 작성한 유닉스 쉘
  • bash (Bourne Again Shell) : Brain Fox가 작성한 유닉스 쉘 다양한 운영체제에서 기본 쉘로 채택
  • zsh : Paul Falstad가 작성한 유닉스 쉘
  • sh : 확장형 쉘 ( 현재까지 가장 완벽한 쉘)

Shell Command

cd (change directory)
특정 디렉토리로 이동하고 싶을 때 사용

 
cd <가고자하는 디렉토리 경로>
cd 			 /* 사용자 디렉토리로 이동 */
cd / 			 /* root 디렉토리로 이동 */
cd ..			 /* 상위 디렉토리로 이동 */
cd Desktop/wecode  	/* Desktop 하위 wecode 디렉토리로 이동 */

ls (list)
현재 디렉토리에 속한 파일 및 디렉토리를 나열

ls 		/* 현재 디렉토리에 있는 내용들을 출력 */
ls -a	        /* 숨겨진 파일이나 디렉토리도 함께 보여줌 */
ls -l 		/* 자세한 내용 ( 권한, 소유자, 파일 크기 등 ) */
ls -al	        /* ls -a + ls -al 기능 */

mv (move)
디렉토리를 원하는 곳으로 옮기거나, 이름을 변경할 때 사용할 수 있는 명령어

mv <원본 디렉토리명> <옮기고 싶은 디렉토리명>	 /* 해당 디렉토리로 파일 이동 */
mv <원본 파일명> <바꾸고 싶은 파일명>           /* 원본 파일 이름 변경 */

cp (copy)
파일이나 디렉토리를 원하는 곳에 원하는 이름으로 복사

cp <원본 파일명> <옮기고 싶은 디렉토리명>                 /* 해당 디렉토리로 원본 파일 복사 */
cp <원본 파일명> <복사해서 만들고 싶은 파일명>             /* 해당 파일명으로 사본 파일 생성 */
cp <원본 파일명1> <원본 파일명2> <옮기고 싶은 디렉토리명>   /* 여러 파일을 한 번에 해당 디렉토리로 복사 */
cp <원본 디렉토리> -r <옮기고 싶은 디렉토리명>            /* 원본 디렉토리의 하위 파일까지 모두 해당 디렉토리로 복사 */

cat (concatenate)
두 개 이상의 파일을 연결해서 출력할 때 사용 (하나만 출력도 가능)

cat <파일명1> <파일명2> ...			/* 기본적인 사용방법. 두 개 이상의 파일을 연달아 출력함 */
cat -n <파일명1> <파일명2> ...			/* 출력결과 앞에 행을 붙여서 출력 */
cat <파일명1> <파일명2> ... > <새로운 파일명> 		/* ">" 앞에 있는 파일 내용을 합쳐 새로운 파일로 만들어줌 */
cat <파일명1> <파일명2> ... > <기존 파일명>   	/* ">" 앞에 있는 파일 내용을 합쳐 기존 파일에 덮어씌움 */
cat <파일명1> <파일명2> ... >> <기존 파일명>		/* ">>" 앞에 있는 파일 내용을 합쳐 기존 파일 뒤에 덧붙여줌 */

rm (remove)
파일과 디렉토리 삭제할 때 사용

rm <파일명>  			/* 해당 파일을 삭제 */
rm *.txt    			/* .txt로 끝나는 모든 파일을 삭제 */
rm *       		        /* 전체 파일 삭제 */
rm -r <파일명/디렉토리명>  		/* 해당 파일/디렉토리 삭제 */
rm -rf <파일명/디렉토리명> 		/* 해당 파일/디렉토리 강제 삭제(경고문구 없이 삭제) */

mkdir (make directory)
새로운 디렉토리를 만들 수 있는 명령어 + touch (유사한 touch는 파일을 생성할 때 사용)

mkdir은 "make directory"의 약자로 새로운 디렉토리를 만들 수 있는 명령어 입니다. 참고로 touch <파일명>으로는 새로운 파일을 만들 수 있습니다.

mkdir <새로운 디렉토리명> 	 /* 해당 경로에 새로운 디렉토리를 만들어줌 */

touch <새로운 파일명> / 해당 경로에 새로운 파일을 만들어줌 /

clear (ios cmd+k)
clear는 말 그대로 쉘 창에 있는 기록을 모두 지움

pwd (print working directory)
현재 작업 중인 디렉토리의 절대 경로를 반환

Vim command

insert mode: press i on normal mode
visual mode: press v on normal mode
command mode: press shift + ; on normal mode
#How to go back to normal mode
just press escape key



Git 이란?

  • 오픈 소스 버전 관리 시스템 (VCS: Version Control System)
  • 로컬에서 버전 관리 → 다른 개발자와 실시간으로 작업 공유 가능)
  • 소프트웨어 개발 및 소스 코드 관리에 사용

Github 란?

  • Git Repository를 위한 웹 기반 호스팅 서비스
  • 클라우드 서버를 사용해서 로컬에서 버전 관리한 소스코드를 업로드하여 공유 가능
  • 분산 버전 제어, 액세스 제어, 소스 코드 관리, 버그 추적, 기능 요청 및 작업 관리를 제공

Git & GitHub 의 차이

Git은 버전 관리 '프로그램'이고 Github는 버전 관리, 소스 코드 공유, 분산 버전 제어 등등이 가능한 원격 '저장소' 이다.

Before Git Start

git --version : Git 버전 확인
git 환경설정 :

$ git config --global user.name  /* 당신의유저네임 */
$ git config --global user.email /* 당신의메일주소 */
$ git config --global core.editor "vim"
$ git config --global core.pager "cat"

$ git config --list : 정상 설정 확인
   ( 수정이 필요할 경우, $ vi ~/.gitconfig 에서 수정 가능 )

GIT > REPO 를 생성하는 방법

1번째 ( Clone 사용 )

GitHub에서 Repo를 설정에 맞게 생성해 준다. (ex.TIL)

$ git clone <복사한 repo link>
'TIL'에 복제합니다...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
오브젝트를 받는 중: 100% (3/3), 완료.

2번째 ( Remote 사용 )

 ! git init 할 때 다른 디렉토리와 헷갈리지 않도록 꼭 주의

$ mkdir first-repo && cd first-repo
$ git init
$ git remote add origin https://github.com/{username}/{reponame}.git
$ touch README.md
$ git add README.md
$ git commit -m "docs: Create README.md"  /* -m 옵션은 사용 자제!*/
$ git push -u origin master /* -u : origin 이라는 원격저장소의 master 브랜치로 연결하여 origin이라는 원격저장소의 master 브랜치를 로컬 저장소의 master 브랜치로 merge 할수 있게 해주겠다는 의미 */

Push와 Commit (ex.README.md)

$ git add README.md
$ git commit
$ git push origin master

Commit 할 때 기억해야 할 것

  • commit은 동작 가능한 최소단위로 자주 할 것.
  • 해당 작업단위에 수행된 모든 파일 변화가 해당 commit에 포함되어야 함.
  • 모두가 이해할 수 있는 log를 작성할 것.
  • Open Source Contribution시 영어가 강제되지만, 그렇지 않을 경우 팀 내 사용 언어를 따라 쓸 것.
  • 제목은 축약하여 쓰되(50자 이내), 내용은 문장형으로 작성하여 추가설명 할 것.
  • 제목과 내용은 한 줄 띄워 분리할 것.
  • 내용은 이 commit의 구성과 의도를 충실히 작성할 것.

Commit Convention

  • 커밋 제목은 50자 이내로 요약하여 작성한다
  • prefix를 사용하여 한 눈에 커밋의 용도를 알기 쉽게 한다
feat (features) : 새로운 기능 추가
docs (documentations) : 문서 수정
conf (configurations) : 환경설정 관련
test : 테스트 코드, 리펙토링 테스트 코드 추가
fix: 버그 수정
refactor : 코드 리펙토링
ci (continous integration) : 기업 관련 사항 설정 수정
build : 빌드와 관련
perf (performance) : 성능 개선
style : 코드 변경이 없는 경우, 세미콜론 추가
chore : (코드의 수정 없이) 설정을 변경 또는 자잘한 수정

README.md란?

  • 프로젝트와 Repository를 설명하는 책의 표지와 같은 문서
  • 나와 동료, 이 repo의 사용자를 위한 문서
마크다운을 사용하여 작성한다. EX)
# Project Name
Abstract your project in few lines.
see [project sample page](project link)
## Documentation
### Installation
To install,
`$ pip install sesame`
and run `$ python open_sesame.py`
### Supported Python versions
`>=3.6`
### More Information
- [API docs]()
- [Official website]()
### Contributing
Please see [CONTRIBUTING.md]()
### License
Sesame is Free software, and may be redistributed under the terms of specified in the [LICENSE]() file.

.gitignore란?

  • gitignore 는 git이 파일을 추적할 때, 어떤 파일이나 폴더 등을 추적하지 않도록 명시하기 위해 작성하며, 해당 문서에 작성된 리스트는 수정사항이 발생해도 git이 무시한다. 특정 파일 확장자를 무시하거나 이름에 패턴이 존재하는 경우, 또는 특정 디렉토리 아래의 모 든 파일을 무시할 수 있다.
# 주석을 달기 위한 Hashtag
# MacOS Setup
.DS_Store
# Python cache files
.py[cdo]
# Important files
/Important
# AWS key
key.pem

*.java
*.py[cod]

LICENSE란?

오픈소스 사용 및 배포 시, 지켜야할 규칙

  • MIT License
    • MIT에서 만든 라이센스로, 모든 행동에 제약이 없으며, 저작권자는 소프트웨어와 관련한 책임에서 자유롭습니다.
  • Apache License 2.0
    • Apache 재단이 만든 라이센스로, 특허권 관련 내용이 포함되어 있습니다.
  • GNU General Public License v3.0
    • 가장 많이 알려져있으며, 의무사항(해당 라이센스가 적용된 소스코드 사용시 GPL 을 따라야 함)이 존재합니다.


My First Github Pages

github 저장소를 활용해 정적인 사이트 호스팅이 가능

 username .github.io 

Static Site Generator

  • Jekyll: Ruby 기반 정적인 블로그 생성기
    • 설치와 사용이 쉬움
    • 사용자가 많았음
  • Hugo: Golang 기반 정적인 블로그 생성기
    • 빠른 속도로 사이트를 생성
    • 사용자가 증가 중
  • Hexo: Node.js 기반 정적인 블로그 생성기
    • Node.js를 안다면 커스텀마이즈가 쉬움
    • 빠른 속도로 사용자가 증가 중

Branch란?

  • 분기점을 생성하여 독립적으로 코드를 변경할 수 있도록 도와주는 모델
$ git branch			/* 현재 있는 브렌치와 브렌치 목록 */
$ git branch <생성할 브렌치명>	/* 로컬에 새로운 브렌치를 생성 */
$ git switch <브렌치명>		/* 브렌치명으로 브렌치를 변경 */
$ git merge <브렌치명>		/* 브렌치명을 머지(병합) */
$ git branch -D <브렌치명>	/* 브렌치명을 브렌치에서 삭제 */

Branching Models

  • git flow
    (hotfix)- main -(release)- develop - feature
    • pros: 가장 많이 적용, 각 단계가 명확히 구분
    • cons: 복잡..

  • github flow
    master - feature
    • pros: 브랜치 모델 단순화, main 의 모든 커밋은 deployable
    • cons: CI 의존성 높음. 누구 하나라도 실수했다간..(pull request로 방지)

  • gitlab flow
     production - pre-production - master - feature 
    • pros: deploy, issue에 대한 대응이 가능하도록 보완
    • cons: git flow와 반대 ( main-develop, production-main )

Git flow Strategy

  • main : 제품으로 출시될 수 있는 브랜치
  • develop : 다음 출시 버전을 개발하는 브랜치
  • feature : 기능을 개발하는 브랜치
  • release : 이번 출시 버전을 준비하는 브랜치
  • hotfix : 출시 버전에서 발생한 버그를 수정 하는 브랜치

Fork / Pull Request / Merge

Fork: 어떤 Rpeo를 내 Repo로 복사

Pull Request: 내 Repo에서 수정한 내용을 원래의 Repo에 반영해 달라고 요청

Merge: 요청 받은 내용을 원래 Repo에 반영

Fork

GitHub Fork Button ->
$ git clone <포크한 나의 주소>
$ git flow init
$ git flow feature start <작업 이름>
작업 ing
$ git flow feature finish <작업 이름>
$ push -u origin develop <-u 는 최초시 추가>

Pull Request

GitHub Issues 
( 풀리퀘스트 버튼을 눌러도 되지만 되도록 이슈로 작성 기능 내용도 같이 적어 준다. ) ->

Merge

[내가 Pull Request를 받은 사람이다!]

$ git pull origin develop

[merge 된 코드를 받아야 되는 다른 사람이다!]
$ git remote add upstream (머지 된 주소)
$ git remote -v (버전 확인)

////////// 여기서 부터 2가지 방법 //////////

<1번째>
$ gitt fetch upstream develop -> 골라서 merge 가능
$ git merge fetch_head -> 골라서 merge 가능

<2번째>
Git pull upstream develop

GIT 되돌리기

! add, commit, push 할 때는 항상 신중하게 할 것

로컬에서 작업한 내용을 되돌릴 때

 $ git restore <파일명>
 add 취소
 $ git reset HEAD <파일명> 
 commit 취소
 $ git reset --soft HEAD^ <파일명>
 commit 간단한 수정
 $ git commit —amend 
 

0개의 댓글