# 서울숲_T_Day07 리뷰 레포트 ### 참석자 - 이창권, 손상렬, 서보현 ## 1. 코드 동작 이해 - 가상머신 - 목적 : 다른 OS를 실행, 독립된 환경을 마련, 테스트를 위해서 환경 자체를 저장하고 다시 쓰거나 배포하는 등도 가능하다. - ssh를 설치 - ssh는 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 의미한다. - ssh로 접속 시 인증 방법에는 크게 2가지로, 공개키를 이용하거나 비밀번호를 이용하는 방식이 있다. - 쉘 스크립트에서 패스워드로 ssh접속하여 파일 복사하는 코드 ```script sshpass -p{Password} scp -o StrictHostKeyChecking=no {복사할 파일} {원격아이디}@{원격주소}:{복사될원격서버경로} ``` - 리눅스(Linux) - 하나의 컴퓨터를 여러 사람이 사용할 수 있는 멀티유저 운영체제이기 때문에 권한관리가 중요. - chmod 명령어를 통해 파일 권한을 변경할 수 있음 ```script chmod 764 backup ``` - 쉘 스크립트(shell script) - shell script이용 시, 서버에서 원하는 동작을 자동화할 수 있다. - 새로운 pc이용 시, 개발환경을 손수 구축해야 하지만 쉘 스크립트를 이용해 한번에 처리할 수 있다. - 예시 코드 ```script mkdir ./temp for file in $directory/* do if [ ${file: -3} == ".js" ] then cp $file ./temp/ fi done ``` - 쉘스크립트 cheatsheet : https://devhints.io/bash - 타입 스크립트(type script) - 자바스크립트의 태생적 문제를 극복하고자 AltJS(자바스크립트의 대체 언어)가 등장하였는데, 대체 언어들 중 가장 주목받고 있는 언어라고 할 수 있다. - 컴파일 언어, 정적 타입 언어 - 타입 기반 언어 1. 타입 스크립트 = 자바 스크립트 + 타입 2. 컴파일 단계에서 타입 오류를 잡아낼 수 있고, 코드 어시스트 기능도 지원받을 수 있음 3. 암묵적 형변환, 호이스팅, 복잡성 문제 해결 ```typescript var fruit = "apple"; { // javascript에서는 호이스팅 문제로 이와 같은 중복선언이 불가능했으나 typescript에서는 가능 let fruit:string = "banana"; console.log(fruit); } console.log(fruit); > banana > apple ``` ## 2. 코드 동작 개선 - 리눅스 역사와 유닉스와 차이를 학습한다. - 유닉스 - 유닉스(영어: Unix)는 교육 및 연구 기관에서 즐겨 사용되는 범용 다중 사용자 방식의 시분할 운영 체제이다. 1970년대 초반 벨 연구소 직원인 켄 톰슨, 데니스 리치 등이 처음 개발하였다. - 유닉스는 처음부터 다양한 시스템 사이에서 서로 이식할 수 있고, 멀티 태스킹과 다중 사용자를 지원하도록 설계되었다. - 서버에 '특화'된 운영체제로 보안성도 뛰어나며, 이식성, 유연성, 호환성, 가상메모리 등으로 세계적인 기업들이 유닉스 시스템으로 서버를 운영관리하게 됐다. - 리눅스 - 이런 유닉스의 장점을 그대로 차용하고 가격을 무료화한 유닉스-유사 시스템을 만들려는 시도가 있어오는 중에, 1991년 리누스 토발즈가 취미 삼아 개발한 커널, 리눅스가 등장했다. - 리눅스는 운영 체제이자 혹은 커널을 뜻하기도 한다. 리눅스는 자유 소프트웨어와 오픈 소스 개발의 가장 유명한 표본으로 들 수 있다. 리눅스는 다중 사용자, 다중 작업(멀티태스킹), 다중 스레드를 지원하는 네트워크 운영 체제(NOS)이다. - 벤더 독립성과 적은 개발비, 보안성과 안전성등으로 꾸준히 사랑받고 있다. 리눅스 재단에 따르면 퍼블릭 클라우드 워크로드의 90%, 세계 스마트폰의 82%, 임베디드 기기의 62%, 슈퍼 컴퓨터 시장의 99%가 리눅스로 작동한다. - 차이점 - 리눅스 - 무료(유료버전도 있다) - 커뮤니티에 의해 개발됐다. - 모바일폰, 태블릿 컴퓨터, 비디오콘솔, 슈퍼컴퓨터 등 다양한 하드웨어에 설치가 가능하다. - 유닉스 - 유료이며 판매 회사별로 가격이 다르다. - Solaris(Oracle), AIX(IBM), HP-UX가 큰 3개의 제조사이고, Apple의 OSX도 있다. - 인터넷서버, 워크스테이션과 PC들에 사용되고, 금융 인프라, 24x365 고가용 솔루션의 인프라 등에 사용되고 있다. ![unix and unix-like operating systems](https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Unix_history-simple.svg/1920px-Unix_history-simple.svg.png) - 참고 - https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4 - https://en.wikipedia.org/wiki/Unix - https://leeject.tistory.com/108 - 여러 가지 쉘 종류에 대해 학습한다. **쉘은 '줄'단위로 해석하여 명령을 수행한다. 프롬포트에서 명령을 읽을 때도, 스크립트 파일을 읽을 때도 한 줄씩 받아 읽는다.** 1. Bourne shell - 구조적 프로그램을 만들 수 있는 프로그램 언어를 내장했고, 특히 입/출력 제어에 강력하는 기능을 제공. 다만, 대화식 사용자 환경에는 매우 빈약하다. 모든 쉘의 토대가 되는 기본 원칙을 견고하게 다져놓음. 2. C shell - 대화식 사용자 환경을 강화하고 새로운 개념(job control, history, alias 등)을 도입. 네이밍에서 볼 수 있듯이 언어 구조가 C언어랑 매우 유사하기 때문에 C언어를 사용하는 사람은 이해하기가 쉽다. 3. TC shell - 새로운 기능(command line editing, spelling correction, login/logout watching 등)을 추가. 그러나 C shell을 표준으로 하여, 비표준 shell로 남아있다. &#35; Bourne shell vs. C shell ```shell #!/bin/sh if [ $days -gt 365 ] then echo This is over a year. fi #!/bin/csh if ( $days > 365 ) then echo This is over a year. endif ``` - 타입스크립트가 자바스크립트 다른 점에 대해 학습하고, ts 파일과 js 파일을 비교한다. - Typescript장점 - TypeScript 의 특징 중 컴파일시점의 타입 체크, 인터페이스, 클래스 기반의 디자인 패턴 등은 다른 언어 기반에서도 많은 개발자들에게 이미 익숙 - 대부분의 JavaScript 로 변환되는 언어들이 커뮤니티의 노력으로 운영되는 반면, TypeScript 는 공식적으로 Microsoft 의 지원을 받는다 - JavaScript 표준과 상호 호환이다. Typescript를 컴파일만 하면 Javascript파일로 만들 수 있으므로, 사용하고 싶은 기능만 사용도 가능하다. - Javascript장점 - 함수형 프로그래밍을 하기에 Typescript보다 좋다 - 견해 차이는 존재하지만, 생산성에 Javascript가 더 좋다는 해석도 존재한다. - Typescript는 d.ts에 따라 새로운 의존성이 생겨 npm의 장점을 희석시키지만, Javascript만 사용시 이러한 새로운 의존성은 없다. ## 3. Consideration - 셀 스크립트에 활용한 다양한 사례에 대해서 조사해보자. - linux의 cron과 조합하여 다양한 자동화 작업에 활용할 수 있다.(예시 : database화된 지인들의 생일 알림 메일 보내기) - 시스템을 감시하며 문제 발생시 자동 대처(예시 : 하드 디스크 사용량이 90%가 넘었을 때 자동으로 alert) - 원격 디바이스 제어 (예시 : 라즈베리 파이에서 ip 변경 감시 및 알림) - 외에도 시스템 환경 제어, 자동화, 어플리케이션 설치, 변경점 배포 등등 셀을 활용해서 할 수 있는 많은 작업들을 할 수 있다고 한다. - 참고 - http://emertxe.com/blog/2017/12/automation-using-shell-script.html - 타입스크립크를 왜 써야하는지 각자 나름의 이유를 찾아서 비교하고 정리한다. - 자바스크립트와는 달리 Type이 있어, 정확함을 보장할 수 있어 버그를 찾기 쉽게 만들어준다. - 컴파일 타임에 어느 부분이 잘못되었는지 알려주어 리팩토링 부분에서 정적 타이핑의 강점이 드러난다. - 타입스크립트는 자바스크립트의 확장이므로 '타입스크립트 <-> 자바스크립트'의 변환이 자유롭다. 이를 이용해 각 언어의 장점이나 특색을 살려서 사용할 수 있다. - 결론적으로 유지보수에 아주 뛰어난 장점을 가지고 있다. - babel 도구의 트랜스파일링 동작방식과, 실무에서 babel도구가 어떤목적으로 사용되는지 조사하자. - Babel은 ES6/ES7 코드를 ECMAScript5 코드로 transpiling 하기 위한 도구이다. - Babel은 다양한 작은 모듈들로 구성되어 있으며, 다양한 모듈을 담는 일종의 상자 역할을 하며 코드를 컴파일 하기 위해 작은 모듈들(ex. presets)을 사용한다. - babel의 트랜스 파일링 동작방식 1. 파싱(Parsing) : 소스코드를 가지고 추상적인 형태의 코드로 변환. 이 추상적인 형태의 코드를 추상구문트리(AST)라고 부른다. 2. 변환(Transformation) : 파싱된 추상구문트리를 받아와 각 브라우저의 환경에 맞는 결과로 변환. 이과정에서 preset/plugin이 처리된다. 3. 코드 생성(Generation) : 2단계에서 생성된 추상구문 트리를 바탕으로 실제 브라우저 환경에 맞는 소스코드로 변환하는 과정. 기술만하는 단계가 2단계라면 실제로 코드를 생성하는 단계가 3단계이다 <img src="https://k.kakaocdn.net/dn/cnn1K8/btqu2UQqFvm/iI4WS91ahe3W8kcOau5sv0/img.jpg" style="width:600px; height:400px"/> - ES6/ES7을 사용하면 생산성이 높아지는데, 아직 이를 지원하지 않는 브라우저들이 많이 존재한다. babel을 사용하여 생산성 높게 작업을 하되, 작업물들을 트랜스파일링하여 배포함으로서 다양한 브라우저들을 지원할 수 있게 처리한다.