3. 표현(representations) : 리소스에 대한 표현(HTTP Message Body)
1. URI 설계
URI는 URL을 포함하는 개념입니다
URL이 리소스를 가져오는 방법에 대한 위치라면 URI는 문자열을 식별하기 위한 표준입니다
URI는 명사를 사용해야 하며 동사를 피해야 합니다.
모든 경우에 완벽하게 호환되지는 않습니다. 세부적인 동사의 경우 URI에 포함될 수 밖에 없습니다.
가령 모바일 결제라는 REST API를 설계한다고 가정할 경우 OTP발행, 결제 진행, 기타 API 동작에 대해 HTTP메서드만으로는 대응하기 힘듭니다. 앞의 URI 설계에 대한 원칙은 어디까지나 불필요한 동사를 URI에 포함하는 것을 지양해야 한다는 것이지 완전히 배제시킨다는 것은 아닙니다
URI에서는 명사에 단수형보다는 복수형을 사용해야 합니다
컬렉션으로 URI를 사용할 경우 컬렉션을 한번 더 감싼 충첨 형식으로 사용하는 것이 종습니다
_embedded:[
{
books:....
},
{
stores:....
},
{....}
]
2. 행위 설계
Resource
GET(read)
POST(create)
PUT(update)
DELETE(delete)
/books
book 목록 보기
해당 book 추가
/books/1
ID가 1인 book 보기
ID가 1인 book 수정
ID가 1인 book 삭제
/books의 경우 book의 목록을 표현한다는 기본 전제가 깔려 있습니다.
/books 자체가 복수의 book을 의미하므로 books를 게시판에 표현할 때 페이징을 처리하는 값을 추가로 제공할 수도 있습니다.
ex) /books?page=0&size=10&sort=desc
page, size, sort 파라미터를 따로 지정하지 않으면 서버에서 기본으로 설정한 값으로 반환됩니다
-웹과 같은 분산 하이퍼미디어 시스템에서 사용하는 통신 네트워크 아키텍처로, 네트워크 아키텍처의 원리 모음입니다
웹은 전송 방식으로 HTTP를, 식별방법으로 URI를 사용합니다
HTTP는 웹에서 GET, POST, PUT, DELETE 등의 메서드를 사용하여 정보를 주고받는 프로토톨입니다
REST는 HTTP와 URI의 단순하고 간결한 장점을 계승한 네트워크 아키텍처입니다
따라서 다양한 요구사항에 대응하여 때로는 단순하게, 때로는 서버와 클라이언트가 서로 통신하는 리소스에 대해 복잡한 방식으로 상호작용할 수 있습니다
REST의 목적
1. 구성요소 상호작용의 규모 확장성
2. 인터페이스의 범용성
3. 구성요소의 독립적인 배포
4. 중간적 구성요소를 이용한 응답 지연 감소, 보안 강화, 레거시 시스템 인캠슐레이션
RESTful의 제약 조건
REST의 구현 원칙을 제대로 지키면서 REST 아키텍처를 만드는 것을 RESTful이라고 함
1. 클라이언트/서버
: 클라이언트와 서버가 서로 독립적으로 구분되어야 하고 서버 또는 클라이언트 증설 시에 서로간의 의존성 때문에 확장에 문제가 되는 일이 없어야 한다
2. 상태 없음
:클라이언트와 서버 간의 통신시에 상태가 없어야 한다. 단순히 들어오는 요청만 처리하여 구현을 더 단순화한다. 단 클라이언트의 모든 요청은 서버가 알아듣는 데 필요한 모든 정보를 담고 있어야 한다.
3. 레이어드 아키텍쳐(Layered Architecture)
:서버와 클라이언트 사이에 중개서버(게이트웨이, 방화벽, 프록시)나 로드밸런싱, 공유캐시가 있는 것처럼 다계층 형태로 레이어를 추가하거나 수정하거나 제거할 수 있고 확장성이 있어야 한다
4. 캐시가능(cacheable)
:서버의 응답들은 캐시를 가지고 있거나 없거나 둘 중의 하나인데, 캐시를 가지고 있을 경우에는 클라이언트가 캐시를 통해서 응답을 재사용할 수 있고 이를 통해서 서버의 부하를 낮추어서 서버의 성능이 향상될 수 있다. HTTP장점을 그대로 계승한 아키텍쳐가 REST라서 HTTP의 캐시 기능을 적용할 수도 있습니다
5. 코드 온 디멘드(Code On Demand)
:요청이 오면 코드를 준다는 의미로 특정 시점에 서버가 특정 기능을 수행하는 스크립트 또는 플러그인을 클라이언트에 전달해서 해당 기능을 동작하도록 하는 것이다. 코드 온 디멘드의 예로는 애플릿, 자바스크립트, 플래시가 있다. 이 제약조건은 선택가능합니다.
6. 통합 인터페이스
서버와 클라이언트 간의 상호 작용은 일관된 인터페이스들 위에서 이뤄져야 한다
통합 인터페이스 규칙
1. 리소스 식별
:웹 안에서 서로 구분할 수 있는 개념으로 URI와 같은 고유 식별자를 통해 표현할 수 있다
2. 표현을 통한 리소스 처리
:사람의 말에 강세가 있어서 같은 문장을 말하더라도 말한 사람의 강세나 어조에 따라 의도가 달라질 수 있듯이 같은 데이터에 대해서 표현할 때 JSON, XML, HTML 페이지와 같이 다양한 콘텐츠 유형으로 표현할 수 있다. 그렇지만 말의 강세나 어조가 바뀌어도 문장 자체는 그대로인 것처럼 데이터는 변경되지 않는다.
3. 자기 묘사 메시지
:일반적으로 네트워크 통신을 할 때는 헤더부분에 현재 보내고 있는 데이터 패킷에 대한 메타 정보를 담아서 본문을 읽을 때 해당 본문이 어떤 의도로 쓰여진 것인지 알 수 있다. 마찬가지로 HTTP 통신을 할때도 HTTP header에 메타 데이터 정보를 추가해서 실제 데이터와는 관련 없지만 데이터에 대한 설명을 나타내는 정보를 담을 수 있다
4. 애플리케이션의 상태에 대한 하이퍼미디어(HETEOAS, Hypermedia As The Engine Of Application State)
간단히 말해서 웹은 여러 페이지들과 그 페이지들을 이동할 수 있는 링크 정보들로 구성되어 있다. REST API를 개발할때도 단순히 데이터만 전달하지 않고 링크 정보까지 포함한다면 좀 더 웹에 친숙한 API가 될 것이다
아나콘다(Anaconda)는 수학과 과학 분야에서 사용되는 여러 패키지들을 묶어 놓은 파이썬 배포판으로서 SciPy, Numpy, Matplotlib, Pandas 등을 비롯한 많은 패키지들을 포함하고 있다. Anaconda는 특히 최근에 데이타 사이언스와 머신 러닝 분야에서 파이썬을 사용하기 위해 기본적으로 설치하는 배포판이 되었다(데이터 과학 및 기계학습을 수행하는 가장 쉬운 파이썬 배포판이다)
Anaconda는 패키지 관리자, 환경 관리자, Python / R 데이터 과학 배포판 및 1,500 개 이상의 오픈 소스 패키지 모음입니다
구성된 패키지
라이브러리 관리
Conda
시각화
Matlpotlib, Bokeh, Datashader, HoloViews
데이터 분석
Numba, pandas, DASK, numPy, sciPy
기계학습
TensorFlow,
Jupyter
spyder
H2o.ai
아나콘다 구성요소
4개의 구성요소
아나콘다 네이게이터
아나콘다 프로젝트
데이터 사이언스 라이브러리
Conda(라이브러리, 종속성 및 환경 관리)
Data Science 라이브러리는 (a) Jupyter와 같은 IDE 개발도구, (b) Numpy, SciPy 같은 과학 분석용 라이브러리, (c) Matplotlib 같은 데이타 시각화 (Data Visualization) 라이브러리, (d) TensorFlow 같은 머신 러닝(Machine Learning) 라이브러리 등을 포함하고 있다.
Anaconda Navigator는 UI 클라이언트로서 하부 컴포넌트를 쉽게 사용하도록 한 데스크탑 포털 기능을 담당한다. 예를 들어, Jupyter나 Spyder 같은 개발도구를 이곳에서 Launch할 수 있다.
주피터 노트북
주피터 노트북(Jupyter Notebook)은 웹 브라우저에서 파이썬 코드를 작성하고 실행해 볼 수 있는 개발도구이다. 일반적으로 아나콘다(Anaconda)를 설치하면 Jupyter Notebook이 함께 설치되어 Jupyter를 사용할 수 있다. 물론 Anaconda를 사용하지 않는 경우 pip 을 통해 Jupyter 패키지를 설치할 수도 있지만, 통상 Anaconda를 설치해서 사용할 것을 권장한다.
Anaconda가 설치된 후, Anaconda 메뉴중 Jupyter Notebook을 선택하거나 Anaconda Navigator에서 Jupyter Notebook 메뉴를 선택하면 Jupyter를 실행할 수 있다.
Anaconda 메뉴중 Jupyter Notebook을 선택한 경우, Jupyter Notebook 서버 (콘솔 프로그램)와 클라이언트로 사용되는 웹 브라우저 등 2개의 프로그램이 실행된다. Notebook 서버 프로그램은 백그라운드에서 실행되는 파이썬 프로그램으로 웹 브라우저 클라이언트가 접속하는 서버 프로그램이며 실제 파이썬 코드 실행은 여기에서 일어난다. 그리고, 웹 브라우저는 파이썬 코드를 입력받고, 실행해 볼 수 있는 UI를 제공하는 클라이언트로서 코드를 Notebook 서버에 보내 결과를 다시 웹 브라우저에 뿌려 주게 된다.
Anaconda Navigator에서 Jupyter Notebook 메뉴를 선택한 경우에는 윈도우즈의 경우 Notebook 서버 콘솔 프로그램이 백그운드 프로세스로 실행되어 화면에 보이지 않으며, 클라이언트인 웹 브라우저만 화면에 나타난다. 하지만, 동작 방식은 기본적으로 동일하다