티스토리 뷰

BACK-END

[BACK-END] BACK-END LANGUAGE

진심스테이크 2019. 7. 28. 17:15

 

Ruby : 동적 객체 지향 스크럽트 프로그래밍 언어

 

장점

- 순수 객체 지향 언어 -> 정수나 문자열 등을 포함한 데이터 형식 등 모든 것이 객체

- 구문은 ALGOL계를 계승하면서 가독성 중시

- 이식성이 매우 높음

 

ByeBug : 디버거

- 장점 : 스택 프레임을 위한 중단 첨 처리 및 바인등을 제공하며 명령 행 인터페이스를 사용하기 쉬움

 

Framework

- Ruby on Rails : Ruby로 작성된 MVC 패턴을 이용하는 오픈소스 웹 프레임워크

  - 모델, 뷰, 컨트롤러의 템플릿 생성 및 테스트 등 자동화하는 툴, 테스트를 위한 웹서버 등 포함

- Sinatra : Ruby로 작성된 자유-오픈소스 소프트웨어 웹 어플리케이션 라이브리러이자 도메인 특화 언어

  - 크기가 작고 유연

  - 다른 프레임워크에 사용되는 일반적인 MVC 패턴을 준수하지 않음

  - Ruby를 사용하여 최소한의 노력으로 빠르게 웹 애플리케이션을 만드는 데 초점을 둠

 

Testing

- RSpec : Ruby 코드를 테스트하기 위해 Ruby로 작성된 도메인 특정 언어 테스트 도구

 

Package Manager

- RubyGame : Ruby를 위한 크로스 플랫폼 멀티미디어 라이브러리

  - 오픈소스

 


 

Node.js : V8 (자바스크립트 엔진)으로 빌드 된 이벤트 기반 자바스크립트 런타임

 

Package Manager

- npm : 자바스크립트 프로그래밍 언어를 위한 패키지 관리자

- yarn : Node.js의 새로운 패키지 관리자

  - npm의 핵심 이슈를 해결하기 위해 만듦

  - 보다 빠르고 안정적이며, 보안성이 뛰어남

 

Framework

- Express : 웹 및 모바일 애플리케이션을 위한 Node.js 웹 애플리케이션 프레임워크

  - 서버를 쉽게 실행 및 운영 가능

  - 내장된 라우터로 코드를 쉽게 재사용 가능

- hapi : Node.js 웹 프레임워크

  - 크고 복잡한 어플리케이션에 특성화 되어 있음

  - 내장된 라우터로 코드를 쉽게 재사용 가능

- Koa : 웹 응용 프로그램 및 API를 위한 Express 팀의 새로운 웹 프레임워크

  - 다른 프레임워크에 비해 미들웨어 작성이 쉬움

  - ES6를 도입하고 있어서 ES6 제너레이터 사용 가능

- Sails.js : Express 기반의 가벼운 프레임워크

 

Testing

- Jesl : 페이스북에서 만든 테스트 프레임워크

- Mocha : Node.js에서 가장 많이 사용하는 테스트 프레임워크

- Jasmine : 테스트 도구

  - 전체가 한 패키지로 되어있어 사용하기 쉬움

- Chai : Node.js 및 브라우저를 위한 BDD / TDD 단언문 라이브러리 (Assertion Library)

- should.js : Node.js에서 사용할 수 있는 표현적이고 가독성이 있음

  - 테스트 프레임워크에 의존적이지 않은 단언문 라이브러리

  - Node.js에서 제공하는 Assert 모듈 확장판

  - Node.js의 Assert 모듈을 지원하는 어떠한 테스트 프레임워크에서 사용 가능

 


 

Web Server : 하드웨어 - Web 서버가 설치되어 있는 컴퓨터

- 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠를 제공하는 컴퓨터 프로그램

 

- Caddy : 오픈소스인 Go로 작성된 HTTP/2를 사용하는 웹 서버

  - 기본적으로 HTTPS를 활성화함

- Apache : HTTP 웹 서버

  - Client에서 요청을 받으면 MPM (Multi Processing Module) 방식으로 처리

- Nginx : HTTP 웹 서버

  - Event Driven 방식으로 처리

    -> CPU와 관계없이 IO들을 Event Listener로 미루기 때문에 응답이 빠르게 진행되어 1개의 프로세스로 빠른 작업 가능

    -> 메모리 측면에서 시스템 리소스를 적게 처리

 


 

RESTful APIs : REST의 특징을 지키면서 API를 지공

- REST (Representational State Transfer) : 소프트웨어 프로그램 개발의 아키텍처의 한 형식

                                                      자원을 정의하고 자원에 대한 주소를 지정하는 방법론

- RESTful : REST의 비공식적 구현 가이드


 

Read about MVC

 


 

Authentication : 자신이 누구라고 주장하는 사람을 확인하는 절차

 

- JSON Web Token (JWT) : 두 개체에서 JSON 객체를 사용하여 가볍고 자가수동적인 방식으로 정보를 안정성 있게 전달

  - 웹 표준

  ex) 회원 인증, 정보 교류 등                                  

- OAuth 2.0 : 외부 서비스의 인증 및 권한부여를 관리하는 범용 프레임워크

 


 

SOLID, YAGNI, KISS etc : 객체지향 개발 원칙

 


 

Regular Expressions : 정규식

- 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어

- 주로 Programming Language나 Text Editor 등에서 문자열의 검색과 치환을 위한 용도로 쓰임

 


 

Security : 보안

 


 

GraphQL : 페이스북에서 만든 어플리케이션 레이어 쿼리 언어

- API를 위한 쿼리 언어

- 이미 존재하는 데이터로 쿼리를 수행하기 위한 런타임

 


 

Docker : 컨테이너 기반의 오픈소스 가상화 플랫폼

- 다양한 프로그램, 실행환경을 컨테이너로 추상화하고, 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줌

 


 

Search Engines : World Wide Web에 존재하는 정보와 웹 사이트를 검색하기 위한 프로그램

 

- Soir : Apache Lucene 프로젝트에서 자바로 작성된 오픈소스 엔터프라이즈 검색 플랫폼

  - 주요 기능 : 전체 텍스트 검색, 히트 하이라이트, 패싯 검색, 실시간 인덱싱, 동적 클러스터링, 데이터베이스 통합,

                   NoSQL 기능 및 풍부한 문서(Word, PDF등) 처리

- Sphinx : 파이썬 코드 내에 들어간 문서화 문자열을 자동으로 문서화 해주는 도구

- ElasticSearch : Lucene 기반의 검색 엔진

  - HTTP 웹 인터페이스와 스키마에서 자유로운 JSON 문서와 함께 분산 멀티테넌트 지원 전문 검색 엔진 제공

  - 자바로 작성, 오픈소스

 


 

GOF Design Patterns 

- Design Patterns : 소프트웨어 설계에 있어 공통된 문제들에 대한 표준적인 해법과 작명법을 제안

 


 

Architectural Patterns : 주어진 상황에서의 소프트웨어 아키텍처에서 일반적으로 발생하는 문제점들에 대한 일반화되고 재사용 가능한 솔루션

- 디자인 패턴과 유사하지만 더 큰 범주에 속함

계층화 패턴, 클라이언트-서버 패턴, 마스터-슬레이브 패턴, 파이프-필터 패턴, 브로커 패턴, 피어 투 피어 패턴, 이벤트-버스 패턴, MVC 패턴, 블랙보드 패턴, 인터프리터 패턴


 

Give DDD a shot

- DDD : 도메인 주소 설계, 소프트웨어 설계 기법의 하나

- 다중 아키텍처의 객체지향 시스템에서 도메인층을 기술하는 것에 중점을 둠

 


 

Learn different testing techniques

- 테스트 설계 기술 : 소프트웨어 개발 프로젝트가 전반적인 품질과 효율성을 향상시키는데 도움

- 사양 기반 or 블랙박스 기술 : 소프트웨어를 입력 및 출력이 있는 블랙박스로 간주, 내부 세부 정보를 방해하지 않고 품질과 정확성 검증 (등기 분할, 경계 값 분석, 의사 결정 테스트, 유스 케이스 테스트)

구조 기반 또는 화이트박스 기술 : 응용 프로그램의 내부 구조를 투명하게 보고 테스트하는 방법 (Statement Coverage 또는 Line Coverage, 조건 범위 또는 조건부 범위, 의사 결정 커버리지 또는 지점 커버리지, 다중 조건 커버리지)

경험 기반 기술 : 테스트 케이스 및 테스트 조건 설계 경험으로부터 논리적으로 추출 (탐색적 테스트, 오류 추측)

 


 

Python 

 

Package Manager

- Pip : 파이선의 각종 라이브러리들을 설치 및 관리해주는 패키지 매니저

  - 장점 : 명령 줄 인터페이스에서의 쉬운 사용과 파이선 소프트웨어 패키지를 한번에 명령 실행으로 설치 가능

 

Testing

- unit test / pyUnit : 파이썬에 포함된 다양한 테스트를 자동화 할 수 있는 기능이 포함되어 있는 표준 라이브러리

- pyTest

  - 장점 : 명시적인 이름을 가지며 테스트 함수에서의 선언을 통해 이를 활성화 시킴

             모듈 방식으로 구현되어 있음

             픽스처 관리를 통해 단순한 유닛 테스트부터 복잡한 기능 테스트에 이르기까지 테스트 규모를 확장 할 수 있음

  - 단점 : pytest만의 고유한 방식을 익혀야 함 -> 일반적인 파이썬 코드 흐름이 아니기 때문에 오류를 일으킬 수 있음

- docTest파이썬의 독스트링(docstring)에 있는 샘플 코드만을 테스트하기 위한 특수 목적 프레임워크

- nose

 

Frameworks - Sync (동기)

- Pyramid :  웹 프레임워크

  - 장점 : 빨리 시작 가능, API 프로젝트에서 작업이 가능, 유연성

- Flask : 웹 프레임워크

  - 처음 시작을 위한 뼈대가 없은 대신, 빈 페이지에서 시작 할 수 있음

  - ORM, 폼 검증 및 업로드 처리 등을 위한 확장 기능을 이용할 수 있음

- Django : 파이썬으로 만들어진 무료 오픈소스 웹 어플리케이션 프레임워크

  - 장점 : 인증, 관리와 같이 거의 대부분의 사이트에서 사용하는 기능들이 기본 모듈로 제공, 높은 코드 완성도 유지 가능

  - 단점 : 성능 문제, 파이썬에 대한 높은 이해도 필요

 

Async (비동기)

- Sanic

- Tornado : 비동기 웹 프레임워크

  - 애초부터 비동기 작업을 지원하기 위해 구축됨

  - 네이티브 웹 소켓을 지원하고, 매우 쉽고 간단하게 구현 가능

- gevent : libev를 기반으로 병행(동시실행) 라이브러리

  - 네트워크나 병행 프로그래밍을 위한 API를 제공하고 있음

- aiohttp : 파이썬을 위한 비동기 HTTP client / server의 모듈

 


 

PHP7

 

Package Manager

- Composer : PHP로 프로젝트를 진행할 때 접하게 되는 의존선 문제를 해결해 주는 의존성 관리도구

  - 단점 : 느린 속도

 

Debugger / Profiler

- xDebug : PHP 전용 디버거로, PHP로 작성된 프로그램을 디버깅하거나 프로파일링 데이터를 추출하기 위한 확장 프로그램

  - 장점 : 웹 서버에 설치하면 디버그 관련 함수 사용 가능

            프로파일링 기능을 사용하면 PHP언어로 작성된 프로그램이나 웹사이트의 전반적인 성능 확인 작업이 매우 간편함

- XHProf

- New Relic

- Blackfire : 애플리케이션에 대한 성능 기대치를 설정하고, 도달하도록 도와줌 

 

PSRs : autoloader를 통해 클래스를 손쉽게 로딩할 수 있도록 하는 표준

 

Framework

- Laravel : PHP를 기반으로 하는 웹 개발 프레임워크

  - PHP의 기능을 최대한 활용하여 아름답고 우아하게 코드를 작성할 수 있음

  - 다양하고 풍부하고 사용하기 쉬운 기능을 제공하므로 약간의 코딩으로 강력하고 견고한 웹 어플리케이션을 개발 가능

- Symfony PHP 웹 프레임워크의 하나로 재사용 가능한 PHP 구성 요소/라이브러리들의 모임

  -> Slim 간단하면서도 강력한 웹 응용 프로그램 및 API를 빠르게 작성 할 수 있는 PHP 마이크로 프레임워크

      - HTTP 요청을 받아 적절한 콜백 루틴을 호출하고 HTTP 응답을 반환하는 디스패처

  -> Lumen : Laravel에서 발표한 경량 프레임워크

  -> Silex : PHP로 개발된 마이크로 웹 프레임워크이며 심포니, 트위그, 독트린에 기반을 둠

      - 일반 목적은 가능한 가볍게 함으로써 Silex 기반을 확장하고 기능을 추가하는 일을 쉽게 하는 것

 

Testing

- PHPUnit : PHP 프로개르밍 언어를 위한 유닛 테스트 프레임워크

- phpspec

- Condeception : REST API를 테스트하는데 최적화된 PHPUnit 기반의 프레임워크

  - 테스트 코드의 양이 줄면서 가독성이 증가하고 테스트 자체에 집중 할 수 있음

  -> Mockery : 동적으로 Mock 객체를 만들어주는 프레임워크

      - 장점 : Mock 객체를 명시적으로 생성하지 않아도됨, 행위기반 테스트도 가능

 


 

C# (NET) : 마이크로소프트 사에서 개발된 객체지향 프로그래밍 언어

기존에 사용하던 프로그래밍 언어의 생산성을 개선하고자 만들어진 언어

- 장점 : 수많은 라이브러리와 IDE를 통해 프로그래머가 손쉽게 코딩을 할 수 있게 도와줌

           사소한 실수부터 모든지 컴파일을 띄우는 엄격한 문법

           할당된 메모리를 해제하지 않아도 되며, 사용된 객체는 저절로 제거됨

- 단점 : C, C++에 비해 속도가 조금 느림           

 


 

Java (Groils, Spring, Play)객체 지향적 프로그래밍 언어

 


 

Go 2009년 구글이 개발한 프로그래밍 언어이다

병행성을 잘 지원하는 컴파일 언어

컴파일러의 컴파일 속도가 매우 빨라 인터프리터 언어처럼 쓸 수 있음

 


 

Storage컴퓨터 프로세서가 접근 할 수 있도록 전자기적인 형태로 데이터를 저장하는 장소

- 1차 스토리지 : 램과 기타 여러 내부 장치들에 있는 데이터

- 2차 스토리지 : 하드디스크, 테이프, 기타 외부에 장치들에 있는 데이터

 

Caching

- Memcached : 무료로 사용할 수 있는 오픈소스이며, 분산 메모리 캐싱 시스템

  - 데이터베이스 부화를 줄여 동적 웹 애플리케이션의 속도개선을 위해 사용됨

  - DB or API호출 or 페이지 렌더링 등으로부터 받아오는 결과 데이터를 작은 단위의 key-value 형태로 메모리에 저장하는 방식

  - 장점 : 필요량보다 많은 메모리를 가졌을 때, 시스템으로부터 메모리를 사용하고 필요로 하는 메모리가 부족한 경우에 이를 더 쉽게 가져다 사용할 수 있도록 만들어줌

- Redis NoSQL의 일종으로 Memcahed와 비교되는 in memory 저장소 솔루션으로 분류되기도 함

  - 다양한 데이터 구조체를 지원

  - 저장된 데이터에 대한 추가작업이 가능 (합집합, 교집합, Range Query)

  - 데이터를 disk에 저장할 수 있음

  - 장점 : 리스트, 배열 형식의 데이터 처리에 특화되어 있음

  - 단점 : cache 및 redis session 등 새로운 관리 포인트가 증가 할 수 있음

 

Relational Database

- Oracle 미국의 기업에서 만든 데이터베이스 관리 시스템

  - Database에서 많이 쓰이며, 기능 또한 가장 좋은 것으로 알려진 최고의 Database

  - 유닉스 환경에서 사용되는 RDBMS로는 현재 가장 널리 사용되는 대표적인 제품

- PostgreSQL : 확장 가능성 및 표준 준수를 강조하는 객체-관계형 데이터베이스 관리 시스템(ORDBMS)의 하나

- MariaDB오픈소스 관계형 데이터베이스

  - 기존에 MySQL 엔터프라이즈에서 플러그인으로 제공한 쓰레드풀 기능이 내장되어있음

  - 스토리지 엔진을 활용한 샤딩기술을 제공

- MySQL 세계에서 가장 많이 사용되고 있는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)

- MSSQL 분산형 클라이언트 서버 환경을 위해서 특별히 디자인 된 고성능의 스케일러블 데이터베이스 관리 시스템

  - Microsoft 사에서 만든 웹DB

 

NoSQL Database (Not Only SQL) SQL을 활용하는 형태가 아닌 다른 방식의 저장기술

- Redis : 대용량 처리 관련 기술, 오픈소스

- MongoDB : 문서 지향 데이터베이스

  - NoSQL이기 때문에 관계형 데이터베이스의 테이블 개념이 없음

  - 여러 데이터가 모인 하나의 단위를 컬렉션(Collection)이라고 부름

  - 장점 : 스키마가 없음, 낮은 진입장벽, 매우 고성능, 수평 확장이 쉬움

  - 단점 : 쿼리에 대한 유연성 (ex) JOIN 없음). 트랜잭션에 대한 지원이 없음

- Cassandra 오픈 소스 NoSQL Database 관리 시스템의 하나

  - 단일 장애점 없이 고성능을 제공하면서 수많은 서버 간의 대용량 데이터를 관리하기 위해 설계

- RethinkDBReal-Time에 최적화된 오픈소스 데이터베이스

  - 확장 가능한 JSON 데이터베이스

- Couchbase

댓글