⭐ 동기 vs 비동기

  • 동기 : 클라이언트가 요청을 보낸 후 서버로부터 요청에 대한 응답(=결과)가 와야 다음 동작을 실행
  • 비동기 : 요청을 보낸 후 응답에 상관없이 다음 동작을 실행
    -- 비동기는 자원의 효율적인 사용이 가능하지만 설계가 동기적방식보다 복잡

API (Application Programming Interface)

  • API는 응용 프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스

  • 쉽게 말하면, 응용 프로그램을 개발할 때 사용하는 인터페이스

  • 구글맵 API, 카카오 비전 API 등 기존에 있는 응용 프로그램을 통해서 데이터를 제공 받거나 기능을 사용하고자 할 때 사용하는 인터페이스 및 규격

  • openAPI는 누구나 사용할 수 있도록 공개된 API

⭐ REST API와 RESTful API

  • REST란 자원을 주고받은 웹 상에서의 통신 체계에 있어서 범용적인 스타일을 규정한 아키텍처

  • REST (REpresentational State Transfer)는 자원(RESOURCE)의 표현(Representational)에 의한 상태전달

  • URL로 자원을 표현하고 자원에 대한 행위는 HTTP Method (POST, GET, PUT, DELETE 등)

  • REST API는 REST기반으로 서비스 API를 구현한 것

  • RESTful API는 REST API를 제공하는 웹 서비스 즉, 사용자가 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이 목적

REST의 특징

  • Uniform Interface (유니폼 인터페이스) : URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일
    -- 원칙을 따르면 클라이언트와 서버 간의 인터페이스가 통일되고, 각 리소스의 식별과 조작 방법이 일관성을 가지게 됨

  • Stateless (무상태성) : REST는 무상태성 성격, 상태정보를 따로 저장하거나 관리하지 않아 API서버는 들어오는 요청만을 단순히 처리하면 되기 때문에 상태가 없다고 표현

  • Cacheable (캐시 가능) : HTTP라는 기존 웹 표준을 그대로 사용하기 때문에 HTTP의 특징인 캐싱을 사용 가능한데 HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하여 캐싱 구현

  • Self - descriptiveness (자체 표현 구조) : REST API 메세지만 보고도 이를 쉽게 이해할 수 있는 자체 표현구조로 되어있다는 것

  • Client - Server구조 : REST 서버는 API 제공, 클라이언트는 사용자 인증이나 세션, 로그인 정보들을 직접 관리 이렇게 역할이 확실히 구분되기 때문에 개발 내용이 명확, 의존성 감소

  • 계층형 구조 : 다중 계층으로 구성될 수 있고 보안, 로드 밸런싱, 암호화 계층을 추가해 유연성 확보, Proxy, 게이트웨이 같은 네트워크 중간 매체 사용 가능

⭐ REST API의 핵심

URI는 리소스를 표현해야 한다.

  • 리소스명은 동사가 아닌 명사를 사용
/students/1
  • 리소스는 Collection과 Document로 표현
/locations/seoul/schools/3

여기서 locations는 Collection을
seoul은 Document를 표현
  • 그 리소스에 대한 행위는 HTTP의 Method르 표현해야함
    GET, POST, PUT, DELETE 등

  • 요청에 대한 응답의 상태코드 또한 명확하게 돌려주는 것도 잘 설계된 REST API

⭐ 프레임워크

  • 프레임워크는 뼈대나 기반구조를 뜻하고 '제어의 역전'이라는 개념이 적용된 대표 기술

  • 제어의 역전이란 어떤 일을 하도록 만들어진 프레임워크에 제어의 권한을 넘김으로써 클라이언트 코드가 신경쓸 일을 줄이는 것

  • 구조를 제공해주기 때문에 프로그래머는 프레임워크 뼈대 위에서 코드를 작성하여 프로그램을 개발

⭐ 라이브러리

  • 라이브러리는 특정 기능에 대한 도구 또는 함수들의 집합

⭐ 프레임워크 vs 라이브러리

  • 라이브러리와 프레임워크의 차이는 제어 흐름에 대한 주도권을 누가 쥐고 있느냐 즉, 애플리케이션의 Flow(흐름)을 누가 쥐고 있느냐에 달려 있음

  • 프레임워크는 프레임워크가 쥐고 있고, 라이브러리는 사용자가 쥐고 있음

⭐ 컴파일 언어

  • 컴파일이란, 고급 언어 (인간이 구분하기 쉬운 언어)로 작성된 프로그램을 기계어로 번역하고 기계어 프로그램으로 고치는 과정

  • 컴파일러는 컴파일을 수행하는 소프트웨어

  • 컴파일 언어는 소스코드 여러개를 한 번에 묶어 컴파일한 후에 실행
    -- C, java 같은 코드

  • 특징
    -- 컴파일하는데 시간이 걸리지만 실행되는 속도가 빠름
    -- 컴파일 하게 되면 실행 가능한 파일 (목적 프로그램)이 생성

  • 컴파일러 변환 예제
    -- 파스칼 -> C언어
    -- JAVA -> ByteCode
    -- C -> 어셈블리어
    -- TypeScript -> JavaScript

⭐ 인터프리터 언어

  • 인터프리터란, 고급 언어로 작성된 프로그램을 한 줄 단위로 읽고 한 줄 단위로 실행하는 프로그램

  • 즉, 소스코드를 바로 실행하는 컴퓨터 프로그램 또는 환경

  • 특징
    -- 한 줄 한 줄 번역하며 실행하기 때문에 컴파일 언어보다 처리속도가 느림
    -- 프로그램을 바로 실행할 수 있고 동작을 확인해가며 개발 가능

⭐ 트랜스 파일러

  • 트랜스 파일러는 트랜스 컴파일러라고 불림
  • 트랜스 파일러는 하나의 프로그래밍 언어로 작성된 프로그램의 소스코드를 입력 받아 다른 프로그래밍 언어로 동등한 소스 코드를 만들어 내는 컴파일러의 일종
  • 즉, 컴파일러가 더 큰 범주에 속하고 트랜스 파일러는 그 안에 속함
  • 트랜스 파일러 변환 예제
    -- JS ES6 -> ES5
    -- C++ -> C

폴리필 (Polyfill)

  • 웹 개발에서 기능을 지원하지 않는 웹 브라우저 상의 기능을 구현하는 코드

  • 예를 들어, ES6에만 있는 기능을 ES6를 지원하지 않는 브라우저에서 사용하고 싶을 때 폴리필을 사용

  • 폴리필 플러그인 로드 때문에 시간과 트래픽이 늘어나고 브라우저별 기능을 추가하는 것 때문에 코드가 매우 길어지고 성능이 저하됨

모듈과 모듈화

  • 모듈 : 소프트웨어 설계에서 기능 단위로 분해하고 추상화 되어 재사용 및 공유 가능한 수준으로 만들어진 단위

  • 모듈화 : 소프트웨어의 성능을 향상 시키거나 디버깅, 시험, 통합 등이 용이하도록 하는 소프트웨어 설계 기법

⭐ 컴포넌트

  • 프로그래밍에 있어 재사용이 가능한 각각의 독립된 모듈
profile
기록, 잊을 수 있는 즐거움

0개의 댓글