[spring] part3. 스프링입문 - 03 웹 개발 개론
Ch03. 웹 개발 개론
Web 개론
Web 이란?
World Wide Web(WWW,W3): 모든 사람들이 정보를 공유하는 전세계적인 정보 공간
Web site : HRML로 구성된 여러 사이트들
API : ex> Kakao Open API, Google Open API, Naver Open API ...
Web의 기반
User Interface : Chrome, Safari, Explorer, Smart Watch, IP TV ...
Web의 기본 3가지 요소
URI(Uniform Resource Identifier) : 리소스 식별자 - 다양한 정보에 접근 할 수 있는 정보
HTTP(Hypertext Transfer Protocol) : 어플리케이션 컨트롤할 때 사용 - 어떠한 프로토콜을 통해서 주고받을 것인가
HTML(Hyper Text Markup Language) : 특정한 글자의 색상, 굵기, 이미지의 크기 등 여러가지 정보들을 markup할 수 있음, 하이퍼미디어 포맷, 사용자가 알아보기 쉬운 형태로 표현, 시각적으로 표현하기 위해서 만든 html language
REST
- Client,Server : 클라이언트와 서버가 서로 독립적으로 분리되어 있어야 한다.
- Stateless : 요청에 대해 클라이언트의 상태를 서버에 저장하지 않는다.
치즈버거 주세요 + 콜라 주세요 (x)
치즈버거와 콜라주세요 (o)
- Cache : 클라이언트는 서버의 응답을 Cache(임시저장) 할 수 있어야 한다.
클라이언트가 Cache를 통해서 응답을 재사용할 수 있어야 한다.
-> 서버의 부하를 낮출 수 있어야 한다.
- 계층화 : 서버와 클라이언트 사이에 방화벽, 게이트웨이, Proxy 등 다양한 계층 형태로 구성이 가능해야 하며, 이를 확장 할 수 있어야 한다.
- 인터페이스가 일관성 : 인터페이스의 일관성을 지키고, 아키텍처를 단순화시켜 작은 단위로 분리하여, 클라이언트, 서버가 독립적으로 개선 될 수 있어야 한다.
서버가 바뀌어도 클라이언트에 지장이 없어야 한다. (역도 성립)
- Code on Demand(Optional) : 자바 애플릿, 자바스크립트, 플래시 등 특정한 기능을 서버로부터 클라이언트가 전달 받아 코드를 실행할 수 있어야 한다.
인터페이스의 일관성
1. 자원의 식별
웹 기반의 REST에서는 리소스 접근을 할 때 URI를 사용 한다.
https://foo.co.kr/user/100
resources : user
식별자 : 100
2. 메시지를 통한 리소스 조작
- Web에서는 다양한 방식으로 데이터를 전달 할 수 있다.
- HTML, XML, JSON, TEXT 등을 가장 많이 사용한다.
- 어떤 타입의 데이터인지를 알려주기 위해 HTTP Header 부분에 content-type을 통해서 데이터의 타입을 지정해 줄 수 있다.
- 리소스 조작을 위해 데이터 전체를 전달 하지 않고, 이를 메시지로 전달한다.
서버와 클라이언트가 독립적으로 확장이 불가능하기 때문에
3. 자기 서술적 메시지
- 요청하는 데이터가 어떻게 처리 되어져야 하는지 충분한 데이터를 포함 할 수 있어야 한다.
- HTTP 기반의 REST에서는 HTTP Method와 Header 정보 그리고 URI의 포함되는 정보로 표현 할 수 있다.
GET : https://foo.co.kr/user/100 - 사용자의 정보 요청
POST : https://foo.co.kr/user - 사용자의 정보 생성
PUT : https://foo.co.kr/user - 사용자의 정보 생성 및 수정
DELETE : https://foo.co.kr/user/100 -사용자의 정보 삭제 - 그 외의 담지 못한 정보들은 URL의 메시지를 통하여 표현 한다.
4. 애플리케이션 상태에 대한 엔진으로써 하이퍼미디어
- REST API를 개발할 때 단순히 Client 요청에 대한 데이터만 응답 해주는 것이 아닌 관련된 리소스에 대한 Link 정보까지 같이 포함 되어져야 한다.
- 이러한 조건들을 잘 갖춘 경우 REST Ful 하다고 표현하고, 이를 REST API 라고 부른다.
규악이기 때문에, "반드시가 아니라 이 정도는 지킨다." 느낌 -> 현업에서는 잘 사용하지 않는다.
URI 설계 패턴
1. URI(Uniform Resource Identifier)
인터넷에 특정 자원을 나타내는 주소 값 (유일 응답은 달라질 수 있다)
요청 : http://fastcampus.co.kr/resource/sample/1
응답 : fastcampus.pdf, fastcampus.docx
2. URL(Uniform Resource Locator)
인터넷 상의 자원, 특정 파일이 어디 위치 하는지 식별하는 주소
URL은 URI의 하위 개념이다.
URI 설계원칙
원칙일뿐...
HTTP Protocol
: Web에서 데이터를 주고 받는 프로토콜
- 실제로는 다양한 컴퓨터에서 다룰 수 있는 것은 모두 전송할 수 있다. (XML,JSON, Image , Voice ...)
- HTTP는 TCP를 기반으로 한 REST의 특징을 모두 구현하고 있는 Web 기반의 프로토콜
- HTTP는 메시지를 주고(Requst) 받는(Response) 형태의 통신방법이다.
클라이언트는 서버에 요청을 하고 일정시간 동안 응답이 오지 않거나 일정시간 동안 서버와 connection이 맺어지지 않으면 클라이언트는 해당 요청에 대해서 취소를 함
Method(HTTP의 요청을 처리)
GET : 리소스 추가, 정보를 얻어올 때
POST : 리소스 생성, 추가
PUT : 리소스 갱신, 생성
DELETE : 리소스 삭제
HEAD : 헤더 데이터 취득
OPTIONS : 지원하는 메소드 취득
TRACE : 요청메시지 반환
CONNECT : 프록시 동작의 터널 접속으로 변경멱등성 : 몇 번을 요청해도 같은 응답이 온다
의미 | CRUD | 멱등성 | 안정성 | Path Variable | Query Parameter | DaraBody | |
---|---|---|---|---|---|---|---|
GET | 리소스 추가, 정보를 얻어올 때 | R | O | O | O | O | X |
POST | 리소스 생성, 추가 | C | X | X | O | △ | O |
PUT | 리소스 갱신, 생성 | C/U | O | X | O | △ | O |
DELETE | 리소스 삭제 | D | O | X | O | O | X |
HEAD | 헤더 데이터 취득 | O | O | ||||
OPTIONS | 지원하는 메소드 취득 | O | |||||
TRACE | 요청메시지 반환 | O | |||||
CONNECT | 프록시 동작의 터널 접속으로 변경 | X |
HTTP Status Code
: 서버가 클라이언트한테 처리를 하고 나서 응답의 상태를 나태는 코드
의미 | 내용 | |
---|---|---|
1XX | 처리중 | 처리가 계속되고 있는 상태. 클라이언트는 요청을 계속 하거나 서버의 지시에 따라서 재요청 |
2XX | 성공 | 요청의 성공 |
3XX | 리다이텍트 | 다른 리소스로 리다이렉트. 해당 코드를 받았을 때는 Response의 새로운 주소로 다시 요청 |
4XX | 클라이언트 에러 | 클라이언트의 요청에 에러가 있는 상태. 재전송 하여도 에러가 해결되지 않는다 |
5XX | 서버에러 | 서버 처리중 에러가 발생한 상태. 재 전송시 에러가 해결 되었을 수도 있다. |
자주 사용하는 코드
의미 | |
---|---|
200 | 성공 |
201 | 성공. 리소스를 생성 성공 |
301 | 리다이렉트, 리소스가 다른 장소로 변경됨을 알림 |
303 | 리다이렉트, Client에서 자동으로 새로운 리소스로 요청 처리 |
400 | 요청 오류, 파라미터 에러 |
401 | 권한 없음 (인증 실패) |
404 | 리소스 없음 (페이지를 찾을 수 없음) |
500 | 서버 내부 에러 (서버 동작 처리 에러) |
503 | 서비스 정지 (ex. 점검) |
Author And Source
이 문제에 관하여([spring] part3. 스프링입문 - 03 웹 개발 개론), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@g2g2/part3.-스프링입문저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)