- Command Line
- 버전 관리 시스템 & Git
- Koans 통한 개념 정리
Command Line 장점
빠르다, 강력하다, 접근성이 좋다
NIX(LINUX/UNIX)
서버 시장에서의 nix 점유율이 매우 높다
AWS 및 Azure 등에서 제공하는 서버는 대부분 nix 계열
오픈소스
Commands
ls
- 현재 디렉토리 내 파일 리스트 출력
cd
- 디렉토리 이동
~ 홈 디렉토리 ,
/ 루트 디렉토리 (시스템 최상위 디렉토리) ,
. 현재 디렉토리,
.. 부모디렉토리,
\ 폴더 내의 공백
pwd
- 현재 디렉토리 확인
clear
- 터미널 기록들 삭제
touch
- 빈 파일 생성
touch [ file_name ]
mkdir
- 디렉토리 생성
mkdir [ dir_name ]
mv
- 파일 및 디렉토리 옮기기
mv [ file_or_dir ][ target_dir ]
cat
- 텍스트 형태의 파일 확인
cat [ file_name ]
cp
- 복사
cp [ file ][ target_dir ]
cp -r [ folder ]
rm
- rm 명령어는 정말 삭제할 것인지 확인을 하지 않으며, 삭제된 파일은 바로 완전 삭제가 된다.
rm [ filename ]
rm -r [dirname]
chown
- 파일 소유권 변경
chown [ myuser:mygroup ][ filename ]
expolorer
- 현재 폴더를 windows 파일관리자에서 확인
open
- 현재 폴더를 macOS finder에서 보기
code
- 현재 폴더를 VS Code 에디터로 열기
참고: Command 옵션
sudo
관리자 권한으로 실행
가능한 한 최소 사용, user 권한으로 사용
한 번 인증하면 그 이후는 생략
sudo로 만든 파일은 루트 계정이 아니고선 다른 계정에선 수정할 수 없다
apt
우분투 install 시 사용하는 패키지 매니저
cli 프로그램
git / package manager / vim / aws cli
작성한 내용들을 보존해야 할 필요성으로 탄생
이전 버전 백업, 협업을 위한 도구
날짜 별 - 파일 별 코드 관리
커밋을 통한 스냅샷 저장. 변경사항을 한번에 파악하기 용이
가장 대중적인 버전 관리 시스템 - git
Distributed
Fork - 다른 유저의 레포지토리 전체를 복사해옴
Clone - 로컬 레포지토리로 원격 코드를 복제해옴
Push - 로컬 레포지토리 변경 사항 커밋을 원격 레포지토리로 반영 (업로드 개념)
Pull - 원격 레포지토리 변경 사항을 내 로컬 레포지토리에 반영. (병합, 다운로드 개념)
git pull upstream master
- fork 해온 메인테이너 레포지토리에서 바로 Pull 해올 경우 사용. (단 git 에서 upsteam 리모트 설정을 추가로 해줘야 가능하다 - git remote add upstream <URL>
git command
add , commit , push , fetch , checkout , merge
git fetch 와 pull 의 차이
pull
원격 저장소로부터 파일을 다운하고 병합한다.
fetch
원격 저장소로부터 파일을 다운한다.
fetch 를 사용하면 원래 내용과 바뀐 내용의 차이를 알 수 있다.
세부 내용 확인 후 병합(merge) 를 해야한다.
Staging Area
스테이지에 파일이 올라가면 커밋이 가능해진다.
커밋 - 스냅샷 저장.
커밋 메세지를 반드시 적어줘야한다. (변경 사항의 기록)
git commit -m "message"
협업을 할 때 변경 사항에 대해 바로 파악하는데 용이하고,
작업 기록 추적 가능.
Repository
작업 흐름을 한눈에 파악할 수 있다.
Branching and merging
Branching - 코드 분기
Merging - 분기된 코드 병합
브랜칭 예) master , develop(개발중) , feature ( 새로운 기능 추가할 때 )
브랜칭 머지 전략의 중요성
Data Assurance
유닛 테스트
expect()
assertion 함수 중 하나, 코드의 결과가 함 수 첫번째 인자와 match 되어야 함.
[ 개념 정리 ]
배열 복사 후, 복사된 배열의 값을 바꾸면 기존 배열도 변경된다.
배열 pop() , push(), unshift(), shift() 는 모두 immutable
이다.
pop은 마지막 요소를, 나머지는 삭제하거나 추가한 그 요소 자체를 반환한다.
상수 const
재할당 금지
const 로 선언해도 배열의 요소에 접근할 수 있다
상수 변수, 객체 를 선언해도 배열의 요소 및 객체 속성을 접근 , 추가 및 삭제 할 수 있다.
spread syntax
스프레드 문법으로 배열 및 객체를 이어 붙일 수 있다.
Function
함수 내에 선언된 let 변수도 return을 선언하면 밖에서 조회가 가능하다.
그러나 바깥의 변수에 덮어씌어지지는 않는다.
return 함수명(); 하면 실행된다.
클로저
파라미터 값이 1개만 요구할 때 여러개를 넣게 되면 앞 쪽 파라미터만 유효하다.
파라미터 값이 요구한 값보다 적게 들어오면 undefined를 반환한다
Array(num) 요소가 n개인 배열 생성
Array(num).join(keyword)
요소가 num개인 배열 사이사이 keyword를 넣는다. keyword는 num-1 번 반복
Date.prototype.getFullYear()
const moonLanding = new Date('July 20, 69 00:20:18');
console.log(moonLanding.getFullYear()); //1969
@@ 오늘은 Koans를 이용한 유닛테스트를 통해 기존에 학습한 변수, 상수, 객체, 배열, 함수와 파라미터, 클로저, 스코프 등에 대해 학습했다. 내일까지 이어질 이 Koans 활동은 Jasmine으로 이뤄진 테스트 코드가 통과될 수 있도록 코드를 고치는 일종의 퀴즈 형태의 활동을 말한다. 이미 여러번 암기하고 코플릿을 풀면서 분명 다 안다고 생각했지만, 나도 모르는 사각지대(?), 헷갈릴 수 있는 개념들을 문제화하여 풀다보니 너무 신기하고, 정말 잘 짜여진 문제라는 생각에 박수가 저절로 나왔다.
역시 그냥 달달 외우는 것보단 어떤 유형에 대해서 답을 고민해보고 코드를 찍어보고 해야 막연했던 개념도 머리에 들어오고, 내가 모르는 것이 뭔지 알 수 있게 되는 것 같다
(그런 것들만 아주 감쪽같이 모아놓은 코드스테이츠 문제들에 또 한번 놀랐다...._)
아직 클로저가 헷갈리고 개념이 잘 안잡혀서 디버깅 통해서 코드가 도는 과정을 계속 눈으로 확인했는데, 그래도 여전히 조금은 어렵게 느껴진다. 내일 레슨이 스코프와 클로저니까 강의를 들으며 꼼꼼히 이해하도록 노력해봐야겠다.