기본 콘텐츠로 건너뛰기

[Book] 프로그래밍 언어도감 - 스크립트 언어

[Book] 프로그래밍 언어도감 - 스크립트 언어

목차: 스크립트 언어

JavaScript

ActionScript

CoffeeScript

Dart

TypeScript

Perl

Python

Ruby

PHP

JavaScript 🔥

탄생 : 1995년

주요 용도 : 웹 브라우저

분류 : 절차형 객체지향형/인터프리터

✎ DHTML & Ajax : DHTML(Dynamic HTML, 동적 HTML)에 의해서 동적으로 페이지를 변화시킬 수 있다. 또한 Ajax 비동기 방식으로 페이지 전환 없이 새로운 콘텐츠를 표현할 수 있다. (실제 사례: Google Maps JavaScript API)

✎ 프로토타입 기반 : JavaScript는 객체지향 언어이지만 클래스 기반이 아니라 프로토타입 기반이다. 기존 객체를 복제하여 새로운 객체를 생성한다. (더 알아보기: JavaScript 프로토타입 이해하기)

✎ JSON : JavaScript Object Notation. 텍스트 기반의 데이터 구조로 eval 함수로 평가해서 JavaScript 객체로 변환할 수 있다. XML 대신에 사용되는 경우가 많고, 많은 언어에서 지원하고 있다.

✎ 다양한 프레임워크 : jQuery, AngularJS, PrototypeJS 등이 있다. 서버 측에서 실행하는 Node.js도 있다.

✎ AltJS : JavaScript 대신 사용되는 환경. 예를 들어, TypeScript, Haxe, Dart, CoffeeScript 등이 있다.

✎ ECMAScript : JavaScript 표준화 사양. 각 브라우저마다 동일한 사양으로 통일하기 위함. JavaScript 컴파일러인 Babel 툴도 있다.

1999년 - ECMAScript 3

2009년 - ECMAScript 5

2015년 - ECMAScript 2015 (ES6)

2016년 - ECMAScript 2016 (ES7)

2017년 - ECMAScript 2017 (ES8)

2018년 - ECMAScript 2018 (ES9)

2019년 - ECMAScript 2019 (ES10)

ActionScript

탄생 : 2000년 (Adode Systems)

주요 용도 : 플래시 앱

분류 : 절차형 객체지향형/컴파일러

✎ 뛰어난 멀티미디어 : Adobe Flash에서 사용되는 멀티미디어용 스크립트 언어로, 음성이나 영상 같은 애니메이션을 사용한 콘텐츠 제작에 적합하다.

✎ 환경에 의존하지 않음 : Flash를 사용하면 웹 브라우저에서 동적인 콘텐츠를 동일하게 재생할 수 있다.

✎ 사용률이 줄고 있음 : 웹 브라우저에서 Plugin을 실행해야 하는 단점 대문에 사용이 점점 줄어들고 있다.

CoffeeScript

탄생 : 2009년

주요 용도 : 웹 브라우저

분류 : 절차형 함수형/트랜스파일러

✎ 적은 코드 양 : JavaScript보다 코드량이 적고 읽기 쉬운 코드이다. JavaScript 프로토타입 기반의 객체지향을 의식하지 않고 사용할 수 있다.

✎ 들여 쓰기 중요 : 블록을 표현할 때 Python처럼 들여 쓰기(인덴트)를 사용한다. 끝에 세미클론을 사용할 필요가 없다.

✎ Ruby on Rails에서 도입이 쉬움 : RoR에서는 'Asset Pipeline' 구조가 있어 CoffeeScript의 소스코드를 배치하는 것만으로 동적 컴파일을 할 수 있다.

✎ Backbone.js나 Underscore.js를 만든 개발자 : Backbone.js는 SPA 용의 가벼운 프레임워크, Underscore.js는 JavsScript 라이브러리이다. 둘 다 CoffeeScript 개발자인 Jeremy Ashkenas이 개발하였다.

✎ 소스 맵: 소스코드를 변환하면 디버그 시 어떤 부분에서 문제가 발생하고 있는지 찾기 어려운 때가 있다. CoffeeScript에서는 소스로 원래 소스코드를 디버거로 표시할 수 있다.

✎ js2coffee : CoffeeScript는 JavaScript로 변환해서 사용한다. js2coffee를 사용하면 JavaScript에서 CoffeeScript로 역변환이 가능하다.

Dart

탄생 : 2011년 (Google)

주요 용도 : 웹 브라우저, 웹앱, 모바일 앱

분류 : 객체지향형/인터프리터 트랜스파일러

✎ JavaScript와 공존 : JavaScript와 대체가 아닌 적재적소에 함께 공존하는 것을 지향하는 언어이다. (실제 사례: Google AdSense, AdWords, Elections, Shopping Express)

✎ 모바일 앱도 개발 가능 : Flutter 프레임워크를 사용해서 Android, iOS를 지원하는 크로스 플랫폼 모바일 앱을 개발할 수 있다.

✎ JavaScript로 변환 : DDC(Dart Dev Complier)는 Dart로 만든 소스코드를 JavaScript로 변환한다.

✎ 2개의 실행 모드 : 프로덕션 모드, 체크 모드가 있다. 개발할 때는 체크 모드로 자료형 체크 등을 할 수 있고, 릴리스 할 때는 프로덕션 모드로 빠르게 처리할 수 있다.

✎ DartPad : 웹 브라우저에서 Dart을 실행 테스트할 수 있는 개발환경

✎ Pub 패키지 매니저 : Dart에서 사용할 수 있는 풍부한 패키지를 관리할 수 있다. YAML 파일에서 설정을 기술하고, 커맨드 라인에서 설치 및 업데이트할 수 있다.

TypeScript 🔥

탄생 : 2012년 (Microsoft)

주요 용도 : 웹 브라우저

분류 : 절차형 함수형 객체지향형/트랜스파일러

✎ 정적 타이핑 : JavaScript, 다른 AltJS는 동적 타이핑 언어이지만, TypeScript는 정적 타이핑 언어이다. 의도하지 않은 값이 저장되는지 실행 전에 검사할 수 있다. 대규모 프로젝트에 적합하다.

✎ IDE 사용 가능 : Microsoft이 개발해서 Visual Studio를 사용할 수 있다.

✎ 변환이 쉽다 : JavaScript 소스코드는 그대로 TypeScript의 소스코드로 사용할 수 있기 때문에, 기존 소스코드를 일단 그대로 살려 변수 자료형을 추가할 수도 있다.

✎ Haxe와의 비교 : Hexe도 JavaScript 뿐만 아니라 Java, C#, PHP, Python 등으로 변환할 수 있다. 다만 현실적으로는 JavaScript로 변환해서 사용하는 경우가 많아 TypeScript 쪽이 압도적으로 인기가 높다.

✎ 모듈 : 클래스를 그룹으로 나누어 관리할 수 있기 때문에, 대규모 개발에 유리하다. CommonJS 형식이나 AMD(Asynchronous Module Definition) 형식의 모듈을 지원한다.

✎ AngularJS 2.0 : 프론트엔드 웹 애플리케이션 프레임워크(오픈소스). JavaScript로 작성되었으며, 버전 2부터 TypeScript가 권장되고 있다.

✎ Playground : 온라인으로 JavaScript로 변환 내용을 확인하면서 프로그램을 수정할 수 있다. (바로가기: http://www.typescriptlang.org/play/)

Perl

탄생 : 1987년

주요 용도 : 웹앱

분류 : 절차형 함수형 객체지향형/인터프리터

✎ CGI 시대의 대표 : 인터넷이 보급되기 시작한 1990년대는 정적 웹 페이지가 많았지만, 그중에서 동적 웹 페이지를 표시하는 방법으로 CGI가 많이 사용되었다. 특히 Perl은 압도적으로 인기가 많았다.

✎ 문자열 처리가 장점 : sed, awk 프로그래밍 언어의 특징을 도입해서 문자열 처리가 장점이다. 정규 표현식이 폭넓게 사용되는 계기가 된 언어라고 할 수 있다.

✎ 정규표현식 : 문자열의 패턴 매치를 할 수 있는 표현 방법 (더 알아보기: 정규표현식 POSIX)

✎ 하위 호환성 확보 : Perl 버전이 바뀌어도 이전 버전에서 사용하던 기능을 그대로 사용할 수 있다. 다만 Perl 6은 Perl 5까지와는 다른 언어로 간주되고 있을 정도로 크게 변경되었다. (더 알아보기: 하위 호환성)

✎ 아쉬운 가독성 : 스크립트 언어로는 빠른 편이지만, 소스코드 가독성 면에서는 상대적으로 어려워서 Python, Ruby 언어에 점유율을 빼앗겼다.

Python 🔥

탄생 : 1991년

주요 용도 : 웹앱 데이터 분석, AI

분류 : 절차형 함수형 객체지향형/인터프리터

✎ 데이터 사이언티스트 : 웹앱, 인공지능, 데이터 분석에 장점을 가진 스크립트 언어. 버전 2.x와 3.x는 일부 호환이 되지 않지만, 두 버전 모두 이용자가 많다.

✎ 들여 쓰기 중요 : 블록을 표현할 때 Python처럼 들여 쓰기(인덴트)를 사용한다. "코드는 쓰는 것보다 읽는 것이 더 많다"라는 의미에서 PEP 8 코딩 가이드도 제공된다.

✎ 다양한 구현 : 원래의 처리계인 'CPython' 말고도 'Jython', 'PyPy', 'Cython', 'IronPython' 등 다양한 구현이 있다.

✎ 다양한 통계 라이브러리 : 데이터 분석과 기계학습에 사용할 수 있는 라이브러리가 많다. 특히 'NumPy', 'Pandas', 'matplotlib'이 유명하다.

✎ pip : Python 패키지 관리 시스템. 최신 Python이 기본으로 제공되어 검색, 설치, 업데이트가 가능하다. GitHub에서 설치 가능하다.

✎ 리스트 컴프리헨션 : 컴프리헨션은 더 파이써닉하게 파이썬을 사용한다는 것을 의미한다. 리스트 컴프리헨션은 대괄호 안에 for 구문을 사용하여 리스트를 초기화 함으로써 컴프리헨션 기능을 수행할 수 있다.

✎ Django : Python으로 작성된 사용되는 오픈소스 웹 애플리케이션 프레임워크. Instagram, Pinterest 등 개발에도 사용되고 있다. (실제 사례: Django로 구축된 10개의 인기 웹 사이트)

Ruby

탄생 : 1995년

주요 용도 : 웹앱, 교육

분류 : 절차형 함수형 객체지향형/인터프리터

✎ 즐기기 위해 : 즐기기 위한 목적으로 개발된 프로그래밍 언어.

✎ 모든 것이 객체 : 객체지향 언어라도 다른 언어는 대부분 정수 같은 원시적인 형태는 객체가 아닌데 반해, Ruby는 Smalltalk와 같은 객체지향 언어이다.

✎ DSL로 이용이 많다 : DSL(도메인 특화 언어)은 특정 작업을 위해 설계된 언어이다. Ruby는 내부 DSL에 적합하다고 해서 Chef와 Vagrant 등 다양한 프로그램 설정 파일에 사용되고 있다.

✎ Ruby on Rails : 웹 애플리케이션 프레임워크. '설정보다 규약' (CoC: Convention over Configuration)이라는 말이 있을 정도로 수동으로 해야 하는 설정이 적다.

✎ gem : Ruby 패키지 관리 시스템인 'RubyGems'에서 사용되는 라이브러리. gem 커맨드로 패키지 빌드와 설치가 가능하다.

✎ YARV : Yet Another Ruby VM. Ruby를 빠르게 실행하기 위한 처리계로 개발되었고, Ruby 1.9 이후는 Ruby 본체에 내장되어 있다.

PHP

탄생 : 1995년

주요 용도 : 웹앱

분류 : 절차형 객체지향형/인터프리터

✎ 다양한 프레임워크 : CakePHP, Zend Framework, Symfony, Laravel, CodeIgniter 등 다양한 프레임워크가 있다.

✎ 취약성이 남는 경우도 : 초보자도 개발하기 쉬운 언어라서 보안을 의식하지 않고 만들어진 프로그램도 있기 때문에, 취약점이 남아있는 프로그램이 많은 것으로 알려져 있다.

✎ 렌털 서버에서 이용하기 쉽다 : 대부분의 렌털 서버에는 사전에 PHP가 도입되어 있어서 상대적으로 환경을 구축하는 번거로움이 적고 바로 사용을 시작할 수 있다.

✎ LAMP : Linux, Apache, MySQL, PHP의 약자. 동적 웹 사이트를 구축할 때 적합한 오픈 소프트웨어의 조합으로 자주 사용된다.

✎ WordPress : PHP로 개발된 블로그용 소프트웨어. 블로그 말고도 업데이트가 쉬운 웹사이트 구축에도 사용된다.

✎ Hack : Facebook이 개발한 PHP와 호환성이 있는 언어. PHP를 더 빨리 실행하는 것을 목표로 개발되고 있으며, 그 처리 속도로 주목을 받고 있다.

from http://devpad.tistory.com/30 by ccl(A) rewrite - 2020-03-07 08:21:38

댓글

이 블로그의 인기 게시물

PHP framework 종류

PHP framework 종류 분류 전체보기 (1461) API (0) Android (19) Common (11) Component (0) adb (2) DDMS (1) GCM (4) HTTP (0) sqlite (1) View (0) build (0) Bigdata (4) Common (1) Hadoop (2) Spark (0) SQL on Hadoop (1) Cloud (12) Common (8) Multitenancy (2) OpenStack (0) UCloud (2) Computer Science (24) Common (4) Asynchronous IO (1) Cache (6) Distributed (0) Message Queue (1) Parallel Computing (5) Software Engineering (7) DB (172) Common (32) HSQLDB (1) In-memory DB (0) MariaDB (2) MongoDB (30) MySQL (69) NoSQL (8) Oracle (17) ORM (6) Redis (1) SQL Server (6) Design Pattern (7) Common (7) Programming paradigms (0) Reactor (0) Development (459) Common (37) AngularJS (3) Bootstrap (3) C (22) C++ (0) CSS (32) HTML (31) HTML5 (2) Java (118) JavaEssential (25) JSP & Servlet (33) JavaScript (69) jQuery (26) jQuery Mobile (4) Linux Programming (3) python (3) PHP (21) Reactive Streams (0) ShellScript (5) UML (6) Windows Programming (2) XML (14) Framework & Platform (161) Common (8) EFL (1) mybati

MariaDB 에서 access denied for user 'root' 문제

MariaDB 에서 access denied for user 'root' 문제 heidisql 등의 원격 접속 툴을 이용해도 접속이 안 됐다. 포트, 방화벽 설정 등등 모두 확인해 봤고 로컬에서 잘 돌아가는 데도 원격 접속이 안됐다. 사실 원격 접속만 안 되면 상관 없는데, codeigniter에서도 똑같이 로그인을 못해서 자꾸 에러가 났었다. 일단, MariaDB는 10.4부터 root 권한 소유자에게 따로 비밀번호를 물어보지 않는다. 즉, 루트 계정으로 로그인했으면 그냥 콘솔에 mysql 치면 접속이 된다. 물론 다른 유저는 전처럼 비밀번호를 물어본다. 나는 이 root 계정으로 로그인을 며칠째 계속 시도해 봤는데 계속 안됐다.... 포트 문제도 아니었고 딱히 통신 문제도 아니었다. 심지어 SSH 접속 계정도 root 였다. 해답은 새로운 계정을 파서, 그 계정으로 접속을 하니까 잘 됐다. 계정 만드는 SQL 문이야 검색하면 바로 나올 거니까 따로 적진 않겠다.사실 별 내용 없는 건 아는데 새 계정을 파서 시도하란 말을 며칠 내내 구글을 뒤진 다음에야 본 것 같아서, 혹시 같은 어려움을 겪는 사람들이 있다면 빨리 해결할 수 있었으면 좋겠다. from http://skyseven73.tistory.com/5 by ccl(A) rewrite - 2020-03-11 02:54:31

[공학] 목차

[공학] 목차 자동차공학 컴퓨터공학 컴퓨터공학 | 개발환경 컴퓨터공학 | 웹개발 컴퓨터공학 | 모바일개발 ✓ 컴퓨터공학 | 운영체제 컴퓨터공학 | 프로그래밍 컴퓨터공학 | 네트워크 컴퓨터공학 | 데이터베이스 from http://sanctacrux.tistory.com/679 by ccl(A) rewrite - 2020-03-12 16:54:22