티스토리 뷰

Web developer는 크게 front end(프론트엔드) 개발자와 back end(백엔드) 개발자, 그리고 full stack(풀스택) 개발자로 나뉘게 된다.

이렇게 나누는 것은 그냥 회사에서 업무분담이 어떻게 나누어 지는지의 차이이다. 오히려 적절한 인원이 확보되고 업무 체계가 잘 잡혀있는 회사가 업무 분담이 세세하게 나누어져 있는 경우가 많다.

 

1. Front end

  • front end는 사이트 이용자의 눈에 보이는 부분(HTML/CSS/JAVA SCRIPT 등)을 개발하는 것을 말한다.
  • front end 파트는 개발자만 있는 것이 아니라 UX designer, WEB designet, front end developer로 구성되는데, UX designer는 사용자에게 최고로 편리한 경험을 제공하기 위해 사이트의 구성/가능 구상을 담당하고, Web designer는 이를 멋지게 디자인을 뽑아내고, front end developer는 이 디자인은 web application으로 구현하게 된다. 물론 회사 업무 분할이 되어 있지 않거나 회사 사정에 따라 Web end developer만 있는 경우도 있다.

2. Back end

  • 사이트 이용자의 눈에 보이지 않는 부분(서버코딩, 서버상에서 DB활용, API제작 등)을 개발하는 것을 말한다.
  • Back end 파트는 다양한 조합이 있을 수 있는데, 하나의 예로 서버 관리자, DB 관리자, Back end developer로 구성될 수 있다. 서버관리자는 서버 환경설정, 서버구성 관리를, DB 관리자는 DB설계, DATA관리, 최적화를 Back end developer는 서버를 코딩하게 되는 것이다.

3. Full stack

  • front end와 back end를 다 한꺼번에 다 개발하는 것을 말한다.

4. Front-Back에서 많이 사용하는 기술 용어 정리

가. Front end 용어 정리

HTML

  • Hyper Text Markup Language
  • 웹페이지를 만들기 위한 언어로 웹브라우저 위에서 동작하는 언어
  • HyperText : 웹페이지를 이동할 수 있도록 만들어진 문장

CSS

  • Cascading Style Sheet
  • HTML 문서의 모든 요소에 대해 스타일을 적용할 수 있는 표준 규격
  • 디자인을 목적으로 쓰임
  • 편리성, 일관성 제공

JavaScript

  • 객체 기반의 스크립트 언어(스크립트 언어 : 응용 소프트웨어를 제어하는 컴퓨터 프로그래밍 언어)
  • 웹 브라우저에서 웹 페이지에 동적인 요소를 구현하기 위해 개발된 언어
  • 장점
    • DOM 탐색 등 문법이 간단하고, 여러 브라우저에서 같은 결과물을 내줌
  • 단점
    • 새로운 API를 배워야하는 부담감이 있음

JavaScript[ ]

  • jQuery
    • 자바스크립트 라이브러리
    • 웹 사이트에서 자바스크립트를 사용하는 것이 훨씬 쉬워지도록 하는 것
  • TypeScript
    • 자바스크립트로 변환되는 더 쓰기 편하고 안전한 언어를 만들기 위해 만들어짐 
    • 자바스크립트의 super set
    • 장점
      • 정적 타입, 제네릭, 인터페이스 등을 지원함으로 크고 복잡한 프로젝트를 만들 때 좋음
    • 단점
      • ECMA 표준이 아니고, 브라우저에서 쓰러면 트랜스 컴파일이 필요
  • Flow
    • 새로운 언어를 정의하지 않는다. ECMAScript 6의 타입 검증 도구 이다. 
    • 정적 타입 지원
  • ES6
    • ECMAScript version6
    • 다양한 웹 브라우저에서 JS가 공통되게 잘 작동하기 위한 표준 규격

JavaScript[Task Runners]

  • npm scripts
    • Node.js로 만들어진 모듈을 웹에서 받아서 설치하고 관리해주는 프로그램 
    • npm 명령어
  • gulp
    • 자바스크립트 파일이나 CSS 파일들을 알아서 가지고 와주는 자동화 도구
  • Grunt
    • Node.js 기반으로 하고있는 무수한 패키지들 중에 프로젝트에서 필요한 패키지들을 설치하고, 그 패키지들을 미리 설정한 순서와 옵션에 맞게 자동으로 명령어를 실행시켜주는

JavaScript[Package Manager]

  • Yarn
    • Node.js의 패키지 매니저, 페이스북 소유
  • npm
    • Node.js의 패키지 매니저, Node.js를 설치하면 알아서 딸려옴

JavaScript[Testing]

  • Jest
    • 페이스북에서 만든 테스트 프레임워크
  • Mocha
    • Node.js에서 가장 많이 사용하는 테스트 프레임워크
  • Jasmine
    • 전체가 한 패키지로 되어 있어 사용하기 쉬움

JavaScript[Module Loader/Bundler]

  • webpack
    • 여러개의 나누어져 있는 파일들을 하나의 파일로 만들어주는 라이브러리
  • rollup
    • 코드와 종속관계의 라이브러리를 정적으로 분석하고, 최소한의것들만 번들링
  • RequireJS/AMD
    • 자바스크립트는 기본적으로 a.js 파일로부터 b.js 파일을 include할 수 있는 방법이 없는 걸 해결
  • Browserify
    • 브라우저 사이드에서 require( )를 쓸 수 있도록 구성해줌 -> node.js 모듈처럼 사용하는것과 비슷

JavaScript[Choose a Framework]

  • Angular
    • SPA (Single Page Application) 개발을 위한 구글의 오픈소스 자바스크립트 프레임워크
    • 웹 애플리케이션, 모바일 웹, 네이티브 모바일과 데스크탑 애플리케이션까지 프론트앤드 개발에 필요한 기능을 가짐
    • 주 언어는 TypeScript
  • React
    • 사용자 인터페이스를 개발하기 위한 자바스크립트 라이브러리
    • 컴포넌트 기반
  • React[]
  • Flux
    • MVC패턴에서 M과 V가 엄청 많아졌을 경우, 원하는 부분을 찾아 수정하기 어려워지는 문제를 해결한 디자인패턴
  • Redux
    • Flux 아키텍처를 좀 더 편하게 사용할 수 있도록 해주는 라이브러리
  • Mobx
    • 주로 React와 함께 사용, 상태를 Observable하게 관리할 수 있도록 돕는 라이브러리
  • Vue.js
    • View에 최적화된 프레임워크
    • MVVM 패턴을 기반으로 디자인되어 있음
  • Ember JS
    • MVV 패턴에 기반을 둔 오픈소스 자바스크립트 웹 프레임워크
  • Preact
    • React의 크기를 1/10로 줄인 프레임워크
  • Inferno
    • 클라이언트와 서버 둘 다 고성능 사용자 인터페이스를 구축하기 위해 엄청 빠른 리액트 형태의 라이브러리

CSS[Choose Framework]

  • Foundation
    • 반응형 Front-end 프레임워크
  • Bootstrap
    • 웹사이트를 쉽게 만들 수 있게 도와주는 HTML, CSS, JS 프레임워크
  • Materialize CSS
    • 안드로이드 기반의 어플리케이션에서 주로 사용되는 프레임워크
  • Semantic UI
    • React에서 사용

CSS[Preprocessors]

  • Sass(Syntactically awesome style sheets)
    • CSS 문법을 확장하여 중복되는 코드를 줄여 보기 좋게 작성 가능 
  • Less(Leaner style sheets)
    • CSS로 컴파일한 다음 클라이언트 / 서버 사이드에서 실행할 수 있는 동적 전처리기 스타일시
  • Stylus
    • Sass에 영감을 받았고, Node.js로 구축되어 있으며 브러우저에서 실행 가능
  • Post Css
    • 플러그인을 사용하여 CSS를 변환시키는 툴

CSS[Methodologies(방법론)]

  • SUIT CSS
    • UI 컴포넌트를 위한 스타일 도구
  • BEM(Block, Element, Modifier)
    • 서로 다른 역할을 수행하는 CSS 클래스를 차별화하는 것
  • OOCSS(Object-Oriented CSS)
    • 다양한 스타일 규칙 전체에서 동일한 속성의 중복을 줄이는 것
  • SMACSS(Scalable and Modular Architecture for CSS)
    • 대규모 프로젝트를 위한 스타일링 지침
  • Systematic CSS

CSS[Dive Deep CSS3]

 

SVG

  • 백터(vector) 이미지를 표현하기 위한 포맷으로 w3c에서 만든 백터 이미지 표준

D3(Data-Driven Documents)

  • 데이터를 랜더링할 수 있는 웹 기반 문서 라이브러리

JavaScript[ ]

  • Design Patterns
    • 객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴
  • Regex
    • 정규 표현식
  • GOF Design Patterns
    • 23가지 디자인 패턴을 3가지 유형으로 나눔
    • Creational Pattern : 객체를 생성하는데 관련된 패턴들
    • Structure Pattern : 프로그램 구조에 관련된 패턴들
    • Behavioral Pattern : 반복적으로 사용되는 객체들의 상호작용을 패턴화 해놓은 것들
  • Learn different testing techniques

 

 

나. Back end 용어 정리

Python[Package Manager]

  • Pip
    • Pip는 파이썬의 각종 라이브러리들을 설치 및 관리해주는 패키지 매니저이다. 
    • 장점
      • 명령 줄 인터페이스에서의 쉬운 사용과 파이썬 소프트웨어 패키지를 한번에 명령 실행으로 설치 할 수 있다.
    • pip로 설치 할 수 있는 라이브러리들에 대한 정보는 아래 url에서 확인 
 

PyPI – the Python Package Index

The Python Package Index (PyPI) is a repository of software for the Python programming language.

pypi.org

Python[Testing]

  • nose
    • 파이썬에서 테스트에 널리 사용되는 도구 중 하나이다.
  • doctest
    • 파이썬의 독스트링(docstring)에 있는 샘플 코드만을 테스트하기 위한 특수 목적 프레임워크이다.
  • pytest 
    • 장점
      • 명시적인 이름을 가지며 테스트 함수에서의 선언을 통해 이를 활성화 시킬 수 있다.
      • 모듈화된 방식으로 구현되어 있다. 각 픽스처 이름은 트리거 함수를 호출하고, 또 그 픽스처 역시 다른 픽스처를 사용 할 수 있다.
      • 픽스처 관리를 통해 단순한 유닛 테스트부터 복잡한 기능 테스트에 이르기까지 테스트 규모를 확장 할 수 있다.
    • 단점
      • pytest만의 고유한 방식을 익혀야 한다. 이 방식은 일반적이 파이썬의 코드 흐름이 아니기 때문에 코드 분석 도구가 오류를 일으킬 수 있다.
  • unittest
    • unittest는 파이썬에 포함된 다양한 테스트를 자동화 할 수 있는 기능이 포함되어 있는 표준 라이브러리
      • 테스트란? - 소프트웨어가 요구사항에 의해 개발된 산출물이 요구사항과 부합하는지 여부를 검증하기 위한 작업
      • 단위 테스트란? - 모듈 또는 응용 프로그램 내의 개별 코드 단위가 예상대로 작동하는지 확인하는 반복 가능한 활동
    • 단점
      • 테스트를 작성하기 위해 반드시 클래스를 정의해야 하므로 불편하다, 권장되지 않는 방식인 카멜 케이스로 단어를 구분한다.
    • 카멜케이스란? 객체지향 프로그래밍 언어에서 보편적으로 이용하는 규칙이다. (1). 첫 문자는 대문자로 (2). 둘 이상의 잔어가 묶여 하나의 이름을 구성할 때는 새로운 단어는 대문자로 시작

Python[Frameworks - Sync]

  • Pyramid
    • 웹 프레임워크
    • 유연성
    • 장점
      • 빨리 시작할 수 있다.
      • API 프로젝트에서 작업이 가능핟.
      • 생각을 프로토타이핑 하는데 용이하다.
  • Flask
    • 웹 프레임워크
    • 민첩함
    • 처음 시작을 위한 뼈대는 없는 대신, 빈 페이지에서 시작 할 수 있다.
    • 플래스크가 자체로 많은 기능을 제공하지 않더라도 ORM, 폼 검증 및 업로드 처리 등을 위한 확장 기능을 이용할 수 있다.
  • Django
    • Django는 파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크이다.
    • 장점 
      • 인증, 관리와 같이 거의 대부분의 사이트에서 사용하는 기능들이 기본 모듈로 제공된다.
      • 높은 코드 완성도를 유지 할 수 있다.
    • 단점
      • 한글 문서가 아주 풍부한 편은 아니다.
      • typeless 언의의 약점을 그대로 보유하고 있다.
      • python에 대한 높은 이해도가 필요하다.
      • 성능 문제에서 자유롭지 못하다.

Python[Async]

  • Sanic
    • 빠른 속도로 작성된 Python 3.6 이상의 웹 서버 및 웹 프레임 워크이다.
    • 추가된 async / await 구문을 사용하면 코드를 비 블로킹 및 신속하게 처리 할 수 있다.
    • 구축, 확장 및 궁극적으로 확장이 가능한 고성능 HTTP 서버를 손쉽게 시작하고 실행 할 수 있는 방법을 제공한다.
    • GitHub에서 개발됨
  • Tornado
    • 비동기 웹 프레임워크
    • 애초부터 비동기 작업을 지원하기 위햄 구축되었다. 
    • 네이티브 웹 소켓을 지원한다. 웹 소켓을 매우 쉽고 간단히 구현 할 수 있다.
  • gevent
    • libev를 기반으로 병행(동시실행) 라이브러리이다. 네트워크나 병행 프로그래밍을 위한 API를 제공하고 있다.
  • aiohttp
    • Python 을 위한 비동기 HTTP client/server의 모듈

PHP 7[Package Manager]

  • composer
    • PHP로 프로젝트를 진행 할 때 접하게 되는 의존성 문제를 해결해 주는 의존성 관리도구이다.
    • 단점
      • 느린속도

PHP 7[Debugger/Profiler]

  • xDebug
    • PHP 전용 디버거로 PHP로 작성된 프로그램을 디버깅하거나 프로파일링 데이터를 추출하기 위한 PHP 확장 프로그램이다.
    • 장점
      • 웹 서버에 설치하면 디버그 관련 함수 사용이 가능해진다.
      • IDE 내에 포함된 PHP 디버그 클라이언트를 통해 리모트 기버깅도 가능하다.
      • 프로파일링 기능을 사용하면 PHP 언어로 작성된 프로그램이나 웹사이트의 전반적인 성능 확인 작업이 매우 간편해진다.
  • XHProf
  • New Relic
  • Blackfire
    • apm을 사용하는 것보다 기존 프로파일링 도구를 넘어서 Blackfire은 애플리케이션에 대한 성능 기대치를 설정하고 도달하도록 도와준다.

PHP 7[Testing]

  • PHPUnit
    • PHP 프로그래밍 언어를 위한 유닛 테스트 프레임워크이다.
  • phpspec
  • Codeception
    • REST API를 테스트하는데 최적화된 PHPUnit 기반의 프레임워크
    • 테스트 코드의 양이 줄면서 가독성이 증가하고 테스트 자체제 집중 할 수 있다.
  • Mock(Mockery)
    • 동적으로 Mock 객체를 만들어주는 프레임워크이다.
    • 실제 객체를 만들어 사용하기에 시간, 비용 등의 Cost가 높거나 혹은 객체 서로간의 의존성이 강해 구현하기 힘들 경우 가짜 객체를 만들어 사용하는 방법이다.
    • 장점
      • Mock 객체를 명시적으로 생성하지 않아도 된다.
      • 행위기반 테스트도 가능하다.

PHP 7[Framework]

  • Laravel
    • PHP를 기반으로 하는 웹 개발 프레임워크이다.
    • 현대적인 PHP의 기능을 최대한 활용하여 아름답고 우아하게 코드를 작성할 수 있으며 다양하고 풍부하고 사용하기 쉬운 기능을 제공하므로 약간의 코딩으로 강력하고 견고한 웹 어플리케이션을 개발 할 수 있다.
  • Symfony
    • PHP 웹 프레임워크의 하나로 재사용 가능한 PHP 구성 요소/라이브러리들의 모임이다.
    • 다른 프레임 워크와 달리 Symfony 구성 요소는 서로 분리되어 필요한 항목을 선택 할 수 있다. 응용 프로그램을 프레임 워크에 적용하는 대신 사용자의 요구에 맞게 프레임 워크를 적용 할 수 있다.
  • Slim
    • 간단하면서도 강력한 웹 응용 프로그램 및 API를 빠르게 작성 할 수 있는 PHP 마이크로 프레임워크이다.
    • HTTP 요청을 받아 적절한 콜백 루틴을 호출하고 HTTP 응답을 반환하는 디스패처이다.
  • Lumen
    • Laravel에서 발표한 경량 프레임워크
    • 라라벨 계열이기 때문에 사용하다가 라라벨로 바로 업그레이드 할 수 있다는 장점이 있다.
  • Silex
    • PHP로 개발된 마이크로 웹 프레임워크이며 심포니, 트위그, 독트린에 기반을 둔다.
    • 일반 목적은 가능한 가볍게 함으로써 Silex 기반을 확장하고 기능을 추가하는 일을 쉽게 하는 것이다.
    • 소형 웹 애플리케이션의 제작을 위해 사용할 수 있는데, 이는 마이크로 프레임워크를 위한 주요 케이스이지만, Silex는 풀 스택 MVC 프레임워크로 확장이 가능하다.
  • C#
    • 기존에 사용하던 프로그래밍 언어의 생산성을 개선하고자 만들어진 언어이다.
    • 마이크로소프트 사에서 개발된 객체지향 프로그래밍 언어
    • 장점
      • 뛰어난 생산성이다. 수많은 라이브러리와 IDE를 통해 프로그래머가 손쉽게 코딩을 할 수 있게 도와준다.
      • 사소한 실수부터 모든지 컴파일을 띄우는 엄격한 문법이다.
      • 할당된 메모리를 해제하지 않아도 되며, 사용된 객체는 저절로 제거된다. 메모리 누수를 걱정 할 필요가 없다.
    • 단점
      • C, C++에 비해 속도가 조금 느리다.
  • JAVA
    • 객체 지향적 프로그래밍 언어이다. 
    • 특징
      • 이식성이 높은 언이다.
      • 객체지향 언어이다. 캡슐화, 상속성, 다형성을 완벽하게 지원한다.
      • 메모리를 자동으로 관리한다. 개발자가 직접 메모리에 접근 할 수 없도록 설계되었다.
      • 다양한 OS에서 실행되는 프로그램을 개발 할 수 있다.
      • 멀티스레드를 쉽게 구현 할 수 있다.
      • 애플리케이션 실핼 시 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적 로딩해서 객체를 생성한다.
  • Go
    • 2009년 구글이 개발한 프로그래밍 언어이다.
    • 병행성을 잘 지원하는 컴파일 언어이다.
    • 특징
      • 컴파일 언어이지만 컴파일러의 컴파일 속도가 매우 빨라 인터프리터 언어처럼 쓸 수 있다.
      • 컴파일 언어이므로 바이너리만 배포할 경우 해당 타깃 머신에 맞춰서 컴파일 해야 한다.

PHP 7

  • PSR
    • PSR-0 Autoloading Standard
      • autoloader를 통해 클래스를 손쉽게 로딩할 수 있도록 하는 표준
      • PSR-4가 제정되면서 무효화 되었다. PSR-4는 PHP-5.4 이상에서 사용가능하므로 5.3을 사용할 경우 PSR-0을 따라야 한다.
    • PSR-1 Basic Coding Standard
      • 표준 코딩 스타일을 제시하는 표준으로 주요 내용은 아래와 같다.
        • PHP 파일은 BOM(Byte Order Mark) 없는 UTF-8 인코딩을 사용할 것
        • 네임스페이스와 클래스는 오토로딩(PSR-0, PSR-4)을 따를 것
        • 클래스 이름은 반드시 첫 글자를 대문자로 할 것
        • 클래스 내 상수는 반드시 모두 대문자로 작성하고 구분자로 _를 사용할 것
        • 클래스 내 메소드의 이름은 반드시 camelCase()처럼 카멜케이스를 사용할 것.
    • PSR-2 Coding Style Guide
      • PSR-1 표준의 연장선인 코딩 스타일에 대한 표준으로서 공통된 스타일을 사용하여 가독성이 좋도록 더욱 구체적인 코딩 스타일을 가이드 하고 있음.
        • 들여 쓰기는 tab 대신 4칸의 공백 사용
        • 닫는 태그 (?>)는 사용하지 않음
        • namespace 선언뒤에는 한 줄의 공백을 사용하고 여러 개의 use는 줄 공백없이 사용 후에 마지막 블록뒤에 한 줄의 공밷을 사용할 것
        • 클래스 구문의 여는 괄호는 다음 줄에 사용하고 닫는 괄호는 본문 다음 줄에 사용할 것
        • 메소드 구문의 여는 괄호는 다음 줄에 사용하고 닫는 괄호는 본문 다음 줄에 사용할 것
        • 가시성과 관련된 키워드인 abstract와 final은 모든 메소드와 프로퍼티에 명시적으로 사용하고 제일 먼저 와야 하며 static 구문은 그 후에 위치 시킬 것
        • if나 else if 같은 제어 관련 구문은 제어문 뒤에 한 개의 공백을 두고 그 후에 괄호를 사용하고 조건문을 기술 할 것, 함수 호출이나 메소드 호출은 메소드명 뒤에 공백이 있으면 안됨.
        • if나 else if 같은 제어 관련 구문의 여는 괄호는 제어문과 같은 줄에 위치해야 함, 닫는 괄호는 본문의 다음 줄에 위치
    • PSR-3 Logger Interface
      • 로깅 장치(파일, 소켓, DB 등)에 상관없이 애플리케이션 로그를 남기기 위한 표준
      • 다른 로깅 프레임워크를 사용해도 애플리케이션 수정이 없도록 인터페이스를 정의하고 이를 구현하도록 하고 있다.
    • PSR-4 Autoloader
      • PHP5에 오토로딩 기능이 추가되었지만 라이브러리를 오토로딩하려면 직접 spl_autoload_register 메소드를 호툴하여 일일이 등록해야 한다. 외부 라이브러리를 사용할 경우 일일이 이를 등록하는 것은 만만한 작업이 아니다.
      • PSR-4는 PSR-0을 대체하는 새로운 오토로딩 표준으로 정규화된 클래스 이름을 규정하고 있으며 이를 준수하여 패키지를 개발할 경우 패키지 관리자인 컴포저를 통해 손쉽게 의존성 있는 모든 패키지를 로딩 할 수 있다.
    • PSR-7 HTTP Message Inteface
      • 가장 최근에 통과되었으며 PHP에서 HTTP에서 데이터를 주고 받기 위한 클래스와 메소드, 인터페이스를 정의한 규약이다.
      • 사용하는 HTTP 라이브러리가 PSR-7을 준수한다면 소스 변경없이 다른 PSR-7 구현물로 교체 할 수 있다.

Storage[Coching]

  • 컴퓨터 프로세서가 접근 할 수 있도록 전자기적인 형태로 데이터를 저장하는 장소를 말한다.
  • 1차 스토리지는 램과 기타 여러 내부 장치들에 있는 데이터이며, 2차 스토리지는 하드디스크, 테이프, 그리고 기타 외부 장치들에 있는 데이터이다.
  • 1차 스토리지는 프로세서에 근접해 있고, 그 장치가 본래부터 가지고 있는 속성 때문에 2차 스토리지 보다 훨씬 더 빠르게 액세스 된다.
  • 2차 스토리지는 1차 스토리지 보다 훨씬 더 많은 양의 데이터를 저장 할 수 있다.
  • 1차 스토리지에는 램 외에서 롬이나 L1 및 L2 캐시 메모리 등이 포함된다.
  • 2차 스토리지에는 하드디스크 외에도 디스켓, 집드라이브, RAID 시스템, 홀로그래픽 저장장치 등 다양한 범위의 장치 형태나 기술들이 포함 된다.
  • Memcached
    • 무료로 사용할 수 있는 오픈소스이며 분산 메모리 캐싱 시스템이다.
    • 데이터베이스 부하를 줄여 동적 웹 애플리케이션의 속도개선을 위해 사용되기도 한다.
    • DB or API호출 or 페이지 렌더링 등으로부터 받아오는 결과 데이터를 작은 단위의 key-value 형태로 메모리에 저장하는 방식이다.
    • 장점
      • 필요량보다 많은 메모리를 가졌을 때, 시스템으로부터 메모리를 사용하고 필요로 하는 메모리가 부족한 경우에 이를 더 쉽게 가져다 사용할 수 있도록 만들어준다. 
  • Redis
    • NoSQL의 일종으로 Memcahed와 비교되는 in memory 저장소 솔루션으로 분류되기도 한다.
    • 다양한 데이터 구조체를 지원한다.(일반적인 string 뿐만 아니라 set, list, hash 같은 집합형 데이터 구조를 지원)
    • 저장된 데이터에 대한 추가작업이 가능하다.(합집합, 교집합, Range Query)
    • 데이터를 disk에 저장할 수 있다.
    • 장점
      • 리스트, 배열 형식의 데이터 처리에 특화되어있다. 리스트 형 데이터의 입력과 삭제가 MySQL에 비하여 10배 정도 빠르다.
      • 메모리를 활용하면서 영속적인 데이터 보존이 가능하다. 명시적으로 삭제하거나 만료일을 설정하지 않으면 데이터를 삭제하지 않는다.
    • 단점
      • cache 및 redis session 등 새로운 관리 포인트가 증가 할 수 있다.
    • Memcached와 Redis의 비교
      • Memcached는 메모리에만 저장되므로 빠른 것인데 Redis는 메모리+disk에도 저장된다. 그러나 속도면에서 Memcached과 큰 차이가 없다. 
      • Memcached는 메모리에만 저장되므로 장비가 shutdown되면 데이터가 사라지지만 Redis는 disk에도 저장되기에 data 복구가 가능하다.
      • Memcached는 데이터가 만료되지 않았더라고 더 이상 데이터를 넣을 메모리가 없으면 LPU 알고리즘에 의해 데이터가 사라지고 그 공간 저장소 메모리를 재사용하는 반면, Redis는 명시적으로만 데이터를 제거 할 수 있기 때문에 저장소 메모리를 재사용하지 않는다.
      • Memcached는 문자열만 지원하지만 Redis는 문자열 외에도 다른 다양한 data type을 지원한다.

Storage[Relational Database]

  • Oracle
    • 미국의 기업에서 만든 데이터베이스 관리 시스템이다.
    • Database에서 많이 쓰이며, 기능 또한 가장 좋은 것으로 알려진 최고의 Database이다.
    • 유닉스 환경에서 사용되는 RDBMS로는 현재 가장 널리 사용되는 대표적인 제품이다.
  • PostgreSQL
    • 확장 가능성 및 표준 준수를 강조하는 객체-관계형 데이터베이스 관리 시스템(ORDBMS)의 하나이다.
    • MySQL에 비해서 SQL 표준을 더 잘 지원하고 기능이 더 강력하며 쿼리가 복잡해질수록 성능이 더 잘 나오는 편이다.
    • 특히 PostGIS를 통한 Geosp atial query는 오라클마저 씹어삼키는 강력함을 자랑한다.
    • Citus 익스텐션을 이용하면 그 동안 약점으로 지적해왔던 병렬 인덱싱도 손쉽게 처리 가능하다.
    • 장점
      • 라이센스에 대한 비용 문제가 전혀 없다.
      • 이미 사용 DB보다 더 낮은 유지보수와 튜닝을 생각해서 만들었기 때문에 인력 비용이 절감된다.
      • 전설적인 신뢰성과 안정성을 가지고 있다.
      • 오픈 소스 코드이기 때문에 확장할 때 무료로 쉽게 할 수 있다.
      • 원래 유닉스 기반이지만 8.0 부터는 윈도우도 지원하고 있고 크로스 플랫폼 지원이 된다.
      • 여러 행 데이터에 대한 저장 전략이 높은 볼륨 환경을 위해 설계되어 있다.
      • GUI 인터페이스를 통해 DB 설계 및 관리를 할 수 있다.
  • MariaDB
    • 오픈소스 관계형 데이터베이스이다.
    • 기존에 MySQL 엔터프라이즈에서 플러그인으로 제공한 쓰레드풀 기능이 내장됐으며, 스토리지 엔진을 활용한 샤딩기술을 제공한다.
    • 특징
      • 멀티 소스/병렬복제
      • Global Transaction ID로 안정성 강화
      • ROLE 기반 권한 관리 지원
      • 서브 쿼리 개선
      • 세선별 메모리 사용량 추적 기능
      • Slow Query Log 로깅과 동시에 실행계획을 같이 출력
  • MySQL
    • 세계에서 가장 많이 사용되고 있는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다.
    • 오픈소스이며, 다중 사용자와 다중 스레드를 지원한다.
    • 또한 C언어, C++, JAVA, PHP 등 여러 프로그래밍 언어를 위한 다양한 API를 제공하고 있다.
    • 유닉스, 리눅스, 윈도우 등 다양한 운영체제에서 사용할 수 있으며, 특히 PHP와 함께 웹 개발에 자주 사용된다.
    • 오픈 소스 라이센스를 따르기는 하지만, 상업적으로 사용할 때는 상업용 라이센스를 구입해야 한다.
      • 장점
        • 오픈 소스 라이센스를 따르기 때문에 무료로 사용할 수 있다.
        • 다양한 운영체제를 사용할 수 있으며, 아주 빠르고 효과적으로 처리 할 수 있다.
        • 크기가 큰 데이터 집합도 아주 빠르고 효과적으로 처리 할 수 있다.
        • 널리 알려진 표준 SQL 형식을 사용한다.
        • MySQL 응용 프로그램을 사용자의 용도에 맞게 수정 할 수 있다.
  • MSSQL
    • 분산형 클라이언트 서버 환경을 위해서 특별히 디자인 된 고성능의 스케일러블 데이터베이스 관리 시스템
    • Microsoft 사에서 만든 웹DB이다.
    • 특징
      • 집중화된 서버 관리로 분산된 기업환경에서의 집중된 서버 관리 도구를 제공한다.
      • DBMS에 의한 데이터 무결성의 지원이다. 트랜잭션 기반으로 완전한 무결성 구축을 지원한다.
      • 서버 데이터베이스의 일관성과 복구를 지원하는 트랜잭션을 관리하고, 다양한 트랜잭션 처리방식을 지원한다.
      • 여러 단계의 보안 레벨을 지원한다.
      • 다양한 분산 데이터 처리기능을 지원한다.

Storage[NoSQL Database]

  • NoSQL = Not Only SQL
    • 기존의 RDMBS 형태의 관계형 데이터베이스는 말 그대로 데이터의 관계가 긴밀히 연결되어 있는 형태인데, 단어만 봐도 알 수 있듯이 SQL을 활용하는 형태가 아닌 다른 방식의 저장기술을 말한다.
  • Redis
    • 대용량 처리 관련 기술이다.
    • 오픈 소스 소프트웨어다.
    • 디스크가 아닌 메모리 기반의 데이터 저장소다.
    • NoSQL & Cache 솔루션이며 메모리 기반으로 구성된다.
    • 명시적으로 삭제, Expire를 설정하지 않으면 데이터는 삭제되지 않는다.(=영구적 보존)
    • 여러대의 서버 구성이 가능하다.
    • 데이터베이스로 사용될 수 있으며 Cache로도 사용 될 수 있는 기술이다.
    • 장점
      • 리스트, 배열과 같은 데이터를 처리하는데 유용하다.
      • 메모리를 활용하면서 영속적인 데이터 보존이 가능하다.
    • 단점
      • 메모리 파편화가 발생하기 쉽다.
      • 대규모 데이터에 대한 응답 속도의 불안정하다.
  • MongoDB
    • MongoDB는 NoSQL이기 때문에 관계형 데이터베이스의 테이블 개념이 없다. 그 대신 MongoDB는 여러 데이터가 모인 하나의 단위를 컬렉션(Collection)이라고 부른다.
    • MongoDB는 데이터 저장소를 가지고 있으며 그 안에 여러개의 컬렉션을 넣을 수 있다. 즉, 데이터베이스는 컬렉션의 집합이라고 할 수 있다. 그리고 각각 컬렉션은 여러 개의 문서 객체를 가질 수 있다.
    • 문서 객체는 속성들의 집합으로서 한 사람의 이름과 나이 등을 저장하고 싶을 때 하나의 문서 객체를 만든 후 그 안에 자바스크립트 객체와 같이 속성들을 추가하여 저장 할 수 있다.
    • 문서지향 데이터베이스
    • 범용 데이터베이스
      • 장점
        • 스키마가 없다
        • 낮은 진입장벽
        • 매우 고성능이다.
        • 수평 확장이 쉽다. 복제본 집합을 사용하여 크기 조정을 읽는다. 샤딩(자동 균형 조정)을 사용하여 크기를 조정한다.
        • 데이터 값에 따라 원하는 수준의 일관성을 선택할 수 있다.
      • 단점
        • MongoDB의 데이터 크기는 일반적으로 예를 들어 각 문서에는 필드 이름이 저장되어 있다.
        • 쿼리에 대한 유연성(예 : JOIN 없음)
        • 트랜잭션에 대한 지원이 없다.
        • 최신 정보가 부족하거나 빠르게 진화하는 제품
  • Cassandra
    • 오픈 소스 NoSQL Database 관리 시스템의 하나이며, 단일 장애점 없이 고성능을 제공하면서 수많은 서버 간의 대용량 데이터를 관리하기 위해 설계되었다.
    • 장점
      • 각 노드 장비들의 추가, 제거 등이 자유롭다.
      • 데이터 센터까지 고려 할 수 있는 데이터 복제 정책을 사용하여 안정성 측면에서 많은 장점을 가지고 있다.
      • 장비들을 늘리고 줄이는데 큰 비용이 들지 않는다.
    • 단점
      • 조인이나 트랜잭션을 지원하지 않고, 인덱스 등의 검색을 위한 기능도 매우 단촐하다.
  • RethinkDB
    • Real-Time에 최적화된 오픈소스 데이터베이스이다.
    • 확장 가능한 JSON 데이터베이스이며, 전통적인 데이터베이스 아키텍처를 바꾸어 변경 사항을 폴링하는 대신 업데이트 된 쿼리 결과를 실시간, 지속적으로 push 할 수 있다.
    • 특징
      • 실시간에 최적화되어 있다.
      • JSON 기반의 데이터베이스이다.
      • 업데이트가 발생 되었을 시 지속적/실시간 push를 해준다.
      • 확장이 쉬운 분산 데이터베이스
      • 실시간 웹 애플리케이션 구축을 위한 오픈소스 데이터베이스
      • 웹 UI 관리 콘솔을 제공한다.
  • Couchbase
    • NoSQL DB로 분류되며 DB모델을 Key-Value이고 Schema-less 모델로 문서지향형이다.
    • 저장 데이터 형태는 JSON과 BLOB으로 DISK 저장 또는 휘발선 RAM에 저장이 가능하다.
    • 특징
      • Cache DB로 검색속도가 매우 빠르다.
      • SQL과 유사한 N1QL로 SQL을 지원한다.
      • 스키마가 없기 때문에 유연하게 다른 형식의 데이터도 입력할 수 있다.
      • 조회가 많은 조건에 대해서는 인덱싱 할 수 있으며 SQL 문으로 인덱스가 가능하다.
      • Auto Sharding 기능이 있어 쉽게 서버를 추가 할 수 있으며 APP 변경없이 가능하다.
      • 다양한 SDK를 지원한다.

 

Ruby

  • 동적 객체 지향 스트립트 프로그래밍 언어
  • 순수 객체 지향 언어 -> 정수나 문자열 등을 포함한 데이터 형식 등 모든 것이 객체
  • 구문은 ALGOL계를 계승하면서 가독성 중시
  • 이식성이 매우 높음

Puby[Package Manager]

  • RubyGame
    • Ruby를 위한 크로스 플랫폼 멀티미디어 라이브러리
    • 오픈소스

Puby[Package Testing]

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

Puby[Package Framework]

  • Ruby on Rails
    • Ruby로 작성된 MVC 패턴을 이용하는 오픈소스 웹 프레임워크
    • 모델, , 컨트롤러의 템플릿 생성 및 테스트 등 자동화하는 툴, 테스트를 위한 웹서버 등 포함
    • ActiveRecord 기반 -> 데이터베이스 작업을 추상화화여 CRUD 작업을 자동화 및 단순화
  • Sinatra
    • 루비로 작성된 자유-오픈소스 소프트웨어 웹 애플리케이션 라이브러리이자 도메인 특화 언어
    • 크기가 작고 유연
    • 다른 프레임워크에 사용되는 일반적인 MVC 패턴을 준수하지 않음
    • 루비를 사용하여 최소한의 노력으로 빠르게 웹 애플리케이션을 만드는 데 초점을 둠.

Puby[ ]

  • ByeBug
    • 디버거
    • 스택 프레임을 위한 중단 첨 처리 및 바인딩을 제공하며 명령 행 인터페이스를 사용하기 쉬움

Node.js

  • 확장성 있는 네트워크 애플리케이션 개발에 사용되는 소프트웨어 플랫폼
  • V8(자바스크립트 엔진)으로 빌드 된 이벤트 기반 자바스크립트 런타임

Node.js[Package Manager]

  • npm
    • 자바스크립트 프로그래밍 언어를 위한 패키지 관리자 (Node.js의 기본 패키지 관리자)
  • yam
    • Node.js의 새로운 패키지 관리자
    • npm의 핵심 이슈를 해결하기 위해 만듦
    • 보다 빠르고 안정적이며 보안성이 뛰어남

Node.js[Package Framework]

  • Express
    • 웹 및 모바일 애플리케이션을 위한 Node.js 웹 애플리케이션 프레임워크
    • 서버를 쉽게 실행/운영 가능
    • 내장된 라우터로 코드를 쉽게 재사용 가능
  • hapi
    • Node.js 웹 프레임워크
    • 크고 복잡한 어플리케이션에 특성화 되어 있음
    • 보일러플레이트로 작성해야 할 코드가 많아서 작은 웹앱에서는 쓰기 불편
  • Koa
    • 웹 응용 프로그램 및 API를 위한 Express 팀의 새로운 웹 프레임워크
    • 다른 프레임워크에 비해 미들웨어 작성이 쉬움
    • ES6를 도입하고 있어 ES6 제너레이터 사용 가능
  • Sails.js
    • Express 기반의 가벼운 프레임워크

Node.js[Package Testing]

  • Jesl
    • 페이스북에서 만든 테스트 프레임워크
  • Mocha
    • node js에서 가장 많이 사용하는 테스트 프레임워크
  • Jasmine
    • 테스트 도구
    • 전체가 한 페키지로 되어있어 사용하기 쉬움
  • Chai
    • Node 및 브라우저를 위한 BDD/TDD 단언문 라이브러리 (Assertion Library)
    • 모든 자바 스크립트 테스트 프레임워크와 짝을 이룰 수 있음
  • should js
    • Node.js에서 사용할 수 있는 표현적이고 가독성이 있으며 테스트 프레임워크에 의존적이지 않은 단언문 라이브러리
    • Node.js에서 제공하는 Assert 모듈 확장판
    • Node.jsAssert 모듈을 지원하는 어떠한 테스트 프레임워크에서도 사용 가능

Web Server

  • 하드웨어 : Web 서버가 설치되어 있는 컴퓨터
  • 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠 (.html .jpeg .css )를 제공하는 컴퓨터 프로그램

Web Server[ ]

  • Caddy
    • 오픈소스인 Go로 작성된 HTTP/2를 사용하는 웹 서버
    • 기본적으로 HTTPS를 활성화 함
  • Apache
    • HTTP 웹 서버
    • Client에서 요청을 받으면 MPM(Multi Processing Module) 방식으로 처리
  • Nginx
    • HTTP 웹 서버
    • Event Driven 방식으로 처리 -> CPU와 관계없이 모든 IO들을 Event Listener로 미루기 때문에 응답이 빠르게 진행되어 1개의 프로세스로 더 빠른 작업 가능 -> 메모리 측면에서 시스템 리소스를 적게 처리

RESTful APIs

  • REST(Representational State Transfer) : 소프트웨어 프로그램 개발의 아키텍처의 한 형식, 자원을 정의하고 자원에 대한 주소를 지정하는 방법론
  • RESTful : REST의 비공식적 구현 가이드
  • RESTful API : REST의 특징을 지키면서 API를 제공하는 것

 

Read obout MVC

  • ...

Authentication

  • 자신이 누구라고 주장하는 사람을 확인하는 절차
  • JSON Web Token (JWT)
    • 웹표준으로서 두 개체에서 JSON 객체를 사용하여 가볍고 자가수동적인 방식으로 정보를 안전성 있게 전달
    • 사용 예시) 회원인증, 정보교류
  • QAuth 2.0
    • 외부 서비스의 인증 및 권한부여를 관리하는 범용 프레임워크

SOLID, YAGNI, KISS etc

  • 객체지향 개발 원칙 (SOLID, DRY, KISS, YAGNI)

Regular Expresstion

  • 정규식 : 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어
  • 주로 Programming LanguageText Editor 등에서 문자열의 검색과 치환을 위한 용도로 쓰임

Security

  • 보안

GraphQL

  • 레이어 쿼리 언어, API를 위한 쿼리 언어
  • 이미 존재하는 데이터로 쿼리를 수행하기 위한 런타임

Docker

  • 컨테이너 기반의 오픈소스 가상화 플랫폼
  • 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줌

Search Engines

  • 월드 와이드 웹에 존재하는 정보와 웹 사이트를 검색하기 위한 프로그램
  • ElasticSearch
    • 루씬 기반의 검색 엔진
    • HTTP 웹 인터페이스와 스키마에서 자유로운 JSON 문서와 함께 분산 멀티테넌트 지원 전문 검색 엔진 제공
    • 자바로 작성, 오픈 소스로 출시
  • Sphinx
    • 파이썬 코드 내에 들어간 문서화 문자열을 자동으로 문서화 해주는 도구
  • Solr
    • Apache Lucene 프로젝트에서 자바로 작성된 오픈 소스 엔터프라이즈 검색 플랫폼
    • 주요 기능 : 전체 텍스트 검색, 히트 하이라이트, 패싯 검색, 실시간 인덱싱, 동적 클러스터링, 데이터베이스 통합, NoSQL 기능 및 풍부한 문서(Word, PDF ) 처리

GOF Design Patterns

  • 디자인 패턴은 소프트웨어 설계에 있어 공통된 문제들에 대한 표준적인 해법과 작명법을 제안한 책
  • 이 분야의 사인방(Gang of Four _ GoF)으로 불리는 Erich Gamma, Richard Helm, Ralph Johnson, John Vissides가 같이 썼음.
  • 생성 패턴, 구조 패턴, 행동 패턴 세가지로 나뉨

Architectural Patterns

  • 주어진 상황에서의 소프트웨어 아키텍쳐에서 일반적으로 발생하는 문제점들에 대한 일반화되고 재사용 가능한 솔루션
  • 디자인 패턴과 유사하지만 더 큰 범주에 속한다.
  • 계층화 패턴, 클라이언트-서버 패턴, 마스터-슬레이브 패턴, 파이프-필터 패턴, 브로커 패턴, 피어 투 피어 패턴, 이벤트-버스 패턴, MVC 패턴, 블랙보드 패턴, 인터프리터 패턴

Give DDD a shot

  • DDD : 도메인 주소 설계, 소프트웨어 설계 기법의 하나
  • 다중 아키텍처의 객체지향 시스템에서 도메인층을 기술하는 것에 중점을 둠

Learn different testing techniques

  • 테스트 설계 기술 : 소프트웨어 개발 프로젝트가 전반적인 품질과 효율성을 향상시키는 데 도움
  • 사양 기반 또는 블랙박스 기술 : 소프트웨어를 입력 및 출력이 있는 블랙박스로 간주, 내부 세부 정보를 방해하지 않고 품질과 정확성 검증 (등기 분할, 경계 값 분석, 의사 결정 테스트, 유스 케이스 테스트)
  • 구조 기반 또는 화이트박스 기술 : 응용 프로그램의 내부 구조를 투명하게 보고 테스트하는 방법 (Statement Coverage 또는 Line Coverage, 조건 범위 또는 조건부 범위, 의사 결정 커버리지 또는 지점 커버리지, 다중 조건 커버리지)
  • 경험 기반 기술 : 테스트 케이스 및 테스트 조건 설계 경험으로부터 논리적으로 추출 (탐색적 테스트, 오류 추측)

 

...더보기

* 알고 가기

가. 프레임워크

  • 어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조이며, 소프트웨어 개발에 있어 하나의 뼈대 역할을 한다.

나. 라이브러리와의 차이점은?

  • 라이브러리와 프레임워크를 헷갈리는 경우도 있는데, 보통 프레임워크라고 하면 클래스와 라이브러리가 합쳐진 형태로 볼 수 있다. 

  • 메소드 및 클래스화, 즉 모듈화를 하는 이유 중 하나가 재사용성인데, 프레임워크는 이 재사용성을 큰 그룹 단위로 묶어주었다고 보면 된다. 재사용 가능한 수많은 클래스들과 라이브러리들을 융합한 채로 처음부터 제공해 주기 때문에, 여러 개의 표준을 만들지 않아도 돼서 개발자의 피곤함을 덜어준다.

 

 

2019.07.29(월)

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함