티스토리 뷰
**웹 개발자를 위한 웹을 지탱하는 기술 - 야모모토 요헤이 저 - 에서 발췌
[ 기초 ]
- 아키텍처 스타일 : (매크로) 아키텍처 패턴, 복수의 아키텍처의 공통된 성질, 양식, 규정 혹은 독특한 방식을 가리키는 말. ex) MVC, 파이프 앤 필터터??, 이벤트 시스템
- 디자인 패턴 : 마이크로 아키텍처 패턴, 아키텍처 스타일보다 입도(Granularity)가 작은 클래스 등의 설계 양식
** 구현에서 추상도를 한단계 올린 것이 아키텍처이고, 아키텍처에서 추상도를 한단계 더 올린 것이 아키텍처 스타일이다.
추상화 레벨 | 웹에서의 예 |
아키텍처 스타일 | REST |
아키텍처 | 브라우저, 서버, 프록시, HTTP, URI, HTML |
구현 | Apache, Firefox, chrome |
REST 는 웹의 아키텍처 스타일이이다.
REST 는 복수의 아키텍처 스타일을 조합하여 구축한 복합 아키텍처 스타일이다.
[REST 아키텍처 스타일의 구성]
1. 클라이언트 서버
- 클라이언트가 서버에 요청 (Request)을 보내면, 서버는 클라이언트에 대해 응답(Response)을 돌려준다.
2. 스테이트리스 서버
- 서버가 클라이언트의 애플리케이션 상태를 관리하지 않는 것.
- 서버의 구현이 간단해진다.
- 현실적으로 스테이트리스가 아닌 웹 서비스와 웹 API가 많이 있다.
ex) Cookie를 사용한 세션관리 : REST 관점에서 본다면, Cookie를 사용한 세션 관리는 HTTP의 잘못된 확장이다. 그러나 현실적으로 cookie를 사용한 폼인증을 그만둘 수 없다. 따라서, Cookie는 스테이트리스 서버의 이점을 버린다는 것을 이해한 후에 최소한으로 이용한다.
3. 캐시
- 리소스의 신선도에 기초해, 한번 가져온 리소스를 클라이언트 쪽에서 돌려쓰는 방식.
4. 유니폼 인터페이스 ***
- URI로 지정한 리소스에 대한 조작을 통일하고 한정적인 인터페이슬 수행하는 아키텍처 스타일.
ex) HTTP 1.1 의 메소드 : HTTP 1.1 에서는 GET, POST 등 8개의 메소드만 정의하고 있다. 프로그래밍 언어의 기준에서 엄격한 제한으로 느껴지지만, 인터페이스의 유연성에 제약을 가함으로써 전체적인 아키텍처가 간결해진다. 또한 인터페이스를 통일함으로써 클라이언트와 서버 구현의 중립성이 향상된다.
5. 계층화 시스템
- 유니폼 인터페이스를 통해 시스템 전체가 계층화하기 쉬워짐.
ex 1) 웹서비스는 로드 밸런서를 설치해 부하를 분산시키거나, 프록시를 설치해 액세스를 제어할 수 있다. 클라이언트 측면에서 서버나 프록시 모두 동일한 인터페이스로 접속할 수 있기 때문에 접속할 곳이 서버이든 프록시이든 신경쓸 필요가 없다. 왜냐하면, 각 컴포넌트 간에 인터페이스를 HTTP로 통일하고 있기 때문이다.
ex 2) 기간계 레거시 시스템 등 HTTP의 인터페이스를 구현하지 않는 시스템에서도 앞단에 웹 앱 서버를 끼워넣고 HTTP의 인터페이스를 가지게 함으로써, 브라우저 등의 클라이언트와 접속할 수 있게 된다.
6. 코드 온 디맨드
- 프로그램 코드를 서버에서 다운받아 클라이언트에서 실행하는 아키텍처 스타일. Javascript, Flash, Java applet
- 장점 : 클라이언트를 차후에 확장할 수 있다.
- 단점 : 코드 온 디맨드로 프로그램을 다운로드하여 클라이언트에서 실행해버리면 애플리케이션 프로토콜의 가시성은 저하된다. ( 자바스크립트에서 다른 자바스크립트를 다운받아 실행해버리면 추적이 어렵다.)
*** REST는 아키텍처 스타일이므로 실제 시스템 설계 시에는 위 스타일 중 몇가지를 제외하더라도 상관이 없다. 이상을 염두에 두면서 실제로 동작하고 가치를 제공할 수 있는 시스템을 만드는 것이 중요하다.
'Web & Networks' 카테고리의 다른 글
SPA와 SPA 라우팅 원리 (10) | 2017.05.05 |
---|---|
[웹을 지탱하는 기술] URI 설계 (0) | 2015.08.17 |
[웹을 지탱하는 기술] URI 스펙 (0) | 2015.08.17 |
HTTP Protocol / Cookie 정리 (0) | 2014.06.28 |
- Total
- Today
- Yesterday
- 한달살기
- ChatGPT
- 사누르
- 웹
- spring
- javascript
- 회고
- ES6
- AWSKRUG
- 웹을 지탱하는 기술
- ecma6
- rest
- S68
- sanur
- 발리
- 객체지향
- 컨테이너
- Bali
- 개발자
- AWS
- Docker
- Clean code
- 도커
- container
- springboot
- 실수노트
- html
- hands-on
- spring boot
- 독후감
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |