WEEK 2-2. js 깊게 알기
Lesson. 개발자 도구 git 설치
0. intro - git 설치
- 터미널 열기: ctrl + alt + t
- git 설치: sudo apt install git
- 설치된 프로그램의 버전 확인: (프로그램명) ---version
-> CLI를 통해서 무언가를 설치하였다면 그 프로그램의 버전을 확인하여 설치 확인을 하는 것이 일반적
1. CLI (Command Line Interface)
(1) 정의: 표준 입출력 시스템(Standard I/O)을 통한 입력과 그에 따른 결과를 출력하는 형태
- 마우스와 각종 UI 컴포넌트 (Graphic User Interface, GUI)와 다르게
(2) 장점: 강력하다, 빠르다, 접근성이 좋다
- 각종 배치 작업들을 수월하게 진행
- 컴퓨터, 특히 Unix/Linux 시스템을 깊이 알기 위해 사용
- Unix/Linux는 서버 시장 점유율이 매우 높고
- 아마존 웹 서비스(AWS) 및 Azure등 클라우드 기반 서비스에서 제공하는 서버의 대부분이 *nix계열
- 오픈 소스이기 때문에 연습하기 좋음
2. 자주 사용되는 Linux CLI
(0) 용어 정리
- 주의 사항: 띄어쓰기, 대소문자
- 디렉토리: 폴더
- 루트:
- 콘솔창 초기화: clear
- 파일명 자동완성: [tab]
(1) 파일보기: ls
- 아무런 코드 없이 ls만 입력하면 홈 디렉토리의 파일을 조회
- 자세한 파일 보기: ls -al
-> 숨김 파일 및 파일 생성자 등의 정보를 알 수 있음
(2) 디렉토리로 이동: cd 파일명
-폴더 이름 뒤에 슬래시(/)가 붙어있는 경우, 이동 가능함을 의미 (e.x. cd Downloads)
1) 루트 디렉토리(시스템 최상위 디렉토리, 절대경로): cd /
2) 홈 디렉토리(현재 사용자의 개인화 된 파일들이 들어있는 디렉토리, 절대경로)로 이동: cd ~
3) 부모 디렉토리(상대 경로): cd ..
4) 현재 디렉토리(상대 경로): cd .
5) 현재 디렉토리 확인하기: pwd
-현재 디렉토리까지의 full path가 출력(e.x. /Users/steve/Downloads)
6) 파일 이름에 공백이 있을 경우 (e.x. codestates폴더의 My Document 파일을 탐색한다)
- ls 또는 ls -al로 파일을 탐색한 이후
- 자동 완성 이용이 가능: cd My까지 입력한 뒤 + [tab]키를 누르면 나머지 파일명이 자동 완성 됨 (cd My\ Documents)
- 또는 파일의 공백을 확실하게 입력: 역슬래시와 띄어쓰기 (\ )
(3) 파일 생성, 이동, 복사, 삭제
1) 빈 파일 생성: touch [file_name]
- 파일 이름에서 공백: 역슬래시와 띄어쓰기 [\ ]
- 또는 (_)를 이용
2) 디렉토리 생성: mkdir [dir_name]
3) 텍스트 형태의 파일 확인: cat [file_name]
- 파일 형식이 .txt이므로 cat file_name.txt
- 파일의 내용이 콘솔에 출력
4) 파일 및 디렉토리 옮기기: mv [file_or_dir][target_dir]
- 여기서 taget_dir: ~/디렉토리명/ (e.x. ~/Desktop/, ~/Downlods/)
5) 파일 및 디렉토리 이름 바꾸기: mv [file_or_dir][new_name]
6) 복사: cp
- cp [file][target_dir]
- cp -r [folder]
7) 삭제: rm
- 정말 삭제할 것인지 확인하지 않으며, 한번 삭제된 파일은 휴지통에 들어가지 않기 때문에 복구 불가!
- 파일 삭제: rm [file_name]
- 폴더 삭제: rm -r [dirname]
(4) 관리자 권한으로 실행: sudo
- Super User DO!: 최상위 유저의 명령이라는 뜻
- 관리자만 읽을 수 있는 파일 읽기: sudo cat /file_name.txt/- (e.x. sudo cat /file_name.txt/passwd)
- 새로운 프로그램 설치:sudo apt-get install 프로그램명 (e.x. sudo apt-get install tree)
-> 새로운 프로그램 설치 시, package manager를 이용하는 것이 보편적
- 주의 사항:
- sudo는 권한 문제를 해결하는 솔루션이 아니기 때문에 가능한 user권한으로 해결하고 필요에 따라 현명하게 사용해야 하낟
(5) 권한이란?
- 권한
ls -al의 상세내용
1.접근권한 (읽기, 쓰기, 실행가능) 여부
-chmod명령어
2.링크된 파일 갯수
3.소유자
4.소유그룹
5.파일크기
6.만든날짜
7.만든시간
8.파일/디렉토리 이름
- 여기서 파일 소유자가 User/root인지에 따라서 파일의 수정이 불가하는 경우가 발생
- 파일 소유권(소유자) 변경: sudo -chown owner: group file (e.x. sudo chown steve:staff testfile.txt)
(6)GUI 프로그램의 실행을 더 간편하게
- 현재 폴더를 VS code에디터로 열기: code .
(7)자주 사용하게 될 CLI 프로그램
- 버전 관리 시스템 git
- Package Manager(프로그램 추가, 삭제): ubuntu - apt
- 텍스트 에디터: vim
-> GUI를 사용할 수 없는 원격 서버에서 텍스트 파일 수정 작업을 하게 될 때
- 클라우드 서비스 관리 AWS CLI
Lesson. Git
0.git의 필요성
1) 버전 관리 시스템(Version Control System) : 프로그래밍에 있어서 일상적인 코드 수정의 과정에서 잘못된 부분을 고치고, 변경하다보면, 이전에 작성한 내용들을 보존이 필요하다.
(1) 수정된 내용을 저장함으로써
(2) 이전 버전과 현재 버전을 구분하여 저장
(3) 변경 사항이나 문제점 등에 대한 파악 가능
(4) 이 과정에서 파일을 배포를 통해 다른 사람과의 협업이 가능
(5) 파일 백업도 가능
2) git
-
개발자들의 Social Platform
-
각 프로젝트마다 개별적인 저장소(repository)를 이용해 저장 가능하며
-
저장소(repository)를 이용해 오픈 소스로 코드를 제공할 수 있어 여러 명의 협업이 가능
-
터미널에서 명령어를 통해 제어 가능
-
터미널에서 도움말 보기: git --help 또는 git 명령어 --help를 통해
3) git 명령어

(1) staging area
-
commit: 작업 과정 하나하나의 스냅샷을 찍어 기록하는 것과 비슷. 이 때의 -m은 작업에 대한 간략한 메시지 기록 (e.x. git commit -m "Add headline to index page")
-
repository: 코드 파일 그 자체 뿐만 아니라, commit을 포함하여 git을 통한 작업 과정의 모든 기록을 담는 저장소
-
branching and merging: 지사 분할(branching)과 병합 하기(merging)의 의미로 아래의 branch를 지사 분할(branching)과 병합(merging) 하여 좋은 코드를 만들기 위해 노력
-> master branch: 이용자들에게 제공되는 버그 없는 소스 코드
-> develop branch: 확인 중에 있는 소스코드(버그 확인, 기능 테스트 등)
-> feature branch: 기능을 개발한 소스코드
(2) distributed
-
fork: 코드 수정을 위해 다른 master의 remote저장소(repository)에 있는 코드 파일을 나의 remote 저장소로 해당 코드를 가져오는 것
-> 여기서 나의 remote라는 것은 내 개인의 것이 될 수도 있고, 다른 사람과 협업하여 관리자 권한을 함께 가지고 있는 공용 repository를 의미할 수도 있다
-
clone: 가져온 코드를 수정하기 위해 내 컴퓨터(local repository)에 복사(clone)
-
push: 컴퓨터(local repository)에서 수정된 파일의 변동 사항을 나의 remote저장소(repository)에 있는 파일에 적용 (e.x. git push orgin master)
-
pull: 나의 remote 저장소(repository)에 있는 파일을 내 컴퓨터(local repository)에 가져오기 (e.x. git pull orgin master)
-> 이 때, remote 저장소(repository)에 있던 파일의 변동사항도 반영되기 때문에 사실상 파일 합병에 가깝다 (업데이트의 개념과도 유사)
-> 최초에 파일을 fork해온 다른 master의 remote저장소(repository)에서 파일 끌어오기도 가능 (e.x. git pull upstream master)
-> git merge와 git fetch를 합친 것
(3) data assurance
- git add: 저장된 파일을 work flow에 올려놓는 일을 의미
1) pwd로 현재 작업 중인 파일이 맞는지 확인하고
2) add 명령어를 입력해 변경 사항을 추가한다 (e.x.git add 디렉토리명/파일명)
3) diff 명령어를 통해 변경 사항을 확인하는 것도 가능 (e.x. git diff)
-vs code 왼쪽, 위에서 3번째 카테고리를 눌러서도 확인 가능
4) status 명령어를 통해 add되었는지 확인 가능 (e.x. git status)
- git commit: 파일 수정에 대한 기록 남기기
1) commit -m 명령어를 이용해 간단한 기록과 함께 수정 내용에 대한 기록 가능 (e.x. git commit -m "메시지")
2) 커밋 내용 수정: git commit --amend
-> 수정하시고 ! wq입력하면 수정창에서 나오기 가능
- git push: 내 컴퓨터(local repository)에 있는 자료를 나의 remote repository에 업로드하기
1) git status를 통해 모든 파일이 commit되었는지 확인
2) git push 명령어를 이용해 remote repository로 업로드 (e.x. git push origin master)
Socrative Scope & Closure
-
scope문제 풀이 3단계

(1) local/global 스코프 나누기
(2) 선언된 변수 찾고 local/global 변수인지 명시
(3) 선언되지 않은 변수가 가리키는 대상 찾기 (안에서 밖으로)
-
함수의 인자로 전달된 x는 local 변수
-
set 함수 스코프 내에서 x라는 ‘이름은 같지만’ 값은 다르게 할당 할 수 있다

- function strageAdd(x) // 결과적으로 add(5) + add(5)가 되는데
- 이 때, add(5)를 통해서 add(y)의 y가 parameter 5를 전달 받고, add(y)의 x는 이전에 선언된 global변수 (let x = 10)를 받는다
- 따라서 let result의 값은 30

- 이렇게 중첩된 scope에서는 안에서부터 바깥으로 순차적인 체이닝이 일어난다는 점에 주의해야 한다

- Scope에 해당하는 변수가 어디서 오는지 확인하여 return값 등에 의해 어떻게 변하는지를 확인

- outer() // Nan
- result = x // 20
-
closure : 외부 함수의 컨텍스트(변수)에 접근하 수 있는 내부 함수


- 클로저 함수의 정의:함수와 함수가 선언된 어휘적 환경의 조합으로 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다
- 클로저 함수의 특징: 외부함수에 접근할 수 있는 내부 함수
- 13번 예제를 통해 알아보기
(+) 대외비에 해당하는 코드이거나 외부의 접근을 제한하기 위해 클로저 함수를 사용
(+) sum() 자체를 타이핑할 일이 없기 때문에 외부로부터 숨겨진다고 이해하면 되는 걸까요?
(+) 