API는 응용 프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
쉽게 말하면, 응용 프로그램을 개발할 때 사용하는 인터페이스
구글맵 API, 카카오 비전 API 등 기존에 있는 응용 프로그램을 통해서 데이터를 제공 받거나 기능을 사용하고자 할 때 사용하는 인터페이스 및 규격
openAPI는 누구나 사용할 수 있도록 공개된 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를 만드는 것이 목적
Uniform Interface (유니폼 인터페이스) : URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일
-- 원칙을 따르면 클라이언트와 서버 간의 인터페이스가 통일되고, 각 리소스의 식별과 조작 방법이 일관성을 가지게 됨
Stateless (무상태성) : REST는 무상태성 성격, 상태정보를 따로 저장하거나 관리하지 않아 API서버는 들어오는 요청만을 단순히 처리하면 되기 때문에 상태가 없다고 표현
Cacheable (캐시 가능) : HTTP라는 기존 웹 표준을 그대로 사용하기 때문에 HTTP의 특징인 캐싱을 사용 가능한데 HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하여 캐싱 구현
Self - descriptiveness (자체 표현 구조) : REST API 메세지만 보고도 이를 쉽게 이해할 수 있는 자체 표현구조로 되어있다는 것
Client - Server구조 : REST 서버는 API 제공, 클라이언트는 사용자 인증이나 세션, 로그인 정보들을 직접 관리 이렇게 역할이 확실히 구분되기 때문에 개발 내용이 명확, 의존성 감소
계층형 구조 : 다중 계층으로 구성될 수 있고 보안, 로드 밸런싱, 암호화 계층을 추가해 유연성 확보, Proxy, 게이트웨이 같은 네트워크 중간 매체 사용 가능
/students/1
/locations/seoul/schools/3
여기서 locations는 Collection을
seoul은 Document를 표현
그 리소스에 대한 행위는 HTTP의 Method르 표현해야함
GET, POST, PUT, DELETE 등
요청에 대한 응답의 상태코드 또한 명확하게 돌려주는 것도 잘 설계된 REST API
프레임워크는 뼈대나 기반구조를 뜻하고 '제어의 역전'이라는 개념이 적용된 대표 기술
제어의 역전이란 어떤 일을 하도록 만들어진 프레임워크에 제어의 권한을 넘김으로써 클라이언트 코드가 신경쓸 일을 줄이는 것
구조를 제공해주기 때문에 프로그래머는 프레임워크 뼈대 위에서 코드를 작성하여 프로그램을 개발
라이브러리와 프레임워크의 차이는 제어 흐름에 대한 주도권을 누가 쥐고 있느냐 즉, 애플리케이션의 Flow(흐름)을 누가 쥐고 있느냐에 달려 있음
프레임워크는 프레임워크가 쥐고 있고, 라이브러리는 사용자가 쥐고 있음
컴파일이란, 고급 언어 (인간이 구분하기 쉬운 언어)로 작성된 프로그램을 기계어로 번역하고 기계어 프로그램으로 고치는 과정
컴파일러는 컴파일을 수행하는 소프트웨어
컴파일 언어는 소스코드 여러개를 한 번에 묶어 컴파일한 후에 실행
-- C, java 같은 코드
특징
-- 컴파일하는데 시간이 걸리지만 실행되는 속도가 빠름
-- 컴파일 하게 되면 실행 가능한 파일 (목적 프로그램)이 생성
컴파일러 변환 예제
-- 파스칼 -> C언어
-- JAVA -> ByteCode
-- C -> 어셈블리어
-- TypeScript -> JavaScript
인터프리터란, 고급 언어로 작성된 프로그램을 한 줄 단위로 읽고 한 줄 단위로 실행하는 프로그램
즉, 소스코드를 바로 실행하는 컴퓨터 프로그램 또는 환경
특징
-- 한 줄 한 줄 번역하며 실행하기 때문에 컴파일 언어보다 처리속도가 느림
-- 프로그램을 바로 실행할 수 있고 동작을 확인해가며 개발 가능
웹 개발에서 기능을 지원하지 않는 웹 브라우저 상의 기능을 구현하는 코드
예를 들어, ES6에만 있는 기능을 ES6를 지원하지 않는 브라우저에서 사용하고 싶을 때 폴리필을 사용
폴리필 플러그인 로드 때문에 시간과 트래픽이 늘어나고 브라우저별 기능을 추가하는 것 때문에 코드가 매우 길어지고 성능이 저하됨
모듈 : 소프트웨어 설계에서 기능 단위로 분해하고 추상화 되어 재사용 및 공유 가능한 수준으로 만들어진 단위
모듈화 : 소프트웨어의 성능을 향상 시키거나 디버깅, 시험, 통합 등이 용이하도록 하는 소프트웨어 설계 기법