코드스테이츠_2주차_목

윤뿔소·2022년 9월 1일
0

CodeStates

목록 보기
9/47

개발자로서 갖춰야할 기본 기술들을 배워보자

CLI(Command-Line Interface)

I/O
우리는 컴퓨터를 보통 키보드와 마우스로 GUI를 조작해 사용한다. 마우스, 키보드로 조작하는 입력 소스(Input), 시각적(모니터), 청각적(스피커) 출력과 명령을 출력해 기계를 조작시키는 등의 출력 소스(Output)가 있음 줄여서 I/O

그런데 AWS 같은 클라우드 서비스의 서버들은 몇십개의 데이터 센터가 있고 그 안에 5만개의 컴퓨터가 있다. 여기에 하나하나 GUI를 적용해 I/O(모니터,마우스 등)을 부착하는게 사실상 불가능하기에 서버로 접속 요청을 해 CLI로 소통하게 됐다!

이제 CLI의 실행과 명령에 대해서 알아보자

CLI의 실행과 명령

  • 당연히 CLI는 터미널로 실행시켜 프롬프트(CLI의 명령줄 대기모드)에서 명령어를 입력한다!
  • 기본적으로 GUI와 CLI에서 실행시키는 것은 보이는 것의 차이일 뿐 어디서 파일을 만들고 쓰든 데이터를 가져오는 방식은 똑같다!

기본 명령어

pwd

print working directory, 현재 위치 확인 명령어

mkdir 이름

make directories, 새로운 폴더 생성

ls

  • list, 현재 위치에서 있는 파일과 폴더 리스트를 펼침
  • ls -a, ls -l, ls -al(la) 같이 옵션을 사용할 수 있음, a는 숨겨져있는 파일, 폴더를 볼 수 있고, l은 그 상세정보까지 알려줌

open .

현재 위치를 열어 내 GUI로 실행함, 우분투는 nautilus .

cd 경로

  • change directory, 현재 위치에서 다른 폴더로 위치 변경
  • pwd로 현재 위치 파악, ls로 폴더 파악, cd로 진입 이렇게 가능

touch 파일이름

파일(file)은 서류, 서류를 만진다라는 뜻으로 파일을 생성하는 명령어

cat 파일이름

파일 내용을 출력

rm 이름

  • remove, 파일 및 폴더 삭제
  • 폴더를 삭제하려면 -rf 옵션 사용 必
  • 옵션은 각각 recursive, force이다. 전자는 폴더를 지울때, 후자는 질문을 받지 않고 지울 때 사용!
  • 이렇게 파일 및 폴더를 제어할 명령어를 쓸 땐 ls를 자주 써주는 것이 좋다

mv 이름 도착폴더이름 or mv 이름 변경이름

  • move, 폴더 및 파일 위치와 이름 바꾸기 명령어
  • mv test.text User/ : 텍스트파일을 User폴더로
  • mv test.text Hi.text : 텍스트파일의 이름을 Hi로

cp 이름 복사될파일폴더의이름

  • copy, 파일 및 폴더를 복사
  • rm에서 사용되는 옵션이랑 동일(cp -rf buy hi)

⭐️sudo

  • 관리자(root) 권한을 획득하는 명령어, OS 관련 파일에는 주의해서 사용할 것
  • sudo mv ~ 처럼 보통 맨 앞에 써줌

경로

  • 보통 cd나 mv, cp같이 경로를 써줘야하는 명령어들한테 유용하다.
  • . 하나는 현재 폴더의 아래로 이동, .. 두개는 현재 폴더의 상위(이전) 폴더로 이동, 2개 이상 써줄 수 있음(../ ../: 2개 이상 상위 폴더로)
  • 예시:

NPM, NVM의 Node.js

자 이제 CLI하고 친해졌으니 CLI를 이용해 모듈과 패키지를 관리하고 사용하는 NPM과 노드를 사용해보자! 근데 나는 맥 세팅할 때 이미 다 깔아서 거의 안함

homebrew

  • 이거 너무 편하다. 맥 세팅할때 시간을 2배 이상 단축해준 고마운 친구. brew --help로 명령어를 알고 깔았던 프로그램들 업데이트도 해주자
  • 홈페이지 가서 원하는 프로그램 검색하면 설치 명령어를 알려줌! 홈페이지 가서 깔 필요가 없음!! 너무 꿀

node.js: nvm, npm

NVM

  • 설치: homebrew로 다 가능! 버전 설정도 따로 해주자(LTS)
  • nvm은 node.js의 버전들을 설치하고 과거에 작성했던 코드가 버전에 맞지 않는다면 버전을 쉽게 변경해 사용 가능
  • 실행: CLI 환경에서 node <file_name> 명령어를 입력하면 작성한 코드가 Node.js라는 런타임에서 실행

즉! JS는 브라우저에만 실행 가능했는데 Node.js를 통해 CLI 등 웹브라우저가 아닌 곳에도 실행이 가능해졌다@!!@

NPM

  • node.js 생태계의 패키지 매니저이자 일종의 앱스토어, 필요한 모듈들이 모여있고 다운받을 수 있음!
  • package.json : 패키지 관리를 할 수 있는 파일, npm 모듈을 활용하기 위해 해당 모듈에 대한 정보를 담은 파일, 즉, 프로젝트 전반에 관한 정보를 담고있음!
  • json파일에는 어떤 모듈이 들어가 있는지, 모듈을 실행시키는지, 테스트하는지 써있음, 실제 모듈 파일은 node_modules 폴더에 저장
  • 즉, 우리 프로젝트를 새 팀원에게 주기 위해 json파일과 코드를 전달하며 필요한 모듈은 그 팀원이 다운받게끔(npm install) 해서 효율적으로 협업이 가능해짐
  • "scripts" 부분은 npm run Key를 입력해 모듈을 실행시킴
  • dependency: 의존성, 그냥 모듈이라고 보면 됨 의존성 구역을 보면 "Key"는 모듈이름, Value는 버전이다.
  • devDependencies라는 것도 있는데 "개발만 할 때" 쓰이는 모듈이라는 뜻, 브라우저에 동작할 때 쓰지않는 모듈을 뜻한다. 설치할때 -D나 --save-dev 붙여서 설치함! --save는 생략 가능

과제

  • 이제 과제를 할거다! range 모듈을 불러와 짝수 생성기를 JS 파일에 만들어 node로 불러오는 작업을 할 것이다!
  • range 모듈을 사용했다, 이렇게 모듈들의 사이트가 있어서 사용법도 알 수 있다! 좋다!!
  • 객체에서 배울테지만 구조 분해 할당으로 더 쉽게 함수를 불러오는 모습이다.
// 모듈 불러오기, range 모듈은 객체데이터임
// 1. range(X, X ...), 객체의 구조분해 할당으로 range()만 써줘도 함수 적용 가능
const { range } = require("range");
// 2. range.range(x, x ...), 객체이므로 변수.함수로 불러오는 형태
// const range = require("range"); 

function getListMultiplesOfTwo(upTo) {
  // TODO
  return range(2, upTo + 1, 2);
}

module.exports = getListMultiplesOfTwo;

Git

  • 개발자의 코드를 효율적으로 관리하기 위해서 개발된 ‘분산형 버전 관리 시스템’

쓰는 이유

  • 여러 사람과 프로젝트를 만들다 보면 버전들이 스택처럼 쌓인다. 1.0.1, 1.0.2 ... 이렇게 말이다. 그런데 버전을 올렸는데 버그나 문제가 생겨 그 전 버전으로 되돌리고 싶을 때가 진짜 많다. 특히 대형 프로젝트면 수가 셀 수 없을 정도로 많아질 것이다. 그때마다 손수 복사해 백업을 해놓을 수가 없으니 여기서 나타나는 Git이 등장한다!
    1. 변경 이력 저장
    2. 변경 이력이 있어 되돌아갈 수 있음
    3. 누가 어떻게 수정, 추가, 삭제했는지 알 수 있음
    4. Git으로 간 파일은 Github같은 원격저장소를 이용해 백업, 협업에 용이

Commit

프로젝트가 특정 시점에 수정되면 변경 사항을 기록한 '스냅샷'이라는 백업 복사본이 생긴다. 이 것을 'Commit한다.'라고 한다.

GitHub

  • Git Repository를 관리할 수 있는 클라우드 기반 서비스 - Remote Repository
  • 깃헙을 통해 Git으로 관리된 폴더를 공유하고 접근할 수 있음 - 개발자의 SNS
  • 여러 오픈소스들도 GitHub을 통해 배포되고 관리됨
  • 용어
    1.Fork : 어떤 원격 저장소에서 내 원격 저장소로 가져오는 작업
    2.Clone : Fork해서 가져온 Repository를 내 로컬레포지토리(걍 컴터)로 가져옴
    3.Push : 소스 코드 변경 작업을 끝낸 뒤 내 레포지토리에, 가져온 원격 저장소에 다시 넣어 커밋하는 것, Pull request를 통해 반영 여부를 요청할 수 있다. 반대는 Pull
profile
코뿔소처럼 저돌적으로

0개의 댓글